Merge "Fix clock size in carousel is wrong in foldable" into udc-dev
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 254a055..543ddfb 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -161,7 +161,7 @@
     <dimen name="clock_carousel_guideline_margin">100dp</dimen>
     <dimen name="clock_carousel_item_card_width">100dp</dimen>
     <dimen name="clock_carousel_item_card_height">108dp</dimen>
-    <dimen name="clock_carousel_guideline_margin_for_2_pane_small_width">83dp</dimen>
+    <dimen name="clock_carousel_guideline_margin_for_2_pane_small_width">130dp</dimen>
 
     <!-- Clock color and size button -->
     <dimen name="clock_color_size_button_min_height">32dp</dimen>
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 270931c..8f964cf 100644
--- a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
+++ b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
@@ -39,6 +39,7 @@
         viewModel: ClockCarouselViewModel,
         clockViewFactory: ClockViewFactory,
         lifecycleOwner: LifecycleOwner,
+        isTwoPaneAndSmallWidth: Boolean,
     ) {
         carouselView.setClockViewFactory(clockViewFactory)
         clockViewFactory.updateRegionDarkness()
@@ -55,6 +56,7 @@
                             clockSize = size,
                             clockIds = allClockIds,
                             onClockSelected = { clockId -> viewModel.setSelectedClock(clockId) },
+                            isTwoPaneAndSmallWidth = isTwoPaneAndSmallWidth,
                         )
                     }
                 }
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 04ad81f..c856112 100644
--- a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
+++ b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
@@ -23,12 +23,14 @@
 import android.widget.FrameLayout
 import androidx.constraintlayout.helper.widget.Carousel
 import androidx.constraintlayout.motion.widget.MotionLayout
+import androidx.constraintlayout.widget.ConstraintSet
 import androidx.core.view.doOnPreDraw
 import androidx.core.view.get
 import androidx.core.view.isNotEmpty
 import com.android.customization.picker.clock.shared.ClockSize
 import com.android.systemui.plugins.ClockController
 import com.android.wallpaper.R
+import com.android.wallpaper.picker.FixedWidthDisplayRatioFrameLayout
 import java.lang.Float.max
 
 class ClockCarouselView(
@@ -70,7 +72,12 @@
         clockSize: ClockSize,
         clockIds: List<String>,
         onClockSelected: (clockId: String) -> Unit,
+        isTwoPaneAndSmallWidth: Boolean,
     ) {
+        if (isTwoPaneAndSmallWidth) {
+            overrideScreenPreviewWidth()
+        }
+
         adapter = ClockCarouselAdapter(clockSize, clockIds, clockViewFactory, onClockSelected)
         carousel.setAdapter(adapter)
         carousel.refresh()
@@ -244,6 +251,51 @@
         }
     }
 
+    private fun overrideScreenPreviewWidth() {
+        val overrideWidth =
+            context.resources.getDimensionPixelSize(
+                R.dimen.screen_preview_width_for_2_pane_small_width
+            )
+        itemViewIds.forEach { id ->
+            val itemView = motionLayout.requireViewById<FrameLayout>(id)
+            val itemViewLp = itemView.layoutParams
+            itemViewLp.width = overrideWidth
+            itemView.layoutParams = itemViewLp
+
+            getClockScaleViewId(id)?.let {
+                val scaleView = motionLayout.requireViewById<FixedWidthDisplayRatioFrameLayout>(it)
+                val scaleViewLp = scaleView.layoutParams
+                scaleViewLp.width = overrideWidth
+                scaleView.layoutParams = scaleViewLp
+            }
+        }
+
+        val previousConstaintSet = motionLayout.getConstraintSet(R.id.previous)
+        val startConstaintSet = motionLayout.getConstraintSet(R.id.start)
+        val nextConstaintSet = motionLayout.getConstraintSet(R.id.next)
+        val constaintSetList =
+            listOf<ConstraintSet>(previousConstaintSet, startConstaintSet, nextConstaintSet)
+        constaintSetList.forEach { constraintSet ->
+            itemViewIds.forEach { id ->
+                constraintSet.getConstraint(id)?.let { constraint ->
+                    val layout = constraint.layout
+                    if (
+                        constraint.layout.mWidth ==
+                            context.resources.getDimensionPixelSize(R.dimen.screen_preview_width)
+                    ) {
+                        layout.mWidth = overrideWidth
+                    }
+                    if (
+                        constraint.layout.widthMax ==
+                            context.resources.getDimensionPixelSize(R.dimen.screen_preview_width)
+                    ) {
+                        layout.widthMax = overrideWidth
+                    }
+                }
+            }
+        }
+    }
+
     private class ClockCarouselAdapter(
         val clockSize: ClockSize,
         val clockIds: List<String>,
@@ -360,6 +412,15 @@
     companion object {
         const val CLOCK_CAROUSEL_VIEW_SCALE = 0.5f
 
+        val itemViewIds =
+            listOf(
+                R.id.item_view_0,
+                R.id.item_view_1,
+                R.id.item_view_2,
+                R.id.item_view_3,
+                R.id.item_view_4
+            )
+
         fun getScalingUpScale(progress: Float) =
             CLOCK_CAROUSEL_VIEW_SCALE + progress * (1f - CLOCK_CAROUSEL_VIEW_SCALE)
 
diff --git a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
index ac06594..c826dc6 100644
--- a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
+++ b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
@@ -161,6 +161,7 @@
                                     viewModel = viewModel,
                                     clockViewFactory = clockViewFactory,
                                     lifecycleOwner = lifecycleOwner,
+                                    isTwoPaneAndSmallWidth = isTwoPaneAndSmallWidth,
                                 )
                                 if (onAttachStateChangeListener != null) {
                                     carouselView.carousel.removeOnAttachStateChangeListener(