Merge "Add more functionality for some picker fakes" into main
diff --git a/res/layout/customization_option_entry_colors.xml b/res/layout/customization_option_entry_colors.xml
index 3046173..2709cf9 100644
--- a/res/layout/customization_option_entry_colors.xml
+++ b/res/layout/customization_option_entry_colors.xml
@@ -30,18 +30,25 @@
         android:text="@string/color_picker_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"
+        app:layout_constraintEnd_toStartOf="@+id/option_entry_colors_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"
+        android:id="@+id/option_entry_colors_icon_container"
         android:layout_width="@dimen/customization_option_entry_icon_size"
         android:layout_height="@dimen/customization_option_entry_icon_size"
         android:orientation="horizontal"
         android:background="@drawable/customization_option_entry_icon_background"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent" />
+        app:layout_constraintBottom_toBottomOf="parent">
+
+        <com.android.customization.picker.color.ui.view.ColorOptionIconView2
+            android:id="@+id/option_entry_colors_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"/>
+    </FrameLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4f1062f..be1e071 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -205,6 +205,7 @@
     <dimen name="floating_sheet_color_option_stroke_width">3dp</dimen>
     <dimen name="customization_option_entry_shortcut_icon_size">20dp</dimen>
     <dimen name="customization_option_entry_clock_icon_size">44dp</dimen>
+    <dimen name="customization_option_entry_color_icon_size">48dp</dimen>
 
     <!-- Clock font control dimensions -->
     <dimen name="clock_font_axis_name_width">64dp</dimen>
diff --git a/src/com/android/customization/picker/color/ui/viewmodel/ColorOptionIconViewModel.kt b/src/com/android/customization/picker/color/ui/viewmodel/ColorOptionIconViewModel.kt
index 8723c8c..6181c17 100644
--- a/src/com/android/customization/picker/color/ui/viewmodel/ColorOptionIconViewModel.kt
+++ b/src/com/android/customization/picker/color/ui/viewmodel/ColorOptionIconViewModel.kt
@@ -18,6 +18,7 @@
 package com.android.customization.picker.color.ui.viewmodel
 
 import android.annotation.ColorInt
+import com.android.customization.model.color.ColorOptionImpl
 
 data class ColorOptionIconViewModel(
     @ColorInt val lightThemeColor0: Int,
@@ -28,4 +29,21 @@
     @ColorInt val darkThemeColor1: Int,
     @ColorInt val darkThemeColor2: Int,
     @ColorInt val darkThemeColor3: Int,
-)
+) {
+    companion object {
+        fun fromColorOption(colorOption: ColorOptionImpl): ColorOptionIconViewModel {
+            val lightThemeColors = colorOption.previewInfo.resolveColors(/* darkTheme= */ false)
+            val darkThemeColors = colorOption.previewInfo.resolveColors(/* darkTheme= */ true)
+            return ColorOptionIconViewModel(
+                lightThemeColor0 = lightThemeColors[0],
+                lightThemeColor1 = lightThemeColors[1],
+                lightThemeColor2 = lightThemeColors[2],
+                lightThemeColor3 = lightThemeColors[3],
+                darkThemeColor0 = darkThemeColors[0],
+                darkThemeColor1 = darkThemeColors[1],
+                darkThemeColor2 = darkThemeColors[2],
+                darkThemeColor3 = darkThemeColors[3],
+            )
+        }
+    }
+}
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 46d0346..ebc506a 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -28,10 +28,14 @@
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.repeatOnLifecycle
+import com.android.customization.model.color.ColorOptionImpl
 import com.android.customization.picker.clock.shared.ClockSize
 import com.android.customization.picker.clock.ui.view.ClockConstraintLayoutHostView
 import com.android.customization.picker.clock.ui.view.ClockConstraintLayoutHostView.Companion.addClockViews
 import com.android.customization.picker.clock.ui.view.ClockViewFactory
+import com.android.customization.picker.color.ui.binder.ColorOptionIconBinder2
+import com.android.customization.picker.color.ui.view.ColorOptionIconView2
+import com.android.customization.picker.color.ui.viewmodel.ColorOptionIconViewModel
 import com.android.customization.picker.grid.ui.binder.GridIconViewBinder
 import com.android.systemui.plugins.clocks.ClockFontAxisSetting
 import com.android.systemui.plugins.clocks.ClockPreviewConfig
@@ -108,6 +112,8 @@
             homeScreenCustomizationOptionEntries
                 .find { it.first == ThemePickerHomeCustomizationOption.COLORS }
                 ?.second
+        val optionColorsIcon =
+            optionColors?.findViewById<ColorOptionIconView2>(R.id.option_entry_colors_icon)
 
         val optionShapeGrid =
             homeScreenCustomizationOptionEntries
@@ -192,6 +198,22 @@
                         }
                     }
                 }
+
+                launch {
+                    optionsViewModel.colorPickerViewModel2.selectedColorOption.collect { colorOption
+                        ->
+                        (colorOption as? ColorOptionImpl)?.let {
+                            optionColorsIcon?.let {
+                                ColorOptionIconBinder2.bind(
+                                    view = it,
+                                    viewModel =
+                                        ColorOptionIconViewModel.fromColorOption(colorOption),
+                                    darkTheme = view.resources.configuration.isNightModeActive,
+                                )
+                            }
+                        }
+                    }
+                }
             }
         }
 
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt
index 02af6a6..1a68f4e 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt
@@ -17,7 +17,6 @@
 package com.android.wallpaper.customization.ui.viewmodel
 
 import android.content.Context
-import androidx.lifecycle.viewModelScope
 import com.android.customization.model.color.ColorOption
 import com.android.customization.model.color.ColorOptionImpl
 import com.android.customization.module.logging.ThemesUserEventLogger
@@ -56,6 +55,7 @@
     private val logger: ThemesUserEventLogger,
     @Assisted private val viewModelScope: CoroutineScope,
 ) {
+    val selectedColorOption = interactor.selectedColorOption
 
     private val overridingColorOption = MutableStateFlow<ColorOption?>(null)
     val previewingColorOption = overridingColorOption.asStateFlow()
@@ -120,12 +120,8 @@
                     colorOptionEntry.key to
                         colorOptionEntry.value.map { colorOption ->
                             colorOption as ColorOptionImpl
-                            val lightThemeColors =
-                                colorOption.previewInfo.resolveColors(/* darkTheme= */ false)
-                            val darkThemeColors =
-                                colorOption.previewInfo.resolveColors(/* darkTheme= */ true)
                             val isSelectedFlow: StateFlow<Boolean> =
-                                combine(previewingColorOption, interactor.selectedColorOption) {
+                                combine(previewingColorOption, selectedColorOption) {
                                         previewing,
                                         selected ->
                                         previewing?.isEquivalent(colorOption)
@@ -137,17 +133,7 @@
                                 "${colorOption.type}::${colorOption.style}::${colorOption.serializedPackages}"
                             OptionItemViewModel2<ColorOptionIconViewModel>(
                                 key = MutableStateFlow(key) as StateFlow<String>,
-                                payload =
-                                    ColorOptionIconViewModel(
-                                        lightThemeColor0 = lightThemeColors[0],
-                                        lightThemeColor1 = lightThemeColors[1],
-                                        lightThemeColor2 = lightThemeColors[2],
-                                        lightThemeColor3 = lightThemeColors[3],
-                                        darkThemeColor0 = darkThemeColors[0],
-                                        darkThemeColor1 = darkThemeColors[1],
-                                        darkThemeColor2 = darkThemeColors[2],
-                                        darkThemeColor3 = darkThemeColors[3],
-                                    ),
+                                payload = ColorOptionIconViewModel.fromColorOption(colorOption),
                                 text =
                                     Text.Loaded(
                                         colorOption.getContentDescription(context).toString()
@@ -177,7 +163,7 @@
      * change updates, which are applied with a latency.
      */
     val onApply: Flow<(suspend () -> Unit)?> =
-        combine(previewingColorOption, interactor.selectedColorOption) { previewing, selected ->
+        combine(previewingColorOption, selectedColorOption) { previewing, selected ->
             previewing?.let {
                 if (previewing.isEquivalent(selected)) {
                     null