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")
     }
