Merge "Move customization options to proper projects (3/3)" into main
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 b1bd0ef..7de25e7 100644
--- a/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt
+++ b/src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt
@@ -47,6 +47,7 @@
 import com.android.customization.picker.color.ui.binder.ColorOptionIconBinder
 import com.android.customization.picker.common.ui.view.ItemSpacing
 import com.android.themepicker.R
+import com.android.wallpaper.config.BaseFlags
 import com.android.wallpaper.picker.option.ui.binder.OptionItemBinder
 import kotlinx.coroutines.flow.combine
 import kotlinx.coroutines.flow.mapNotNull
@@ -198,6 +199,9 @@
                         )
                         .collect { (clockId, size) ->
                             clockHostView.removeAllViews()
+                            if (BaseFlags.get().isClockReactiveVariantsEnabled()) {
+                                clockViewFactory.setReactiveTouchInteractionEnabled(clockId, true)
+                            }
                             val clockView =
                                 when (size) {
                                     ClockSize.DYNAMIC -> clockViewFactory.getLargeView(clockId)
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 d0a30a4..6cbb0f5 100644
--- a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
+++ b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
@@ -33,6 +33,7 @@
 import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselItemViewModel
 import com.android.systemui.plugins.clocks.ClockController
 import com.android.themepicker.R
+import com.android.wallpaper.config.BaseFlags
 import com.android.wallpaper.picker.FixedWidthDisplayRatioFrameLayout
 import java.lang.Float.max
 
@@ -408,8 +409,11 @@
                     ?: return
             val clockId = clocks[index].clockId
 
-            // Add the clock view to the cloc host view
+            // Add the clock view to the clock host view
             clockHostView.removeAllViews()
+            if (BaseFlags.get().isClockReactiveVariantsEnabled()) {
+                clockViewFactory.setReactiveTouchInteractionEnabled(clockId, false)
+            }
             val clockView =
                 when (clockSize) {
                     ClockSize.DYNAMIC -> clockViewFactory.getLargeView(clockId)
@@ -454,22 +458,16 @@
                 it.pivotX = it.width / 2F
                 it.pivotY = it.height / 2F
             }
+
+            val controller = clockViewFactory.getController(clockId)
             if (isMiddleView) {
                 clockScaleView.scaleX = 1f
                 clockScaleView.scaleY = 1f
-                clockViewFactory
-                    .getController(clockId)
-                    .largeClock
-                    .animations
-                    .onPickerCarouselSwiping(1F)
+                controller.largeClock.animations.onPickerCarouselSwiping(1F)
             } else {
                 clockScaleView.scaleX = CLOCK_CAROUSEL_VIEW_SCALE
                 clockScaleView.scaleY = CLOCK_CAROUSEL_VIEW_SCALE
-                clockViewFactory
-                    .getController(clockId)
-                    .largeClock
-                    .animations
-                    .onPickerCarouselSwiping(0F)
+                controller.largeClock.animations.onPickerCarouselSwiping(0F)
             }
         }
 
diff --git a/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt b/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt
index 2ab162d..8e5992e 100644
--- a/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt
+++ b/src/com/android/customization/picker/clock/ui/view/ClockViewFactory.kt
@@ -36,6 +36,9 @@
      */
     fun getSmallView(clockId: String): View
 
+    /** Enables or disables the reactive swipe interaction */
+    fun setReactiveTouchInteractionEnabled(clockId: String, enable: Boolean)
+
     fun updateColorForAllClocks(@ColorInt seedColor: Int?)
 
     fun updateColor(clockId: String, @ColorInt seedColor: Int?)
diff --git a/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt b/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt
index 0d603f5..dea6777 100644
--- a/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt
+++ b/src/com/android/customization/picker/clock/ui/view/ClockViewFactoryImpl.kt
@@ -30,6 +30,7 @@
 import com.android.systemui.plugins.clocks.WeatherData
 import com.android.systemui.shared.clocks.ClockRegistry
 import com.android.themepicker.R
+import com.android.wallpaper.config.BaseFlags
 import com.android.wallpaper.util.TimeUtils.TimeTicker
 import java.util.concurrent.ConcurrentHashMap
 
@@ -81,6 +82,14 @@
         return smallClockFrame
     }
 
+    /** Enables or disables the reactive swipe interaction */
+    override fun setReactiveTouchInteractionEnabled(clockId: String, enable: Boolean) {
+        check(BaseFlags.get().isClockReactiveVariantsEnabled()) {
+            "isClockReactiveVariantsEnabled is disabled"
+        }
+        getController(clockId).events.isReactiveTouchInteractionEnabled = enable
+    }
+
     private fun createSmallClockFrame(): FrameLayout {
         val smallClockFrame = FrameLayout(appContext)
         val layoutParams =
diff --git a/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt b/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt
index 6fe76b9..41192e7 100644
--- a/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt
+++ b/tests/robotests/src/com/android/customization/picker/clock/ui/FakeClockViewFactory.kt
@@ -39,6 +39,10 @@
 
     override fun getController(clockId: String): ClockController = clockControllers.get(clockId)!!
 
+    override fun setReactiveTouchInteractionEnabled(clockId: String, enable: Boolean) {
+        TODO("Not yet implemented")
+    }
+
     override fun getLargeView(clockId: String): View {
         TODO("Not yet implemented")
     }