Merge "Snappier clock carousel" into udc-dev
diff --git a/res/layout/clock_carousel_view.xml b/res/layout/clock_carousel_view.xml
index f1c959c..9add933 100644
--- a/res/layout/clock_carousel_view.xml
+++ b/res/layout/clock_carousel_view.xml
@@ -17,4 +17,4 @@
 <com.android.customization.picker.clock.ui.view.ClockCarouselView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="@dimen/screen_preview_height" />
\ No newline at end of file
+    android:layout_height="match_parent" />
\ No newline at end of file
diff --git a/res/layout/notification_section.xml b/res/layout/notification_section.xml
index c20ffbf..f490e00 100644
--- a/res/layout/notification_section.xml
+++ b/res/layout/notification_section.xml
@@ -27,19 +27,13 @@
     android:orientation="horizontal"
     android:gravity="center_vertical">
 
-    <LinearLayout
+    <TextView
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:layout_gravity="center"
-        android:orientation="vertical">
-
-        <TextView
-            android:id="@+id/subtitle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            style="@style/SectionTitleTextStyle"/>
-    </LinearLayout>
+        android:text="@string/show_notifications_on_lock_screen"
+        style="@style/SectionTitleTextStyle"/>
 
     <Switch
         android:id="@+id/switcher"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 9f5d736..4392ebf 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -161,6 +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>
 
     <!-- Clock color and size button -->
     <dimen name="clock_color_size_button_min_height">32dp</dimen>
diff --git a/src/com/android/customization/module/DefaultCustomizationSections.java b/src/com/android/customization/module/DefaultCustomizationSections.java
index 56d1d56..6a5f2f6 100644
--- a/src/com/android/customization/module/DefaultCustomizationSections.java
+++ b/src/com/android/customization/module/DefaultCustomizationSections.java
@@ -99,7 +99,8 @@
             CurrentWallpaperInfoFactory wallpaperInfoFactory,
             DisplayUtils displayUtils,
             CustomizationPickerViewModel customizationPickerViewModel,
-            WallpaperInteractor wallpaperInteractor) {
+            WallpaperInteractor wallpaperInteractor,
+            boolean isTwoPaneAndSmallWidth) {
         List<CustomizationSectionController<?>> sectionControllers = new ArrayList<>();
 
         // Wallpaper section.
@@ -116,7 +117,8 @@
                         mClockViewFactory,
                         wallpaperPreviewNavigator,
                         sectionNavigationController,
-                        wallpaperInteractor)
+                        wallpaperInteractor,
+                        isTwoPaneAndSmallWidth)
                         : new ScreenPreviewSectionController(
                                 activity,
                                 lifecycleOwner,
@@ -125,7 +127,8 @@
                                 wallpaperColorsViewModel,
                                 displayUtils,
                                 wallpaperPreviewNavigator,
-                                wallpaperInteractor));
+                                wallpaperInteractor,
+                                isTwoPaneAndSmallWidth));
 
         sectionControllers.add(
                 new ConnectedSectionController(
diff --git a/src/com/android/customization/picker/notifications/ui/binder/NotificationSectionBinder.kt b/src/com/android/customization/picker/notifications/ui/binder/NotificationSectionBinder.kt
index edd469f..1868a4e 100644
--- a/src/com/android/customization/picker/notifications/ui/binder/NotificationSectionBinder.kt
+++ b/src/com/android/customization/picker/notifications/ui/binder/NotificationSectionBinder.kt
@@ -20,7 +20,6 @@
 import android.annotation.SuppressLint
 import android.view.View
 import android.widget.Switch
-import android.widget.TextView
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.lifecycleScope
@@ -39,19 +38,12 @@
         viewModel: NotificationSectionViewModel,
         lifecycleOwner: LifecycleOwner,
     ) {
-        val subtitle: TextView = view.requireViewById(R.id.subtitle)
         val switch: Switch = view.requireViewById(R.id.switcher)
 
         view.setOnClickListener { viewModel.onClicked() }
 
         lifecycleOwner.lifecycleScope.launch {
             lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
-                launch {
-                    viewModel.titleStringResourceId.collect {
-                        subtitle.text = view.context.getString(it)
-                    }
-                }
-
                 launch { viewModel.isSwitchOn.collect { switch.isChecked = it } }
             }
         }
diff --git a/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt b/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt
index 58a84a4..954efa2 100644
--- a/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt
+++ b/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModel.kt
@@ -17,13 +17,11 @@
 
 package com.android.customization.picker.notifications.ui.viewmodel
 
-import androidx.annotation.StringRes
 import androidx.annotation.VisibleForTesting
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.viewModelScope
 import com.android.customization.picker.notifications.domain.interactor.NotificationsInteractor
-import com.android.wallpaper.R
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
@@ -35,16 +33,6 @@
     private val interactor: NotificationsInteractor,
 ) : ViewModel() {
 
-    /** A string resource ID for the title. */
-    @StringRes
-    val titleStringResourceId: Flow<Int> =
-        interactor.settings.map { model ->
-            when (model.isShowNotificationsOnLockScreenEnabled) {
-                true -> R.string.show_notifications_on_lock_screen
-                false -> R.string.hide_notifications_on_lock_screen
-            }
-        }
-
     /** Whether the switch should be on. */
     val isSwitchOn: Flow<Boolean> =
         interactor.settings.map { model -> model.isShowNotificationsOnLockScreenEnabled }
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 593179d..5941e3d 100644
--- a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
+++ b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
@@ -25,6 +25,8 @@
 import android.view.ViewStub
 import androidx.activity.ComponentActivity
 import androidx.constraintlayout.helper.widget.Carousel
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.constraintlayout.widget.Guideline
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.get
@@ -61,6 +63,7 @@
     wallpaperPreviewNavigator: WallpaperPreviewNavigator,
     private val navigationController: CustomizationSectionNavigationController,
     wallpaperInteractor: WallpaperInteractor,
+    private val isTwoPaneAndSmallWidth: Boolean,
 ) :
     ScreenPreviewSectionController(
         activity,
@@ -71,6 +74,7 @@
         displayUtils,
         wallpaperPreviewNavigator,
         wallpaperInteractor,
+        isTwoPaneAndSmallWidth,
     ) {
 
     private val viewModel =
@@ -99,6 +103,23 @@
             carouselViewStub.layoutResource = R.layout.clock_carousel_view
             val carouselView = carouselViewStub.inflate() as ClockCarouselView
 
+            if (isTwoPaneAndSmallWidth) {
+                val guidelineMargin =
+                    context.resources.getDimensionPixelSize(
+                        R.dimen.clock_carousel_guideline_margin_for_2_pane_small_width
+                    )
+
+                val guidelineStart = carouselView.requireViewById<Guideline>(R.id.guideline_start)
+                var layoutParams = guidelineStart.layoutParams as ConstraintLayout.LayoutParams
+                layoutParams.guideBegin = guidelineMargin
+                guidelineStart.layoutParams = layoutParams
+
+                val guidelineEnd = carouselView.requireViewById<Guideline>(R.id.guideline_end)
+                layoutParams = guidelineEnd.layoutParams as ConstraintLayout.LayoutParams
+                layoutParams.guideEnd = guidelineMargin
+                guidelineEnd.layoutParams = layoutParams
+            }
+
             // TODO (b/270716937) We should handle the single clock case in the clock carousel
             // itself
             val singleClockViewStub: ViewStub = view.requireViewById(R.id.single_clock_view_stub)
diff --git a/tests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt b/tests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt
index 43ddea7..63334f2 100644
--- a/tests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt
+++ b/tests/src/com/android/customization/picker/notifications/ui/viewmodel/NotificationSectionViewModelTest.kt
@@ -84,18 +84,14 @@
     @Test
     fun `toggles back and forth`() =
         testScope.runTest {
-            val titleStringResId = collectLastValue(underTest.titleStringResourceId)
             val isSwitchOn = collectLastValue(underTest.isSwitchOn)
 
-            val initialSubtitleStringRes = titleStringResId()
             val initialIsSwitchOn = isSwitchOn()
 
             underTest.onClicked()
-            assertThat(titleStringResId()).isNotEqualTo(initialSubtitleStringRes)
             assertThat(isSwitchOn()).isNotEqualTo(initialIsSwitchOn)
 
             underTest.onClicked()
-            assertThat(titleStringResId()).isEqualTo(initialSubtitleStringRes)
             assertThat(isSwitchOn()).isEqualTo(initialIsSwitchOn)
         }
 }