Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c03180b4 authored by Catherine Liang's avatar Catherine Liang
Browse files

Show selected color in customization option thumbnail

Flag: com.android.systemui.shared.new_customization_picker_ui
Test: manually verified
Fixes: 383329621
Bug: 350718581
Change-Id: Ieffd08ef8bd668e86961fe0a88e73578b0dad76d
parent e55c4e52
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -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>
+19 −1
Original line number Diff line number Diff line
@@ -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 @@ 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],
            )
        }
    }
}
+22 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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,
                                )
                            }
                        }
                    }
                }
            }
        }

+4 −18
Original line number Diff line number Diff line
@@ -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 @@ constructor(
    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 @@ 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)
@@ -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()
@@ -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