diff options
3 files changed, 20 insertions, 0 deletions
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 b63fd276..2ceb266e 100644 --- a/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +++ b/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt @@ -132,6 +132,18 @@ object ClockSettingsBinder { } launch { + viewModel.selectedColorOptionPosition.collect { selectedPosition -> + if (selectedPosition != -1) { + // We use "post" because we need to give the adapter item a pass to + // update the view. + colorOptionContainerView.post { + colorOptionContainerView.smoothScrollToPosition(selectedPosition) + } + } + } + } + + launch { viewModel.selectedClockSize.collect { size -> when (size) { ClockSize.DYNAMIC -> { 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 c9be43f2..23fbc7e4 100644 --- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt +++ b/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModel.kt @@ -181,6 +181,10 @@ private constructor( initialValue = emptyList(), ) + @OptIn(ExperimentalCoroutinesApi::class) + val selectedColorOptionPosition: Flow<Int> = + colorOptions.mapLatest { it.indexOfFirst { colorOption -> colorOption.isSelected } } + private fun ColorSeedOption.toColorOptionViewModel( context: Context, selectedColorId: String?, diff --git a/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt b/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt index 8ce96710..d53288d0 100644 --- a/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt +++ b/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockSettingsViewModelTest.kt @@ -82,18 +82,22 @@ class ClockSettingsViewModelTest { @Test fun setSelectedColor() = runTest { val observedClockColorOptions = collectLastValue(underTest.colorOptions) + val observedSelectedColorOptionPosition = + collectLastValue(underTest.selectedColorOptionPosition) val observedSliderProgress = collectLastValue(underTest.sliderProgress) val observedSeedColor = collectLastValue(underTest.seedColor) // Advance COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS since there is a delay from colorOptions advanceTimeBy(ClockSettingsViewModel.COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS) assertThat(observedClockColorOptions()!![0].isSelected).isTrue() assertThat(observedClockColorOptions()!![0].onClick).isNull() + assertThat(observedSelectedColorOptionPosition()).isEqualTo(0) observedClockColorOptions()!![1].onClick?.invoke() // Advance COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS since there is a delay from colorOptions advanceTimeBy(ClockSettingsViewModel.COLOR_OPTIONS_EVENT_UPDATE_DELAY_MILLIS) assertThat(observedClockColorOptions()!![1].isSelected).isTrue() assertThat(observedClockColorOptions()!![1].onClick).isNull() + assertThat(observedSelectedColorOptionPosition()).isEqualTo(1) assertThat(observedSliderProgress()) .isEqualTo(ClockMetadataModel.DEFAULT_COLOR_TONE_PROGRESS) val expectedSelectedColorModel = colorMap.values.first() // RED |