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