Enable side-tap for scrolling clock carousel (2/2)
Tapping the side should scroll the clock carousel
Tapping the middle preview leads to the preview screen
Test: See bug. Manually tested.
Bug: 281953291
Change-Id: I01b450e5682e7c4fa781a8e96987a06b9f95f58f
diff --git a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
index b55464d..6bd717b 100644
--- a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
+++ b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
@@ -59,6 +59,9 @@
}
)
screenPreviewClickView.accessibilityDelegate = carouselAccessibilityDelegate
+ screenPreviewClickView.setOnSideClickedListener { isStart ->
+ if (isStart) carouselView.scrollToPrevious() else carouselView.scrollToNext()
+ }
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
diff --git a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
index 0b62ffa..d4f501b 100644
--- a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
+++ b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
@@ -100,6 +100,29 @@
}
}
+ fun scrollToNext() {
+ if (
+ carousel.count <= 1 ||
+ (!carousel.isInfinite && carousel.currentIndex == carousel.count - 1)
+ ) {
+ // No need to scroll if the count is equal or less than 1
+ return
+ }
+ if (motionLayout.currentState == R.id.start) {
+ motionLayout.transitionToState(R.id.next, TRANSITION_DURATION)
+ }
+ }
+
+ fun scrollToPrevious() {
+ if (carousel.count <= 1 || (!carousel.isInfinite && carousel.currentIndex == 0)) {
+ // No need to scroll if the count is equal or less than 1
+ return
+ }
+ if (motionLayout.currentState == R.id.start) {
+ motionLayout.transitionToState(R.id.previous, TRANSITION_DURATION)
+ }
+ }
+
fun getContentDescription(index: Int): String {
return adapter.getContentDescription(index, resources)
}
@@ -485,6 +508,7 @@
// The carousel needs to have at least 5 different clock faces to be infinite
const val MIN_CLOCKS_TO_ENABLE_INFINITE_CAROUSEL = 5
const val CLOCK_CAROUSEL_VIEW_SCALE = 0.5f
+ const val TRANSITION_DURATION = 250
val itemViewIds =
listOf(