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