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(