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

Commit 95d7babd authored by Catherine Liang's avatar Catherine Liang Committed by Android (Google) Code Review
Browse files

Merge "Show selected color in customization option thumbnail" into main

parents d1b52e6f c03180b4
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