Bind customization option colors
Adjust to use uniform ids for similar views across customization
options to facilitate color binding. Bind customization option
background, title, description and icon container colors. Icon colors
are not yet binded since they will each need to be binded differently.
Flag: com.android.systemui.shared.new_customization_picker_ui
Test: manually verified
Bug: 363018910
Change-Id: Ia2fcdf7f7a0468467bc5d0e3e18fe397095d8c52
diff --git a/res/layout/customization_option_entry_app_shape_grid.xml b/res/layout/customization_option_entry_app_shape_grid.xml
index 8d18e7c..b5fdb51 100644
--- a/res/layout/customization_option_entry_app_shape_grid.xml
+++ b/res/layout/customization_option_entry_app_shape_grid.xml
@@ -24,31 +24,31 @@
android:clickable="true">
<TextView
- android:id="@+id/option_entry_app_shape_grid_title"
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/shape_and_grid_title"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_app_grid_icon_container"
- app:layout_constraintBottom_toTopOf="@+id/option_entry_app_shape_grid_description"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
+ app:layout_constraintBottom_toTopOf="@+id/option_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
- android:id="@+id/option_entry_app_shape_grid_description"
+ android:id="@+id/option_entry_description"
style="@style/CustomizationOptionEntrySubtitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_app_grid_icon_container"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/option_entry_app_shape_grid_title" />
+ app:layout_constraintTop_toBottomOf="@+id/option_entry_title" />
<FrameLayout
- android:id="@+id/option_entry_app_grid_icon_container"
+ android:id="@+id/option_entry_icon_container"
android:layout_width="@dimen/customization_option_entry_icon_size"
android:layout_height="@dimen/customization_option_entry_icon_size"
android:padding="@dimen/customization_option_entry_icon_padding"
@@ -58,7 +58,7 @@
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
- android:id="@+id/option_entry_app_shape_grid_icon"
+ android:id="@+id/option_entry_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/grid_preview_card_content_description" />
diff --git a/res/layout/customization_option_entry_clock.xml b/res/layout/customization_option_entry_clock.xml
index f677a1e..9a756ec 100644
--- a/res/layout/customization_option_entry_clock.xml
+++ b/res/layout/customization_option_entry_clock.xml
@@ -24,19 +24,20 @@
android:clickable="true">
<TextView
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/clock_title"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_clock_icon_container"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<FrameLayout
- android:id="@+id/option_entry_clock_icon_container"
+ android:id="@+id/option_entry_icon_container"
android:layout_width="@dimen/customization_option_entry_icon_size"
android:layout_height="@dimen/customization_option_entry_icon_size"
android:background="@drawable/customization_option_entry_icon_background"
@@ -45,7 +46,7 @@
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
- android:id="@+id/option_entry_clock_icon"
+ android:id="@+id/option_entry_icon"
android:layout_width="@dimen/customization_option_entry_clock_icon_size"
android:layout_height="@dimen/customization_option_entry_clock_icon_size"
android:layout_gravity="center"/>
diff --git a/res/layout/customization_option_entry_color_contrast.xml b/res/layout/customization_option_entry_color_contrast.xml
index 4d005dc..e70acc1 100644
--- a/res/layout/customization_option_entry_color_contrast.xml
+++ b/res/layout/customization_option_entry_color_contrast.xml
@@ -24,31 +24,31 @@
android:clickable="true">
<TextView
- android:id="@+id/option_entry_color_contrast_title"
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/color_contrast_section_title"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_color_contrast_icon_container"
- app:layout_constraintBottom_toTopOf="@+id/option_entry_color_contrast_description"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
+ app:layout_constraintBottom_toTopOf="@+id/option_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
- android:id="@+id/option_entry_color_contrast_description"
+ android:id="@+id/option_entry_description"
style="@style/CustomizationOptionEntrySubtitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_color_contrast_icon_container"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/option_entry_color_contrast_title" />
+ app:layout_constraintTop_toBottomOf="@+id/option_entry_title" />
<FrameLayout
- android:id="@+id/option_entry_color_contrast_icon_container"
+ android:id="@+id/option_entry_icon_container"
android:layout_width="@dimen/customization_option_entry_icon_size"
android:layout_height="@dimen/customization_option_entry_icon_size"
android:padding="@dimen/customization_option_entry_icon_padding"
@@ -58,7 +58,7 @@
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
- android:id="@+id/option_entry_color_contrast_icon"
+ android:id="@+id/option_entry_icon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/grid_preview_card_content_description" />
diff --git a/res/layout/customization_option_entry_colors.xml b/res/layout/customization_option_entry_colors.xml
index 1011fcb..2e5cf1b 100644
--- a/res/layout/customization_option_entry_colors.xml
+++ b/res/layout/customization_option_entry_colors.xml
@@ -24,19 +24,20 @@
android:clickable="true">
<TextView
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/system_colors_title"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_colors_icon_container"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<FrameLayout
- android:id="@+id/option_entry_colors_icon_container"
+ android:id="@+id/option_entry_icon_container"
android:layout_width="@dimen/customization_option_entry_icon_size"
android:layout_height="@dimen/customization_option_entry_icon_size"
android:orientation="horizontal"
@@ -46,7 +47,7 @@
app:layout_constraintBottom_toBottomOf="parent">
<com.android.customization.picker.color.ui.view.ColorOptionIconView2
- android:id="@+id/option_entry_colors_icon"
+ android:id="@+id/option_entry_icon"
android:layout_width="@dimen/customization_option_entry_color_icon_size"
android:layout_height="@dimen/customization_option_entry_color_icon_size"
android:layout_gravity="center"/>
diff --git a/res/layout/customization_option_entry_keyguard_quick_affordance.xml b/res/layout/customization_option_entry_keyguard_quick_affordance.xml
index d4d30dd..b75a71e 100644
--- a/res/layout/customization_option_entry_keyguard_quick_affordance.xml
+++ b/res/layout/customization_option_entry_keyguard_quick_affordance.xml
@@ -25,33 +25,33 @@
android:clickable="true">
<TextView
- android:id="@+id/option_entry_keyguard_quick_affordance_title"
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/keyguard_quick_affordance_title"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_keyguard_quick_affordance_icon"
- app:layout_constraintBottom_toTopOf="@+id/option_entry_keyguard_quick_affordance_description"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
+ app:layout_constraintBottom_toTopOf="@+id/option_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
- android:id="@+id/option_entry_keyguard_quick_affordance_description"
+ android:id="@+id/option_entry_description"
style="@style/CustomizationOptionEntrySubtitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
android:text="None"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_keyguard_quick_affordance_icon"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_icon_container"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/option_entry_keyguard_quick_affordance_title"
+ app:layout_constraintTop_toBottomOf="@+id/option_entry_title"
tools:text="Wallet, Nest" />
<LinearLayout
- android:id="@+id/option_entry_keyguard_quick_affordance_icon"
+ android:id="@+id/option_entry_icon_container"
android:layout_width="@dimen/customization_option_entry_icon_size"
android:layout_height="@dimen/customization_option_entry_icon_size"
android:orientation="horizontal"
@@ -65,14 +65,14 @@
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
- android:id="@+id/option_entry_keyguard_quick_affordance_icon_1"
+ android:id="@+id/option_entry_icon_1"
android:layout_width="@dimen/customization_option_entry_shortcut_icon_size"
android:layout_height="@dimen/customization_option_entry_shortcut_icon_size"
android:visibility="gone"
android:tint="@color/system_on_surface" />
<ImageView
- android:id="@+id/option_entry_keyguard_quick_affordance_icon_2"
+ android:id="@+id/option_entry_icon_2"
android:layout_width="@dimen/customization_option_entry_shortcut_icon_size"
android:layout_height="@dimen/customization_option_entry_shortcut_icon_size"
android:visibility="gone"
diff --git a/res/layout/customization_option_entry_lock_screen_notifications.xml b/res/layout/customization_option_entry_lock_screen_notifications.xml
index e095b59..875d21c 100644
--- a/res/layout/customization_option_entry_lock_screen_notifications.xml
+++ b/res/layout/customization_option_entry_lock_screen_notifications.xml
@@ -24,19 +24,19 @@
android:clickable="true">
<TextView
- android:id="@+id/option_entry_lock_screen_notification_title"
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/lock_screen_notifications_section_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/option_entry_lock_screen_notification_description"
+ app:layout_constraintBottom_toTopOf="@+id/option_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
- android:id="@+id/option_entry_lock_screen_notification_description"
+ android:id="@+id/option_entry_description"
style="@style/CustomizationOptionEntrySubtitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
@@ -44,5 +44,5 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/option_entry_lock_screen_notification_title" />
+ app:layout_constraintTop_toBottomOf="@+id/option_entry_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/res/layout/customization_option_entry_more_lock_settings.xml b/res/layout/customization_option_entry_more_lock_settings.xml
index 518af78..8c6f09a 100644
--- a/res/layout/customization_option_entry_more_lock_settings.xml
+++ b/res/layout/customization_option_entry_more_lock_settings.xml
@@ -24,19 +24,19 @@
android:clickable="true">
<TextView
- android:id="@+id/option_entry_more_lock_settings_title"
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/more_settings_section_title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/option_entry_more_lock_settings_description"
+ app:layout_constraintBottom_toTopOf="@+id/option_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
- android:id="@+id/option_entry_more_lock_settings_description"
+ android:id="@+id/option_entry_description"
style="@style/CustomizationOptionEntrySubtitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
@@ -44,5 +44,5 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/option_entry_more_lock_settings_title" />
+ app:layout_constraintTop_toBottomOf="@+id/option_entry_title" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/customization_option_entry_themed_icons.xml b/res/layout/customization_option_entry_themed_icons.xml
index 8710f8f..5694eef 100644
--- a/res/layout/customization_option_entry_themed_icons.xml
+++ b/res/layout/customization_option_entry_themed_icons.xml
@@ -25,32 +25,32 @@
android:clickable="true">
<TextView
- android:id="@+id/option_entry_themed_icons_title"
+ android:id="@+id/option_entry_title"
style="@style/CustomizationOptionEntryTitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/themed_icon_title"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_themed_icons_switch"
- app:layout_constraintBottom_toTopOf="@+id/option_entry_themed_icons_description"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_switch"
+ app:layout_constraintBottom_toTopOf="@+id/option_entry_description"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
- android:id="@+id/option_entry_themed_icons_description"
+ android:id="@+id/option_entry_description"
style="@style/CustomizationOptionEntrySubtitleTextStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/customization_option_entry_text_margin_end"
android:text="@string/beta_title"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/option_entry_themed_icons_switch"
+ app:layout_constraintEnd_toStartOf="@+id/option_entry_switch"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/option_entry_themed_icons_title" />
+ app:layout_constraintTop_toBottomOf="@+id/option_entry_title" />
<Switch
- android:id="@+id/option_entry_themed_icons_switch"
+ android:id="@+id/option_entry_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 4eb0940..4369f1e 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -24,6 +24,7 @@
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.content.ContextCompat
+import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
@@ -48,6 +49,7 @@
import com.android.wallpaper.model.Screen
import com.android.wallpaper.picker.common.icon.ui.viewbinder.IconViewBinder
import com.android.wallpaper.picker.common.text.ui.viewbinder.TextViewBinder
+import com.android.wallpaper.picker.customization.ui.binder.ColorUpdateBinder
import com.android.wallpaper.picker.customization.ui.binder.CustomizationOptionsBinder
import com.android.wallpaper.picker.customization.ui.binder.DefaultCustomizationOptionsBinder
import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil.CustomizationOption
@@ -98,22 +100,62 @@
val isOnMainScreen = { optionsViewModel.selectedOption.value == null }
+ val allCustomizationOptionEntries =
+ lockScreenCustomizationOptionEntries + homeScreenCustomizationOptionEntries
+ allCustomizationOptionEntries.forEach { (_, view) ->
+ ColorUpdateBinder.bind(
+ setColor = { color ->
+ DrawableCompat.setTint(DrawableCompat.wrap(view.background), color)
+ },
+ color = colorUpdateViewModel.colorSurfaceBright,
+ shouldAnimate = isOnMainScreen,
+ lifecycleOwner = lifecycleOwner,
+ )
+ ColorUpdateBinder.bind(
+ setColor = { color ->
+ view
+ .findViewById<ViewGroup>(R.id.option_entry_icon_container)
+ ?.background
+ ?.let { DrawableCompat.setTint(DrawableCompat.wrap(it), color) }
+ },
+ color = colorUpdateViewModel.colorSurfaceContainerHigh,
+ shouldAnimate = isOnMainScreen,
+ lifecycleOwner = lifecycleOwner,
+ )
+ ColorUpdateBinder.bind(
+ setColor = { color ->
+ view.findViewById<TextView>(R.id.option_entry_title)?.setTextColor(color)
+ },
+ color = colorUpdateViewModel.colorOnSurface,
+ shouldAnimate = isOnMainScreen,
+ lifecycleOwner = lifecycleOwner,
+ )
+ ColorUpdateBinder.bind(
+ setColor = { color ->
+ view.findViewById<TextView>(R.id.option_entry_description)?.setTextColor(color)
+ },
+ color = colorUpdateViewModel.colorOnSurfaceVariant,
+ shouldAnimate = isOnMainScreen,
+ lifecycleOwner = lifecycleOwner,
+ )
+ }
+
val optionClock: View =
lockScreenCustomizationOptionEntries
.first { it.first == ThemePickerLockCustomizationOption.CLOCK }
.second
- val optionClockIcon: ImageView = optionClock.requireViewById(R.id.option_entry_clock_icon)
+ val optionClockIcon: ImageView = optionClock.requireViewById(R.id.option_entry_icon)
val optionShortcut: View =
lockScreenCustomizationOptionEntries
.first { it.first == ThemePickerLockCustomizationOption.SHORTCUTS }
.second
val optionShortcutDescription: TextView =
- optionShortcut.requireViewById(R.id.option_entry_keyguard_quick_affordance_description)
+ optionShortcut.requireViewById(R.id.option_entry_description)
val optionShortcutIcon1: ImageView =
- optionShortcut.requireViewById(R.id.option_entry_keyguard_quick_affordance_icon_1)
+ optionShortcut.requireViewById(R.id.option_entry_icon_1)
val optionShortcutIcon2: ImageView =
- optionShortcut.requireViewById(R.id.option_entry_keyguard_quick_affordance_icon_2)
+ optionShortcut.requireViewById(R.id.option_entry_icon_2)
val optionLockScreenNotificationsSettings: View =
lockScreenCustomizationOptionEntries
@@ -136,16 +178,15 @@
.first { it.first == ThemePickerHomeCustomizationOption.COLORS }
.second
val optionColorsIcon: ColorOptionIconView2 =
- optionColors.requireViewById(R.id.option_entry_colors_icon)
+ optionColors.requireViewById(R.id.option_entry_icon)
val optionShapeGrid: View =
homeScreenCustomizationOptionEntries
.first { it.first == ThemePickerHomeCustomizationOption.APP_SHAPE_GRID }
.second
val optionShapeGridDescription: TextView =
- optionShapeGrid.requireViewById(R.id.option_entry_app_shape_grid_description)
- val optionShapeGridIcon: ImageView =
- optionShapeGrid.requireViewById(R.id.option_entry_app_shape_grid_icon)
+ optionShapeGrid.requireViewById(R.id.option_entry_description)
+ val optionShapeGridIcon: ImageView = optionShapeGrid.requireViewById(R.id.option_entry_icon)
val optionColorContrast: View =
homeScreenCustomizationOptionEntries
@@ -153,16 +194,16 @@
.second
optionColorContrast.setOnClickListener { navigateToColorContrastSettingsActivity.invoke() }
val optionColorContrastDescription: TextView =
- optionColorContrast.requireViewById(R.id.option_entry_color_contrast_description)
+ optionColorContrast.requireViewById(R.id.option_entry_description)
val optionColorContrastIcon: ImageView =
- optionColorContrast.requireViewById(R.id.option_entry_color_contrast_icon)
+ optionColorContrast.requireViewById(R.id.option_entry_icon)
val optionThemedIcons =
homeScreenCustomizationOptionEntries
.find { it.first == ThemePickerHomeCustomizationOption.THEMED_ICONS }
?.second
val optionThemedIconsSwitch =
- optionThemedIcons?.findViewById<Switch>(R.id.option_entry_themed_icons_switch)
+ optionThemedIcons?.findViewById<Switch>(R.id.option_entry_switch)
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {