Fix clock carousel flash position

1. Check if the job is active before updating the position
2. Remove the delay since settings clocks is not comparatively light

Test: manuelly tested no more flash
Bug: 281916104
Change-Id: Ieeb3821a6f94f6ddc732a3d3e07e836fd3c66ab7
diff --git a/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt b/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt
index 47c6d2d..c11c333 100644
--- a/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt
+++ b/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModel.kt
@@ -63,7 +63,9 @@
             .flatMapLatest { allClockIds ->
                 interactor.selectedClockId.map { selectedClockId ->
                     val index = allClockIds.indexOf(selectedClockId)
-                    if (index >= 0) {
+                    /** Making sure there is no active [setSelectedClockJob] */
+                    val isSetClockIdJobActive = setSelectedClockJob?.isActive == true
+                    if (index >= 0 && !isSetClockIdJobActive) {
                         index
                     } else {
                         null
@@ -85,10 +87,7 @@
     fun setSelectedClock(clockId: String) {
         setSelectedClockJob?.cancel()
         setSelectedClockJob =
-            viewModelScope.launch(backgroundDispatcher) {
-                delay(SET_SELECTED_CLOCK_DELAY_MILLIS)
-                interactor.setSelectedClock(clockId)
-            }
+            viewModelScope.launch(backgroundDispatcher) { interactor.setSelectedClock(clockId) }
     }
 
     class Factory(
@@ -107,9 +106,5 @@
 
     companion object {
         const val CLOCKS_EVENT_UPDATE_DELAY_MILLIS: Long = 100
-
-        // In the case if the user scroll the clock carousel frequently, we make a delay for
-        // setting the selected clock to avoid too many heavy calls.
-        const val SET_SELECTED_CLOCK_DELAY_MILLIS: Long = 650
     }
 }
diff --git a/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt b/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt
index 4cda0d5..d3e458f 100644
--- a/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt
+++ b/tests/src/com/android/customization/picker/clock/ui/viewmodel/ClockCarouselViewModelTest.kt
@@ -77,7 +77,6 @@
         val observedSelectedIndex = collectLastValue(underTest.selectedIndex)
         advanceTimeBy(ClockCarouselViewModel.CLOCKS_EVENT_UPDATE_DELAY_MILLIS)
         underTest.setSelectedClock(FakeClockPickerRepository.fakeClocks[2].clockId)
-        advanceTimeBy(ClockCarouselViewModel.SET_SELECTED_CLOCK_DELAY_MILLIS)
         assertThat(observedSelectedIndex()).isEqualTo(2)
     }