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

Commit 0fefd5e5 authored by George Lin's avatar George Lin
Browse files

[TP] Bind slider

Bind the slider that changes the color saturation level

Test: Manueally tested that it works as expected
Bug: 241966062
Change-Id: I67057f0195295ce68c29da065928bd8475c76d38
parent 46892c51
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -420,4 +420,22 @@
    [CHAR LIMIT=128].
    -->
    <string name="more_colors">More Colors</string>

    <!--
    Accessibility string for a button that allows the user to select the default color for their
    lock screen clock on the device. This is shown next to other buttons that allow the user to
    select from a set of custom colors.

    [CHAR LIMIT=NONE].
    -->
    <string name="content_description_default_color_option">Default color option</string>

    <!--
    Accessibility string for a button that allows the user to select a custom color for their lock
    screen clock on the device. This is shown next to other such buttons that allow the user to
    select from a set of custom colors.

    [CHAR LIMIT=NONE].
    -->
    <string name="content_description_color_option">Color option <xliff:g name="color_number" example="1">%1$d</xliff:g></string>
</resources>
+6 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.customization.picker.clock.domain.interactor.ClockPickerInter
import com.android.customization.picker.clock.ui.view.ClockViewFactory
import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor
import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel
import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
@@ -77,4 +78,9 @@ interface CustomizationInjector : Injector {
        context: Context,
        registry: ClockRegistry,
    ): ClockViewFactory

    fun getClockSettingsViewModelFactory(
        context: Context,
        registry: ClockRegistry,
    ): ClockSettingsViewModel.Factory
}
+14 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.customization.picker.clock.domain.interactor.ClockPickerInter
import com.android.customization.picker.clock.ui.view.ClockViewFactory
import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSectionViewModel
import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel
import com.android.customization.picker.color.data.repository.ColorPickerRepositoryImpl
import com.android.customization.picker.color.domain.interactor.ColorPickerInteractor
import com.android.customization.picker.color.ui.viewmodel.ColorPickerViewModel
@@ -96,6 +97,7 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
    private var darkModeSnapshotRestorer: DarkModeSnapshotRestorer? = null
    private var themedIconSnapshotRestorer: ThemedIconSnapshotRestorer? = null
    private var themedIconInteractor: ThemedIconInteractor? = null
    private var clockSettingsViewModelFactory: ClockSettingsViewModel.Factory? = null

    override fun getCustomizationSections(activity: ComponentActivity): CustomizationSections {
        return customizationSections
@@ -409,6 +411,18 @@ open class ThemePickerInjector : WallpaperPicker2Injector(), CustomizationInject
                .also { themedIconInteractor = it }
    }

    override fun getClockSettingsViewModelFactory(
        context: Context,
        registry: ClockRegistry,
    ): ClockSettingsViewModel.Factory {
        return clockSettingsViewModelFactory
            ?: ClockSettingsViewModel.Factory(
                    context,
                    getClockPickerInteractor(context, registry),
                )
                .also { clockSettingsViewModelFactory = it }
    }

    companion object {
        @JvmStatic
        private val KEY_QUICK_AFFORDANCE_SNAPSHOT_RESTORER =
+37 −11
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.customization.picker.clock.ui.binder

import android.view.View
import android.widget.SeekBar
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import androidx.lifecycle.Lifecycle
@@ -41,22 +42,11 @@ object ClockSettingsBinder {
        lifecycleOwner: LifecycleOwner,
    ) {
        val tabView: RecyclerView = view.requireViewById(R.id.tabs)
        val colorOptionContainer = view.requireViewById<View>(R.id.color_picker_container)
        val sizeOptions =
            view.requireViewById<ClockSizeRadioButtonGroup>(R.id.clock_size_radio_button_group)

        val tabAdapter = ClockSettingsTabAdapter()
        tabView.adapter = tabAdapter
        tabView.layoutManager = LinearLayoutManager(view.context, RecyclerView.HORIZONTAL, false)
        tabView.addItemDecoration(ItemSpacing(ItemSpacing.TAB_ITEM_SPACING_DP))

        sizeOptions.onRadioButtonClickListener =
            object : ClockSizeRadioButtonGroup.OnRadioButtonClickListener {
                override fun onClick(size: ClockSize) {
                    viewModel.setClockSize(size)
                }
            }

        val colorOptionContainerView: RecyclerView = view.requireViewById(R.id.color_options)
        val colorOptionAdapter = ColorOptionAdapter()
        colorOptionContainerView.adapter = colorOptionAdapter
@@ -64,6 +54,30 @@ object ClockSettingsBinder {
            LinearLayoutManager(view.context, RecyclerView.HORIZONTAL, false)
        colorOptionContainerView.addItemDecoration(ItemSpacing(ItemSpacing.ITEM_SPACING_DP))

        val slider: SeekBar = view.requireViewById(R.id.slider)
        slider.setOnSeekBarChangeListener(
            object : SeekBar.OnSeekBarChangeListener {
                override fun onProgressChanged(p0: SeekBar?, progress: Int, fromUser: Boolean) {
                    if (fromUser) {
                        viewModel.onSliderProgressChanged(progress)
                    }
                }

                override fun onStartTrackingTouch(p0: SeekBar?) = Unit
                override fun onStopTrackingTouch(p0: SeekBar?) = Unit
            }
        )

        val sizeOptions =
            view.requireViewById<ClockSizeRadioButtonGroup>(R.id.clock_size_radio_button_group)
        sizeOptions.onRadioButtonClickListener =
            object : ClockSizeRadioButtonGroup.OnRadioButtonClickListener {
                override fun onClick(size: ClockSize) {
                    viewModel.setClockSize(size)
                }
            }

        val colorOptionContainer = view.requireViewById<View>(R.id.color_picker_container)
        lifecycleOwner.lifecycleScope.launch {
            lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
                launch { viewModel.tabs.collect { tabAdapter.setItems(it) } }
@@ -103,6 +117,18 @@ object ClockSettingsBinder {
                        }
                    }
                }

                launch {
                    viewModel.sliderProgress.collect { progress ->
                        progress?.let { slider.setProgress(progress, false) }
                    }
                }

                launch {
                    viewModel.isSliderEnabled.collect { isEnabled ->
                        slider.isInvisible = !isEnabled
                    }
                }
            }
        }
    }
+8 −5
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import com.android.customization.module.ThemePickerInjector
import com.android.customization.picker.clock.ui.binder.ClockCarouselViewBinder
import com.android.customization.picker.clock.ui.binder.ClockSettingsBinder
import com.android.customization.picker.clock.ui.view.ClockCarouselView
import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel
import com.android.systemui.shared.clocks.shared.model.ClockPreviewConstants
import com.android.wallpaper.R
import com.android.wallpaper.model.WallpaperColorsViewModel
@@ -131,10 +130,14 @@ class ClockSettingsFragment : AppbarFragment() {
                .show()
            ClockSettingsBinder.bind(
                view,
                ClockSettingsViewModel(
                    context,
                    injector.getClockPickerInteractor(context, registry)
                ViewModelProvider(
                        requireActivity(),
                        injector.getClockSettingsViewModelFactory(
                            context = context,
                            registry = registry,
                        ),
                    )
                    .get(),
                this@ClockSettingsFragment,
            )
        }
Loading