Loading src/com/android/wallpaper/customization/ui/util/ThemePickerCustomizationOptionUtil.kt +15 −253 Original line number Diff line number Diff line Loading @@ -16,48 +16,27 @@ package com.android.wallpaper.customization.ui.util import android.content.Context import android.provider.Settings import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.LinearLayout import androidx.compose.ui.platform.ComposeView import com.android.customization.picker.mode.shared.util.DarkModeLifecycleUtil import com.android.themepicker.R import com.android.wallpaper.config.BaseFlags import com.android.wallpaper.customization.ui.compose.ColorFloatingSheet import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsData import com.android.wallpaper.model.Screen import com.android.wallpaper.model.Screen.HOME_SCREEN import com.android.wallpaper.model.Screen.LOCK_SCREEN import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.SHORTCUTS import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil.CustomizationOption import com.android.wallpaper.picker.customization.ui.util.DefaultCustomizationOptionUtil import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsData import dagger.hilt.android.qualifiers.ActivityContext import dagger.hilt.android.scopes.ActivityScoped import javax.inject.Inject import javax.inject.Singleton @ActivityScoped @Singleton class ThemePickerCustomizationOptionUtil @Inject constructor( private val defaultCustomizationOptionUtil: DefaultCustomizationOptionUtil, @ActivityContext private val context: Context, ) : CustomizationOptionUtil { constructor(private val defaultCustomizationOptionUtil: DefaultCustomizationOptionUtil) : CustomizationOptionUtil { // Instantiate DarkModeLifecycleUtil for it to observe lifecycle and update DarkModeRepository @Inject lateinit var darkModeLifecycleUtil: DarkModeLifecycleUtil enum class ThemePickerLockCustomizationOption : CustomizationOptionUtil.CustomizationOption { enum class ThemePickerLockCustomizationOption : CustomizationOption { CLOCK, SHORTCUTS, LOCK_SCREEN_NOTIFICATIONS, MORE_LOCK_SCREEN_SETTINGS, } enum class ThemePickerHomeCustomizationOption : CustomizationOptionUtil.CustomizationOption { enum class ThemePickerHomeCustomizationOption : CustomizationOption { PACK_THEME, COLORS, COLOR_CONTRAST, Loading @@ -65,232 +44,15 @@ constructor( GRID, } override fun getOptionEntries( customizationOptionsData: CustomizationOptionsData, screen: Screen, optionContainer: LinearLayout, layoutInflater: LayoutInflater, ): List<Pair<CustomizationOptionUtil.CustomizationOption, View>> { customizationOptionsData as ThemePickerCustomizationOptionsData val isKeyguardQuickAffordanceEnabled = BaseFlags.get().isKeyguardQuickAffordanceEnabled(optionContainer.context) val showPackEntry = Settings.Secure.getInt( context.contentResolver, Settings.Secure.PACK_THEME_FEATURE_ENABLED, /* def= */ 0, ) == 1 val defaultOptionEntries = defaultCustomizationOptionUtil.getOptionEntries( customizationOptionsData = customizationOptionsData, screen = screen, optionContainer = optionContainer, layoutInflater = layoutInflater, ) return when (screen) { LOCK_SCREEN -> buildList { addAll(defaultOptionEntries) if (BaseFlags.get().isPackThemeEnabled() && showPackEntry) { add( ThemePickerHomeCustomizationOption.PACK_THEME to layoutInflater.inflate( R.layout.customization_option_entry_pack_theme, optionContainer, false, ) ) } add( ThemePickerLockCustomizationOption.CLOCK to layoutInflater.inflate( R.layout.customization_option_entry_clock, optionContainer, false, ) ) if (isKeyguardQuickAffordanceEnabled) { add( ThemePickerLockCustomizationOption.SHORTCUTS to layoutInflater.inflate( R.layout.customization_option_entry_keyguard_quick_affordance, optionContainer, false, ) ) } add( ThemePickerLockCustomizationOption.LOCK_SCREEN_NOTIFICATIONS to layoutInflater.inflate( R.layout.customization_option_entry_lock_screen_notifications, optionContainer, false, ) ) add( ThemePickerLockCustomizationOption.MORE_LOCK_SCREEN_SETTINGS to layoutInflater.inflate( R.layout.customization_option_entry_more_lock_settings, optionContainer, false, ) ) } HOME_SCREEN -> buildList { addAll(defaultOptionEntries) if (BaseFlags.get().isPackThemeEnabled() && showPackEntry) { add( ThemePickerHomeCustomizationOption.PACK_THEME to layoutInflater.inflate( R.layout.customization_option_entry_pack_theme, optionContainer, false, ) ) } add( ThemePickerHomeCustomizationOption.COLORS to layoutInflater.inflate( R.layout.customization_option_entry_colors, optionContainer, false, ) ) add( ThemePickerHomeCustomizationOption.COLOR_CONTRAST to layoutInflater.inflate( R.layout.customization_option_entry_color_contrast, optionContainer, false, ) ) if ( customizationOptionsData.isThemedIconAvailable || customizationOptionsData.isShapeAvailable ) add( ThemePickerHomeCustomizationOption.APP_ICONS to layoutInflater.inflate( R.layout.customization_option_entry_app_icons, optionContainer, false, ) ) if (customizationOptionsData.isGridCustomizationAvailable) { add( ThemePickerHomeCustomizationOption.GRID to layoutInflater.inflate( R.layout.customization_option_entry_grid, optionContainer, false, ) ) } } } } override fun initFloatingSheet( customizationOptionsData: CustomizationOptionsData, bottomSheetContainer: FrameLayout, layoutInflater: LayoutInflater, ): Map<CustomizationOptionUtil.CustomizationOption, View> { customizationOptionsData as ThemePickerCustomizationOptionsData val map = defaultCustomizationOptionUtil.initFloatingSheet( customizationOptionsData = customizationOptionsData, bottomSheetContainer = bottomSheetContainer, layoutInflater = layoutInflater, ) val isComposeRefactorEnabled = BaseFlags.get().isComposeRefactorEnabled() val isKeyguardQuickAffordanceEnabled = BaseFlags.get().isKeyguardQuickAffordanceEnabled(bottomSheetContainer.context) return buildMap { putAll(map) put( ThemePickerLockCustomizationOption.CLOCK, inflateFloatingSheet( ThemePickerLockCustomizationOption.CLOCK, bottomSheetContainer, layoutInflater, ) .also { bottomSheetContainer.addView(it) }, ) if (isKeyguardQuickAffordanceEnabled) { put( ThemePickerLockCustomizationOption.SHORTCUTS, if (isComposeRefactorEnabled) { ComposeView(context) } else { inflateFloatingSheet( ThemePickerLockCustomizationOption.SHORTCUTS, bottomSheetContainer, layoutInflater, ) } .also { bottomSheetContainer.addView(it) }, ) } put( ThemePickerHomeCustomizationOption.COLORS, if (isComposeRefactorEnabled) { ComposeView(context).apply { setContent { ColorFloatingSheet() } } } else { inflateFloatingSheet( ThemePickerHomeCustomizationOption.COLORS, bottomSheetContainer, layoutInflater, ) } .also { bottomSheetContainer.addView(it) }, ) put( ThemePickerHomeCustomizationOption.APP_ICONS, inflateFloatingSheet( ThemePickerHomeCustomizationOption.APP_ICONS, bottomSheetContainer, layoutInflater, ), ) if (customizationOptionsData.isGridCustomizationAvailable) { put( ThemePickerHomeCustomizationOption.GRID, inflateFloatingSheet( ThemePickerHomeCustomizationOption.GRID, bottomSheetContainer, layoutInflater, ) .also { bottomSheetContainer.addView(it) }, ) } override fun getCustomizationOptionFromDestination(destination: String): CustomizationOption? { return defaultCustomizationOptionUtil.getCustomizationOptionFromDestination(destination) ?: when (destination) { DESTINATION_QUICK_AFFORDANCES -> SHORTCUTS else -> null } } override fun createClockPreviewAndAddToParent( parentView: ViewGroup, layoutInflater: LayoutInflater, ): View? { val clockHostView = layoutInflater.inflate(R.layout.clock_host_view, parentView, false) parentView.addView(clockHostView) return clockHostView companion object { const val DESTINATION_QUICK_AFFORDANCES = "quick_affordances" } private fun inflateFloatingSheet( option: CustomizationOptionUtil.CustomizationOption, bottomSheetContainer: FrameLayout, layoutInflater: LayoutInflater, ): View = when (option) { ThemePickerLockCustomizationOption.CLOCK -> R.layout.floating_sheet_clock ThemePickerLockCustomizationOption.SHORTCUTS -> R.layout.floating_sheet_shortcut ThemePickerHomeCustomizationOption.COLORS -> R.layout.floating_sheet_colors ThemePickerHomeCustomizationOption.APP_ICONS -> R.layout.floating_sheet_app_icon ThemePickerHomeCustomizationOption.GRID -> R.layout.floating_sheet_grid else -> throw IllegalStateException( "Customization option $option does not have a bottom sheet view" ) }.let { layoutInflater.inflate(it, bottomSheetContainer, false) } } src/com/android/wallpaper/customization/ui/util/ThemePickerCustomizationOptionViewUtil.kt 0 → 100644 +270 −0 File added.Preview size limit exceeded, changes collapsed. Show changes src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt +23 −41 Original line number Diff line number Diff line Loading @@ -19,7 +19,11 @@ package com.android.wallpaper.customization.ui.viewmodel import android.content.Context import android.view.accessibility.AccessibilityManager import com.android.customization.picker.mode.ui.viewmodel.DarkModeViewModel import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.APP_ICONS import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.COLORS import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.GRID import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.SHORTCUTS import com.android.wallpaper.picker.customization.ui.view.ApplyButton import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_DISABLED import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_ENABLED Loading Loading @@ -61,10 +65,14 @@ constructor( val themedIconViewModel: ThemedIconViewModel, val packThemeViewModel: PackThemeViewModel, @Assisted private val viewModelScope: CoroutineScope, @Assisted initialDeepLinkDestination: String?, ) : CustomizationOptionsViewModel { private val defaultCustomizationOptionsViewModel = defaultCustomizationOptionsViewModelFactory.create(viewModelScope) defaultCustomizationOptionsViewModelFactory.create( viewModelScope, initialDeepLinkDestination, ) override val wallpaperCarouselViewModel = defaultCustomizationOptionsViewModel.wallpaperCarouselViewModel Loading Loading @@ -126,10 +134,7 @@ constructor( override fun onTransitionToSecondaryScreenComplete() { defaultCustomizationOptionsViewModel.onTransitionToSecondaryScreenComplete() if ( selectedOption.value == ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK ) { if (selectedOption.value == CLOCK) { // Show the picker's clock when we complete the transition to land on the secondary // clock customization screen. clockPickerViewModel.setShowPickerClockControllerView(true) Loading @@ -140,9 +145,7 @@ constructor( selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK ) defaultCustomizationOptionsViewModel.selectOption(CLOCK) // When we are about to transition to the clock customization screen, hide the // keyguard preview renderer's smartspace as well as the clock. Because, we will // show the picker's clock controller view clock when the transition ends. Loading @@ -157,12 +160,7 @@ constructor( val onCustomizeShortcutClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption .SHORTCUTS ) } { defaultCustomizationOptionsViewModel.selectOption(SHORTCUTS) } } else { null } Loading @@ -171,11 +169,7 @@ constructor( val onCustomizeColorsClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.COLORS ) } { defaultCustomizationOptionsViewModel.selectOption(COLORS) } } else { null } Loading @@ -184,12 +178,7 @@ constructor( val onCustomizeIconsClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption .APP_ICONS ) } { defaultCustomizationOptionsViewModel.selectOption(APP_ICONS) } } else { null } Loading @@ -198,11 +187,7 @@ constructor( val onCustomizeShapeGridClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.GRID ) } { defaultCustomizationOptionsViewModel.selectOption(GRID) } } else { null } Loading @@ -213,15 +198,11 @@ constructor( selectedOption .flatMapLatest { when (it) { ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK -> clockPickerViewModel.onApply ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption .SHORTCUTS -> keyguardQuickAffordancePickerViewModel2.onApply ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.GRID -> gridPickerViewModel.onApply ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption .APP_ICONS -> appIconPickerViewModel.onApply ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.COLORS -> CLOCK -> clockPickerViewModel.onApply SHORTCUTS -> keyguardQuickAffordancePickerViewModel2.onApply GRID -> gridPickerViewModel.onApply APP_ICONS -> appIconPickerViewModel.onApply COLORS -> combine(colorPickerViewModel2.onApply, darkModeViewModel.onApply) { colorOnApply, darkModeOnApply -> Loading Loading @@ -283,7 +264,8 @@ constructor( @AssistedFactory interface Factory : CustomizationOptionsViewModelFactory { override fun create( viewModelScope: CoroutineScope viewModelScope: CoroutineScope, initialDeepLinkDestination: String?, ): ThemePickerCustomizationOptionsViewModel } } src_override/com/android/wallpaper/modules/ThemePickerActivityModule.kt +5 −5 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.android.wallpaper.modules import com.android.customization.picker.clock.ui.view.ClockViewFactory import com.android.customization.picker.clock.ui.view.ThemePickerClockViewFactory import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionViewUtil import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionViewUtil import dagger.Binds import dagger.Module import dagger.hilt.InstallIn Loading @@ -36,7 +36,7 @@ abstract class ThemePickerActivityModule { @Binds @ActivityScoped abstract fun bindCustomizationOptionUtil( impl: ThemePickerCustomizationOptionUtil ): CustomizationOptionUtil abstract fun bindCustomizationOptionViewUtil( impl: ThemePickerCustomizationOptionViewUtil ): CustomizationOptionViewUtil } src_override/com/android/wallpaper/modules/ThemePickerAppModule.kt +8 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.systemui.shared.settings.data.repository.SystemSettingsReposi import com.android.systemui.shared.settings.data.repository.SystemSettingsRepositoryImpl import com.android.wallpaper.customization.ui.binder.ThemePickerCustomizationOptionsBinder import com.android.wallpaper.customization.ui.binder.ThemePickerToolbarBinder import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil import com.android.wallpaper.effects.DefaultEffectsController import com.android.wallpaper.effects.EffectsController import com.android.wallpaper.module.DefaultPartnerProvider Loading Loading @@ -73,6 +74,7 @@ import com.android.wallpaper.picker.customization.ui.binder.CustomizationOptions import com.android.wallpaper.picker.customization.ui.binder.DefaultPackThemeSuggestedEntryBinder import com.android.wallpaper.picker.customization.ui.binder.PackThemeSuggestedEntryBinder import com.android.wallpaper.picker.customization.ui.binder.ToolbarBinder import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil import com.android.wallpaper.picker.di.modules.BackgroundDispatcher import com.android.wallpaper.picker.di.modules.MainDispatcher import com.android.wallpaper.picker.domain.interactor.PackThemeInteractor Loading Loading @@ -151,6 +153,12 @@ abstract class ThemePickerAppModule { impl: ThemePickerCustomizationOptionsBinder ): CustomizationOptionsBinder @Binds @Singleton abstract fun bindCustomizationOptionUtil( impl: ThemePickerCustomizationOptionUtil ): CustomizationOptionUtil @Binds @Singleton abstract fun bindEffectsController(impl: DefaultEffectsController): EffectsController Loading Loading
src/com/android/wallpaper/customization/ui/util/ThemePickerCustomizationOptionUtil.kt +15 −253 Original line number Diff line number Diff line Loading @@ -16,48 +16,27 @@ package com.android.wallpaper.customization.ui.util import android.content.Context import android.provider.Settings import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.FrameLayout import android.widget.LinearLayout import androidx.compose.ui.platform.ComposeView import com.android.customization.picker.mode.shared.util.DarkModeLifecycleUtil import com.android.themepicker.R import com.android.wallpaper.config.BaseFlags import com.android.wallpaper.customization.ui.compose.ColorFloatingSheet import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsData import com.android.wallpaper.model.Screen import com.android.wallpaper.model.Screen.HOME_SCREEN import com.android.wallpaper.model.Screen.LOCK_SCREEN import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.SHORTCUTS import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil.CustomizationOption import com.android.wallpaper.picker.customization.ui.util.DefaultCustomizationOptionUtil import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsData import dagger.hilt.android.qualifiers.ActivityContext import dagger.hilt.android.scopes.ActivityScoped import javax.inject.Inject import javax.inject.Singleton @ActivityScoped @Singleton class ThemePickerCustomizationOptionUtil @Inject constructor( private val defaultCustomizationOptionUtil: DefaultCustomizationOptionUtil, @ActivityContext private val context: Context, ) : CustomizationOptionUtil { constructor(private val defaultCustomizationOptionUtil: DefaultCustomizationOptionUtil) : CustomizationOptionUtil { // Instantiate DarkModeLifecycleUtil for it to observe lifecycle and update DarkModeRepository @Inject lateinit var darkModeLifecycleUtil: DarkModeLifecycleUtil enum class ThemePickerLockCustomizationOption : CustomizationOptionUtil.CustomizationOption { enum class ThemePickerLockCustomizationOption : CustomizationOption { CLOCK, SHORTCUTS, LOCK_SCREEN_NOTIFICATIONS, MORE_LOCK_SCREEN_SETTINGS, } enum class ThemePickerHomeCustomizationOption : CustomizationOptionUtil.CustomizationOption { enum class ThemePickerHomeCustomizationOption : CustomizationOption { PACK_THEME, COLORS, COLOR_CONTRAST, Loading @@ -65,232 +44,15 @@ constructor( GRID, } override fun getOptionEntries( customizationOptionsData: CustomizationOptionsData, screen: Screen, optionContainer: LinearLayout, layoutInflater: LayoutInflater, ): List<Pair<CustomizationOptionUtil.CustomizationOption, View>> { customizationOptionsData as ThemePickerCustomizationOptionsData val isKeyguardQuickAffordanceEnabled = BaseFlags.get().isKeyguardQuickAffordanceEnabled(optionContainer.context) val showPackEntry = Settings.Secure.getInt( context.contentResolver, Settings.Secure.PACK_THEME_FEATURE_ENABLED, /* def= */ 0, ) == 1 val defaultOptionEntries = defaultCustomizationOptionUtil.getOptionEntries( customizationOptionsData = customizationOptionsData, screen = screen, optionContainer = optionContainer, layoutInflater = layoutInflater, ) return when (screen) { LOCK_SCREEN -> buildList { addAll(defaultOptionEntries) if (BaseFlags.get().isPackThemeEnabled() && showPackEntry) { add( ThemePickerHomeCustomizationOption.PACK_THEME to layoutInflater.inflate( R.layout.customization_option_entry_pack_theme, optionContainer, false, ) ) } add( ThemePickerLockCustomizationOption.CLOCK to layoutInflater.inflate( R.layout.customization_option_entry_clock, optionContainer, false, ) ) if (isKeyguardQuickAffordanceEnabled) { add( ThemePickerLockCustomizationOption.SHORTCUTS to layoutInflater.inflate( R.layout.customization_option_entry_keyguard_quick_affordance, optionContainer, false, ) ) } add( ThemePickerLockCustomizationOption.LOCK_SCREEN_NOTIFICATIONS to layoutInflater.inflate( R.layout.customization_option_entry_lock_screen_notifications, optionContainer, false, ) ) add( ThemePickerLockCustomizationOption.MORE_LOCK_SCREEN_SETTINGS to layoutInflater.inflate( R.layout.customization_option_entry_more_lock_settings, optionContainer, false, ) ) } HOME_SCREEN -> buildList { addAll(defaultOptionEntries) if (BaseFlags.get().isPackThemeEnabled() && showPackEntry) { add( ThemePickerHomeCustomizationOption.PACK_THEME to layoutInflater.inflate( R.layout.customization_option_entry_pack_theme, optionContainer, false, ) ) } add( ThemePickerHomeCustomizationOption.COLORS to layoutInflater.inflate( R.layout.customization_option_entry_colors, optionContainer, false, ) ) add( ThemePickerHomeCustomizationOption.COLOR_CONTRAST to layoutInflater.inflate( R.layout.customization_option_entry_color_contrast, optionContainer, false, ) ) if ( customizationOptionsData.isThemedIconAvailable || customizationOptionsData.isShapeAvailable ) add( ThemePickerHomeCustomizationOption.APP_ICONS to layoutInflater.inflate( R.layout.customization_option_entry_app_icons, optionContainer, false, ) ) if (customizationOptionsData.isGridCustomizationAvailable) { add( ThemePickerHomeCustomizationOption.GRID to layoutInflater.inflate( R.layout.customization_option_entry_grid, optionContainer, false, ) ) } } } } override fun initFloatingSheet( customizationOptionsData: CustomizationOptionsData, bottomSheetContainer: FrameLayout, layoutInflater: LayoutInflater, ): Map<CustomizationOptionUtil.CustomizationOption, View> { customizationOptionsData as ThemePickerCustomizationOptionsData val map = defaultCustomizationOptionUtil.initFloatingSheet( customizationOptionsData = customizationOptionsData, bottomSheetContainer = bottomSheetContainer, layoutInflater = layoutInflater, ) val isComposeRefactorEnabled = BaseFlags.get().isComposeRefactorEnabled() val isKeyguardQuickAffordanceEnabled = BaseFlags.get().isKeyguardQuickAffordanceEnabled(bottomSheetContainer.context) return buildMap { putAll(map) put( ThemePickerLockCustomizationOption.CLOCK, inflateFloatingSheet( ThemePickerLockCustomizationOption.CLOCK, bottomSheetContainer, layoutInflater, ) .also { bottomSheetContainer.addView(it) }, ) if (isKeyguardQuickAffordanceEnabled) { put( ThemePickerLockCustomizationOption.SHORTCUTS, if (isComposeRefactorEnabled) { ComposeView(context) } else { inflateFloatingSheet( ThemePickerLockCustomizationOption.SHORTCUTS, bottomSheetContainer, layoutInflater, ) } .also { bottomSheetContainer.addView(it) }, ) } put( ThemePickerHomeCustomizationOption.COLORS, if (isComposeRefactorEnabled) { ComposeView(context).apply { setContent { ColorFloatingSheet() } } } else { inflateFloatingSheet( ThemePickerHomeCustomizationOption.COLORS, bottomSheetContainer, layoutInflater, ) } .also { bottomSheetContainer.addView(it) }, ) put( ThemePickerHomeCustomizationOption.APP_ICONS, inflateFloatingSheet( ThemePickerHomeCustomizationOption.APP_ICONS, bottomSheetContainer, layoutInflater, ), ) if (customizationOptionsData.isGridCustomizationAvailable) { put( ThemePickerHomeCustomizationOption.GRID, inflateFloatingSheet( ThemePickerHomeCustomizationOption.GRID, bottomSheetContainer, layoutInflater, ) .also { bottomSheetContainer.addView(it) }, ) } override fun getCustomizationOptionFromDestination(destination: String): CustomizationOption? { return defaultCustomizationOptionUtil.getCustomizationOptionFromDestination(destination) ?: when (destination) { DESTINATION_QUICK_AFFORDANCES -> SHORTCUTS else -> null } } override fun createClockPreviewAndAddToParent( parentView: ViewGroup, layoutInflater: LayoutInflater, ): View? { val clockHostView = layoutInflater.inflate(R.layout.clock_host_view, parentView, false) parentView.addView(clockHostView) return clockHostView companion object { const val DESTINATION_QUICK_AFFORDANCES = "quick_affordances" } private fun inflateFloatingSheet( option: CustomizationOptionUtil.CustomizationOption, bottomSheetContainer: FrameLayout, layoutInflater: LayoutInflater, ): View = when (option) { ThemePickerLockCustomizationOption.CLOCK -> R.layout.floating_sheet_clock ThemePickerLockCustomizationOption.SHORTCUTS -> R.layout.floating_sheet_shortcut ThemePickerHomeCustomizationOption.COLORS -> R.layout.floating_sheet_colors ThemePickerHomeCustomizationOption.APP_ICONS -> R.layout.floating_sheet_app_icon ThemePickerHomeCustomizationOption.GRID -> R.layout.floating_sheet_grid else -> throw IllegalStateException( "Customization option $option does not have a bottom sheet view" ) }.let { layoutInflater.inflate(it, bottomSheetContainer, false) } }
src/com/android/wallpaper/customization/ui/util/ThemePickerCustomizationOptionViewUtil.kt 0 → 100644 +270 −0 File added.Preview size limit exceeded, changes collapsed. Show changes
src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt +23 −41 Original line number Diff line number Diff line Loading @@ -19,7 +19,11 @@ package com.android.wallpaper.customization.ui.viewmodel import android.content.Context import android.view.accessibility.AccessibilityManager import com.android.customization.picker.mode.ui.viewmodel.DarkModeViewModel import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.APP_ICONS import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.COLORS import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.GRID import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.SHORTCUTS import com.android.wallpaper.picker.customization.ui.view.ApplyButton import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_DISABLED import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_ENABLED Loading Loading @@ -61,10 +65,14 @@ constructor( val themedIconViewModel: ThemedIconViewModel, val packThemeViewModel: PackThemeViewModel, @Assisted private val viewModelScope: CoroutineScope, @Assisted initialDeepLinkDestination: String?, ) : CustomizationOptionsViewModel { private val defaultCustomizationOptionsViewModel = defaultCustomizationOptionsViewModelFactory.create(viewModelScope) defaultCustomizationOptionsViewModelFactory.create( viewModelScope, initialDeepLinkDestination, ) override val wallpaperCarouselViewModel = defaultCustomizationOptionsViewModel.wallpaperCarouselViewModel Loading Loading @@ -126,10 +134,7 @@ constructor( override fun onTransitionToSecondaryScreenComplete() { defaultCustomizationOptionsViewModel.onTransitionToSecondaryScreenComplete() if ( selectedOption.value == ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK ) { if (selectedOption.value == CLOCK) { // Show the picker's clock when we complete the transition to land on the secondary // clock customization screen. clockPickerViewModel.setShowPickerClockControllerView(true) Loading @@ -140,9 +145,7 @@ constructor( selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK ) defaultCustomizationOptionsViewModel.selectOption(CLOCK) // When we are about to transition to the clock customization screen, hide the // keyguard preview renderer's smartspace as well as the clock. Because, we will // show the picker's clock controller view clock when the transition ends. Loading @@ -157,12 +160,7 @@ constructor( val onCustomizeShortcutClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption .SHORTCUTS ) } { defaultCustomizationOptionsViewModel.selectOption(SHORTCUTS) } } else { null } Loading @@ -171,11 +169,7 @@ constructor( val onCustomizeColorsClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.COLORS ) } { defaultCustomizationOptionsViewModel.selectOption(COLORS) } } else { null } Loading @@ -184,12 +178,7 @@ constructor( val onCustomizeIconsClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption .APP_ICONS ) } { defaultCustomizationOptionsViewModel.selectOption(APP_ICONS) } } else { null } Loading @@ -198,11 +187,7 @@ constructor( val onCustomizeShapeGridClicked: Flow<(() -> Unit)?> = selectedOption.map { if (it == null) { { defaultCustomizationOptionsViewModel.selectOption( ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.GRID ) } { defaultCustomizationOptionsViewModel.selectOption(GRID) } } else { null } Loading @@ -213,15 +198,11 @@ constructor( selectedOption .flatMapLatest { when (it) { ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption.CLOCK -> clockPickerViewModel.onApply ThemePickerCustomizationOptionUtil.ThemePickerLockCustomizationOption .SHORTCUTS -> keyguardQuickAffordancePickerViewModel2.onApply ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.GRID -> gridPickerViewModel.onApply ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption .APP_ICONS -> appIconPickerViewModel.onApply ThemePickerCustomizationOptionUtil.ThemePickerHomeCustomizationOption.COLORS -> CLOCK -> clockPickerViewModel.onApply SHORTCUTS -> keyguardQuickAffordancePickerViewModel2.onApply GRID -> gridPickerViewModel.onApply APP_ICONS -> appIconPickerViewModel.onApply COLORS -> combine(colorPickerViewModel2.onApply, darkModeViewModel.onApply) { colorOnApply, darkModeOnApply -> Loading Loading @@ -283,7 +264,8 @@ constructor( @AssistedFactory interface Factory : CustomizationOptionsViewModelFactory { override fun create( viewModelScope: CoroutineScope viewModelScope: CoroutineScope, initialDeepLinkDestination: String?, ): ThemePickerCustomizationOptionsViewModel } }
src_override/com/android/wallpaper/modules/ThemePickerActivityModule.kt +5 −5 Original line number Diff line number Diff line Loading @@ -18,8 +18,8 @@ package com.android.wallpaper.modules import com.android.customization.picker.clock.ui.view.ClockViewFactory import com.android.customization.picker.clock.ui.view.ThemePickerClockViewFactory import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionViewUtil import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionViewUtil import dagger.Binds import dagger.Module import dagger.hilt.InstallIn Loading @@ -36,7 +36,7 @@ abstract class ThemePickerActivityModule { @Binds @ActivityScoped abstract fun bindCustomizationOptionUtil( impl: ThemePickerCustomizationOptionUtil ): CustomizationOptionUtil abstract fun bindCustomizationOptionViewUtil( impl: ThemePickerCustomizationOptionViewUtil ): CustomizationOptionViewUtil }
src_override/com/android/wallpaper/modules/ThemePickerAppModule.kt +8 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import com.android.systemui.shared.settings.data.repository.SystemSettingsReposi import com.android.systemui.shared.settings.data.repository.SystemSettingsRepositoryImpl import com.android.wallpaper.customization.ui.binder.ThemePickerCustomizationOptionsBinder import com.android.wallpaper.customization.ui.binder.ThemePickerToolbarBinder import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil import com.android.wallpaper.effects.DefaultEffectsController import com.android.wallpaper.effects.EffectsController import com.android.wallpaper.module.DefaultPartnerProvider Loading Loading @@ -73,6 +74,7 @@ import com.android.wallpaper.picker.customization.ui.binder.CustomizationOptions import com.android.wallpaper.picker.customization.ui.binder.DefaultPackThemeSuggestedEntryBinder import com.android.wallpaper.picker.customization.ui.binder.PackThemeSuggestedEntryBinder import com.android.wallpaper.picker.customization.ui.binder.ToolbarBinder import com.android.wallpaper.picker.customization.ui.util.CustomizationOptionUtil import com.android.wallpaper.picker.di.modules.BackgroundDispatcher import com.android.wallpaper.picker.di.modules.MainDispatcher import com.android.wallpaper.picker.domain.interactor.PackThemeInteractor Loading Loading @@ -151,6 +153,12 @@ abstract class ThemePickerAppModule { impl: ThemePickerCustomizationOptionsBinder ): CustomizationOptionsBinder @Binds @Singleton abstract fun bindCustomizationOptionUtil( impl: ThemePickerCustomizationOptionUtil ): CustomizationOptionUtil @Binds @Singleton abstract fun bindEffectsController(impl: DefaultEffectsController): EffectsController Loading