diff options
author | George Lin <giolin@google.com> | 2023-02-13 21:36:57 +0000 |
---|---|---|
committer | George Lin <giolin@google.com> | 2023-02-14 02:04:53 +0000 |
commit | a15ab7f8a8d87f4cbd3aed3eb92ae7e9e4cc9b44 (patch) | |
tree | b8f966877dbeeba1ca6efbbeb3b41af3785f8774 /src | |
parent | 0fefd5e5ec08deff6f81d9bce30680f2d531d0f4 (diff) | |
download | ThemePicker-a15ab7f8a8d87f4cbd3aed3eb92ae7e9e4cc9b44.tar.gz |
[WPPG] Get and set clock size in settings
Get and set the clock size in the settings.
Test: Manually test that changing the clock size corresponds to the
lockscreen clock size change
Bug: 262924055
Change-Id: I3e4243207e215c0148c6c6db1880f15f95aa7982
Diffstat (limited to 'src')
8 files changed, 40 insertions, 19 deletions
diff --git a/src/com/android/customization/module/ThemePickerInjector.kt b/src/com/android/customization/module/ThemePickerInjector.kt index aed5a8ad..4bef78de 100644 --- a/src/com/android/customization/module/ThemePickerInjector.kt +++ b/src/com/android/customization/module/ThemePickerInjector.kt @@ -303,10 +303,11 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject return clockPickerInteractor ?: ClockPickerInteractor( ClockPickerRepositoryImpl( + secureSettingsRepository = getSecureSettingsRepository(context), registry = clockRegistry, scope = GlobalScope, backgroundDispatcher = Dispatchers.IO, - ) + ), ) .also { clockPickerInteractor = it } } diff --git a/src/com/android/customization/picker/clock/data/repository/ClockPickerRepository.kt b/src/com/android/customization/picker/clock/data/repository/ClockPickerRepository.kt index 19041978..690b6497 100644 --- a/src/com/android/customization/picker/clock/data/repository/ClockPickerRepository.kt +++ b/src/com/android/customization/picker/clock/data/repository/ClockPickerRepository.kt @@ -35,5 +35,5 @@ interface ClockPickerRepository { fun setClockColor(color: Int?) - fun setClockSize(size: ClockSize) + suspend fun setClockSize(size: ClockSize) } diff --git a/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt b/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt index 9e140aa4..e24b8759 100644 --- a/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt +++ b/src/com/android/customization/picker/clock/data/repository/ClockPickerRepositoryImpl.kt @@ -16,24 +16,29 @@ */ package com.android.customization.picker.clock.data.repository +import android.provider.Settings import android.util.Log import com.android.customization.picker.clock.shared.ClockSize import com.android.customization.picker.clock.shared.model.ClockMetadataModel import com.android.systemui.plugins.ClockMetadata import com.android.systemui.shared.clocks.ClockRegistry +import com.android.wallpaper.settings.data.repository.SecureSettingsRepository import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.launch import kotlinx.coroutines.withContext /** Implementation of [ClockPickerRepository], using [ClockRegistry]. */ class ClockPickerRepositoryImpl( + private val secureSettingsRepository: SecureSettingsRepository, private val registry: ClockRegistry, private val scope: CoroutineScope, private val backgroundDispatcher: CoroutineDispatcher, @@ -81,12 +86,26 @@ class ClockPickerRepositoryImpl( registry.seedColor = color } - // TODO(b/262924055): Use the shared system UI component to query the clock size - private val _selectedClockSize = MutableStateFlow(ClockSize.DYNAMIC) - override val selectedClockSize: Flow<ClockSize> = _selectedClockSize.asStateFlow() + override val selectedClockSize: SharedFlow<ClockSize> = + secureSettingsRepository + .intSetting( + name = Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, + ) + .map { setting -> setting == 1 } + .map { isDynamic -> if (isDynamic) ClockSize.DYNAMIC else ClockSize.SMALL } + .shareIn( + scope = scope, + started = SharingStarted.WhileSubscribed(), + replay = 1, + ) - override fun setClockSize(size: ClockSize) { - _selectedClockSize.value = size + override suspend fun setClockSize(size: ClockSize) { + withContext(backgroundDispatcher) { + secureSettingsRepository.set( + name = Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, + value = if (size == ClockSize.DYNAMIC) 1 else 0, + ) + } } private fun ClockMetadata.toModel(color: Int?): ClockMetadataModel { diff --git a/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt b/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt index 846ea21a..c12778b1 100644 --- a/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt +++ b/src/com/android/customization/picker/clock/domain/interactor/ClockPickerInteractor.kt @@ -44,7 +44,7 @@ class ClockPickerInteractor(private val repository: ClockPickerRepository) { repository.setClockColor(color) } - fun setClockSize(size: ClockSize) { + suspend fun setClockSize(size: ClockSize) { repository.setClockSize(size) } } diff --git a/src/com/android/customization/picker/clock/shared/ClockSize.kt b/src/com/android/customization/picker/clock/shared/ClockSize.kt index 91c5cd41..279ee54b 100644 --- a/src/com/android/customization/picker/clock/shared/ClockSize.kt +++ b/src/com/android/customization/picker/clock/shared/ClockSize.kt @@ -18,5 +18,5 @@ package com.android.customization.picker.clock.shared enum class ClockSize { DYNAMIC, - LARGE, + SMALL, } diff --git a/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt b/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt index e785ebd0..ecbb9018 100644 --- a/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +++ b/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt @@ -108,11 +108,11 @@ object ClockSettingsBinder { when (size) { ClockSize.DYNAMIC -> { sizeOptions.radioButtonDynamic.isChecked = true - sizeOptions.radioButtonLarge.isChecked = false + sizeOptions.radioButtonSmall.isChecked = false } - ClockSize.LARGE -> { + ClockSize.SMALL -> { sizeOptions.radioButtonDynamic.isChecked = false - sizeOptions.radioButtonLarge.isChecked = true + sizeOptions.radioButtonSmall.isChecked = true } } } diff --git a/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt b/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt index fcf89049..909491a3 100644 --- a/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt +++ b/src/com/android/customization/picker/clock/ui/view/ClockSizeRadioButtonGroup.kt @@ -35,7 +35,7 @@ class ClockSizeRadioButtonGroup( } val radioButtonDynamic: RadioButton - val radioButtonLarge: RadioButton + val radioButtonSmall: RadioButton var onRadioButtonClickListener: OnRadioButtonClickListener? = null init { @@ -43,8 +43,8 @@ class ClockSizeRadioButtonGroup( radioButtonDynamic = requireViewById(R.id.radio_button_dynamic) val buttonDynamic = requireViewById<View>(R.id.button_container_dynamic) buttonDynamic.setOnClickListener { onRadioButtonClickListener?.onClick(ClockSize.DYNAMIC) } - radioButtonLarge = requireViewById(R.id.radio_button_large) - val buttonLarge = requireViewById<View>(R.id.button_container_large) - buttonLarge.setOnClickListener { onRadioButtonClickListener?.onClick(ClockSize.LARGE) } + radioButtonSmall = requireViewById(R.id.radio_button_large) + val buttonLarge = requireViewById<View>(R.id.button_container_small) + buttonLarge.setOnClickListener { onRadioButtonClickListener?.onClick(ClockSize.SMALL) } } } diff --git a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt b/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt index 54aaec33..1ffb7b82 100644 --- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt +++ b/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt @@ -38,6 +38,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch /** View model for the clock settings screen. */ class ClockSettingsViewModel @@ -189,7 +190,7 @@ private constructor(context: Context, private val interactor: ClockPickerInterac val selectedClockSize: Flow<ClockSize> = interactor.selectedClockSize fun setClockSize(size: ClockSize) { - interactor.setClockSize(size) + viewModelScope.launch { interactor.setClockSize(size) } } private val _selectedTabPosition = MutableStateFlow(Tab.COLOR) |