Loading res/values/strings.xml +19 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ <!-- The content description of clock entry. [CHAR LIMIT=NONE] --> <string name="clock_picker_entry_content_description">Change a custom clock</string> <!-- Title of a section of the customization picker where the user can configure Clock face. [CHAR LIMIT=15] --> <!-- Title of a section of the customization picker where the user can configure Clock face. [CHAR LIMIT=19] --> <string name="clock_settings_title">Clock Settings</string> <!-- Title of a tab to change the clock color. [CHAR LIMIT=15] --> Loading Loading @@ -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> src/com/android/customization/module/CustomizationInjector.kt +6 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -77,4 +78,9 @@ interface CustomizationInjector : Injector { context: Context, registry: ClockRegistry, ): ClockViewFactory fun getClockSettingsViewModelFactory( context: Context, registry: ClockRegistry, ): ClockSettingsViewModel.Factory } src/com/android/customization/module/ThemePickerInjector.kt +14 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 = Loading src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +37 −11 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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) } } Loading Loading @@ -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 } } } } } Loading src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt +8 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
res/values/strings.xml +19 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ <!-- The content description of clock entry. [CHAR LIMIT=NONE] --> <string name="clock_picker_entry_content_description">Change a custom clock</string> <!-- Title of a section of the customization picker where the user can configure Clock face. [CHAR LIMIT=15] --> <!-- Title of a section of the customization picker where the user can configure Clock face. [CHAR LIMIT=19] --> <string name="clock_settings_title">Clock Settings</string> <!-- Title of a tab to change the clock color. [CHAR LIMIT=15] --> Loading Loading @@ -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>
src/com/android/customization/module/CustomizationInjector.kt +6 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -77,4 +78,9 @@ interface CustomizationInjector : Injector { context: Context, registry: ClockRegistry, ): ClockViewFactory fun getClockSettingsViewModelFactory( context: Context, registry: ClockRegistry, ): ClockSettingsViewModel.Factory }
src/com/android/customization/module/ThemePickerInjector.kt +14 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading Loading @@ -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 = Loading
src/com/android/customization/picker/clock/ui/binder/ClockSettingsBinder.kt +37 −11 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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) } } Loading Loading @@ -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 } } } } } Loading
src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt +8 −5 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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