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

Commit 5ddc9d05 authored by George Lin's avatar George Lin
Browse files

Use custom ColorOptionIconView for color options

For each color option we have 1 parent view and 4 image views which is
an overkill in the sense of the view hierarchy.

We create a custom pie view to make it one 1 single view.

Test: See bug. Manually tested that the color options show the same
Bug: 279170923
Change-Id: I62805e6c02db06d13bbf32f701544b9c3b249bfa
parent 304143aa
Loading
Loading
Loading
Loading
+4 −43
Original line number Diff line number Diff line
@@ -42,50 +42,11 @@
            android:background="@drawable/option_item_background"
            android:importantForAccessibility="no" />

        <FrameLayout
            android:id="@id/foreground"
        <com.android.customization.picker.color.ui.view.ColorOptionIconView
            android:id="@+id/foreground"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <ImageView
                android:id="@+id/color_preview_0"
                android:layout_width="@dimen/component_color_chip_small_radius_default2"
                android:layout_height="@dimen/component_color_chip_small_radius_default2"
                android:layout_gravity="center"
                android:layout_marginRight="@dimen/color_seed_chip_margin2"
                android:layout_marginBottom="@dimen/color_seed_chip_margin2"
                android:src="@drawable/color_chip_seed_filled0"
                android:importantForAccessibility="no"/>

            <ImageView
                android:id="@+id/color_preview_1"
                android:layout_width="@dimen/component_color_chip_small_radius_default2"
                android:layout_height="@dimen/component_color_chip_small_radius_default2"
                android:layout_gravity="center"
                android:layout_marginLeft="@dimen/color_seed_chip_margin2"
                android:layout_marginBottom="@dimen/color_seed_chip_margin2"
                android:src="@drawable/color_chip_seed_filled2"
                android:importantForAccessibility="no"/>

            <ImageView
                android:id="@+id/color_preview_2"
                android:layout_width="@dimen/component_color_chip_small_radius_default2"
                android:layout_height="@dimen/component_color_chip_small_radius_default2"
                android:layout_gravity="center"
                android:layout_marginRight="@dimen/color_seed_chip_margin2"
                android:layout_marginTop="@dimen/color_seed_chip_margin2"
                android:src="@drawable/color_chip_seed_filled1"
                android:importantForAccessibility="no"/>

            <ImageView
                android:id="@+id/color_preview_3"
                android:layout_width="@dimen/component_color_chip_small_radius_default2"
                android:layout_height="@dimen/component_color_chip_small_radius_default2"
                android:layout_gravity="center"
                android:layout_marginLeft="@dimen/color_seed_chip_margin2"
                android:layout_marginTop="@dimen/color_seed_chip_margin2"
                android:src="@drawable/color_chip_seed_filled3"
                android:importantForAccessibility="no" />
        </FrameLayout>
            android:layout_height="match_parent"
            android:layout_margin="@dimen/color_seed_chip_margin2"/>
    </FrameLayout>

    <TextView
+2 −48
Original line number Diff line number Diff line
@@ -34,63 +34,17 @@
        constraint percentage is sized to leave a padding for the outer selection outline,
        proportionate to 2dp for a 40dp color wheel
    -->
    <androidx.constraintlayout.widget.ConstraintLayout
    <com.android.customization.picker.color.ui.view.ColorOptionIconView
        android:id="@+id/option_tile"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_gravity="center"
        android:gravity="center"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent="0.909">

        <ImageView
            android:id="@+id/color_preview_0"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:adjustViewBounds="true"
            android:src="@drawable/color_chip_seed_filled0"
            app:layout_constraintHeight_percent=".505"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent=".505" />

        <ImageView
            android:id="@+id/color_preview_1"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:adjustViewBounds="true"
            android:src="@drawable/color_chip_seed_filled2"
            app:layout_constraintHeight_percent=".505"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_percent=".505" />

        <ImageView
            android:id="@+id/color_preview_2"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:adjustViewBounds="true"
            android:src="@drawable/color_chip_seed_filled1"
            app:layout_constraintHeight_percent=".505"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintWidth_percent=".505" />

        <ImageView
            android:id="@+id/color_preview_3"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:adjustViewBounds="true"
            android:src="@drawable/color_chip_seed_filled3"
            app:layout_constraintHeight_percent=".505"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintWidth_percent=".505" />
    </androidx.constraintlayout.widget.ConstraintLayout>
        app:layout_constraintWidth_percent="0.909" />

    <ImageView
        android:id="@+id/option_selected"
+5 −1
Original line number Diff line number Diff line
@@ -142,7 +142,11 @@ object ClockSettingsBinder {
                                    (view.resources.configuration.uiMode and
                                        Configuration.UI_MODE_NIGHT_MASK ==
                                        Configuration.UI_MODE_NIGHT_YES)
                                ColorOptionIconBinder.bind(item, payload, darkMode)
                                ColorOptionIconBinder.bind(
                                    item.requireViewById(R.id.foreground),
                                    payload,
                                    darkMode
                                )
                                OptionItemBinder.bind(
                                    view = item,
                                    viewModel = colorOptions[index],
+14 −26
Original line number Diff line number Diff line
@@ -17,41 +17,29 @@

package com.android.customization.picker.color.ui.binder

import android.graphics.BlendMode
import android.graphics.BlendModeColorFilter
import android.view.ViewGroup
import android.widget.ImageView
import com.android.customization.picker.color.ui.view.ColorOptionIconView
import com.android.customization.picker.color.ui.viewmodel.ColorOptionIconViewModel
import com.android.wallpaper.R

object ColorOptionIconBinder {
    fun bind(
        view: ViewGroup,
        view: ColorOptionIconView,
        viewModel: ColorOptionIconViewModel,
        darkTheme: Boolean,
    ) {
        val color0View: ImageView = view.requireViewById(R.id.color_preview_0)
        val color1View: ImageView = view.requireViewById(R.id.color_preview_1)
        val color2View: ImageView = view.requireViewById(R.id.color_preview_2)
        val color3View: ImageView = view.requireViewById(R.id.color_preview_3)
        if (darkTheme) {
            color0View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.darkThemeColor0, BlendMode.SRC)
            color1View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.darkThemeColor1, BlendMode.SRC)
            color2View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.darkThemeColor2, BlendMode.SRC)
            color3View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.darkThemeColor3, BlendMode.SRC)
            view.bindColor(
                viewModel.darkThemeColor0,
                viewModel.darkThemeColor1,
                viewModel.darkThemeColor2,
                viewModel.darkThemeColor3,
            )
        } else {
            color0View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.lightThemeColor0, BlendMode.SRC)
            color1View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.lightThemeColor1, BlendMode.SRC)
            color2View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.lightThemeColor2, BlendMode.SRC)
            color3View.drawable.colorFilter =
                BlendModeColorFilter(viewModel.lightThemeColor3, BlendMode.SRC)
            view.bindColor(
                viewModel.darkThemeColor0,
                viewModel.darkThemeColor1,
                viewModel.darkThemeColor2,
                viewModel.darkThemeColor3,
            )
        }
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.customization.picker.color.ui.binder

import android.content.res.Configuration
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
@@ -28,6 +27,7 @@ import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.android.customization.picker.color.ui.adapter.ColorTypeTabAdapter
import com.android.customization.picker.color.ui.view.ColorOptionIconView
import com.android.customization.picker.color.ui.viewmodel.ColorOptionIconViewModel
import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel
import com.android.customization.picker.common.ui.view.ItemSpacing
@@ -63,11 +63,11 @@ object ColorPickerBinder {
                layoutResourceId = R.layout.color_option_2,
                lifecycleOwner = lifecycleOwner,
                bindIcon = { foregroundView: View, colorIcon: ColorOptionIconViewModel ->
                    val viewGroup = foregroundView as? ViewGroup
                    val colorOptionIconView = foregroundView as? ColorOptionIconView
                    val night =
                        (view.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK ==
                            Configuration.UI_MODE_NIGHT_YES)
                    viewGroup?.let { ColorOptionIconBinder.bind(viewGroup, colorIcon, night) }
                    colorOptionIconView?.let { ColorOptionIconBinder.bind(it, colorIcon, night) }
                }
            )
        colorOptionContainerView.adapter = colorOptionAdapter
Loading