Loading res/layout/customization_option_entry_colors.xml +10 −3 Original line number Diff line number Diff line Loading @@ -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> res/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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> Loading src/com/android/customization/picker/color/ui/viewmodel/ColorOptionIconViewModel.kt +19 −1 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -28,4 +29,21 @@ data class ColorOptionIconViewModel( @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], ) } } } src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt +22 −0 Original line number Diff line number Diff line Loading @@ -28,10 +28,14 @@ import androidx.lifecycle.Lifecycle 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 Loading Loading @@ -108,6 +112,8 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO homeScreenCustomizationOptionEntries .find { it.first == ThemePickerHomeCustomizationOption.COLORS } ?.second val optionColorsIcon = optionColors?.findViewById<ColorOptionIconView2>(R.id.option_entry_colors_icon) val optionShapeGrid = homeScreenCustomizationOptionEntries Loading Loading @@ -192,6 +198,22 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO } } } 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, ) } } } } } } Loading src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt +4 −18 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -56,6 +55,7 @@ constructor( private val logger: ThemesUserEventLogger, @Assisted private val viewModelScope: CoroutineScope, ) { val selectedColorOption = interactor.selectedColorOption private val overridingColorOption = MutableStateFlow<ColorOption?>(null) val previewingColorOption = overridingColorOption.asStateFlow() Loading Loading @@ -120,12 +120,8 @@ constructor( 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) Loading @@ -137,17 +133,7 @@ constructor( "${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() Loading Loading @@ -177,7 +163,7 @@ constructor( * 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 Loading Loading
res/layout/customization_option_entry_colors.xml +10 −3 Original line number Diff line number Diff line Loading @@ -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>
res/values/dimens.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
src/com/android/customization/picker/color/ui/viewmodel/ColorOptionIconViewModel.kt +19 −1 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -28,4 +29,21 @@ data class ColorOptionIconViewModel( @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], ) } } }
src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt +22 −0 Original line number Diff line number Diff line Loading @@ -28,10 +28,14 @@ import androidx.lifecycle.Lifecycle 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 Loading Loading @@ -108,6 +112,8 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO homeScreenCustomizationOptionEntries .find { it.first == ThemePickerHomeCustomizationOption.COLORS } ?.second val optionColorsIcon = optionColors?.findViewById<ColorOptionIconView2>(R.id.option_entry_colors_icon) val optionShapeGrid = homeScreenCustomizationOptionEntries Loading Loading @@ -192,6 +198,22 @@ constructor(private val defaultCustomizationOptionsBinder: DefaultCustomizationO } } } 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, ) } } } } } } Loading
src/com/android/wallpaper/customization/ui/viewmodel/ColorPickerViewModel2.kt +4 −18 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -56,6 +55,7 @@ constructor( private val logger: ThemesUserEventLogger, @Assisted private val viewModelScope: CoroutineScope, ) { val selectedColorOption = interactor.selectedColorOption private val overridingColorOption = MutableStateFlow<ColorOption?>(null) val previewingColorOption = overridingColorOption.asStateFlow() Loading Loading @@ -120,12 +120,8 @@ constructor( 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) Loading @@ -137,17 +133,7 @@ constructor( "${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() Loading Loading @@ -177,7 +163,7 @@ constructor( * 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 Loading