Loading src/com/android/wallpaper/customization/ui/binder/ThemePickerToolbarBinder.kt +18 −18 Original line number Diff line number Diff line Loading @@ -16,11 +16,9 @@ package com.android.wallpaper.customization.ui.binder import android.widget.Button import android.widget.FrameLayout import android.widget.Toolbar import androidx.core.graphics.ColorUtils import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.isInvisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner Loading @@ -37,6 +35,10 @@ import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomization import com.android.wallpaper.picker.customization.ui.binder.ColorUpdateBinder import com.android.wallpaper.picker.customization.ui.binder.DefaultToolbarBinder import com.android.wallpaper.picker.customization.ui.binder.ToolbarBinder 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 import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_IN_PROGRESS import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel import javax.inject.Inject Loading @@ -52,7 +54,7 @@ constructor(private val defaultToolbarBinder: DefaultToolbarBinder) : ToolbarBin override fun bind( navButton: FrameLayout, toolbar: Toolbar, applyButton: Button, applyButton: ApplyButton, viewModel: CustomizationOptionsViewModel, colorUpdateViewModel: ColorUpdateViewModel, lifecycleOwner: LifecycleOwner, Loading @@ -75,26 +77,28 @@ constructor(private val defaultToolbarBinder: DefaultToolbarBinder) : ToolbarBin } ColorUpdateBinder.bind( setColor = { color -> DrawableCompat.setTint(DrawableCompat.wrap(applyButton.background), color) }, setColor = { color -> applyButton.setApplyButtonBackgroundColor(color) }, color = colorUpdateViewModel.colorPrimary, shouldAnimate = { true }, lifecycleOwner = lifecycleOwner, ) ColorUpdateBinder.bind( setColor = { color -> applyButton.setTextColor(color) }, setColor = { color -> applyButton.setApplyButtonTextColor(color) applyButton.setIndicatorColor(color) }, color = combine( viewModel.isApplyButtonEnabled, viewModel.applyButtonState, colorUpdateViewModel.colorOnPrimary, colorUpdateViewModel.colorOnSurface, ) { enabled, onPrimary, onSurface -> if (enabled) { onPrimary } else { ) { state, onPrimary, onSurface -> when (state) { APPLY_BUTTON_ENABLED -> onPrimary APPLY_BUTTON_DISABLED -> ColorUtils.setAlphaComponent(onSurface, 97) // 97 for 38% transparent APPLY_BUTTON_IN_PROGRESS -> onPrimary } }, shouldAnimate = { false }, Loading @@ -112,11 +116,7 @@ constructor(private val defaultToolbarBinder: DefaultToolbarBinder) : ToolbarBin launch { viewModel.isApplyButtonVisible.collect { applyButton.isInvisible = !it } } launch { viewModel.isApplyButtonEnabled.collect { applyButton.isEnabled = it applyButton.background.alpha = if (it) 255 else 31 // 255 for 100%, 31 for 12% transparent } viewModel.applyButtonState.collect { applyButton.setApplyButtonState(it) } } launch { Loading src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt +14 −4 Original line number Diff line number Diff line Loading @@ -18,6 +18,10 @@ package com.android.wallpaper.customization.ui.viewmodel import com.android.customization.picker.mode.ui.viewmodel.DarkModeViewModel import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil 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 import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_IN_PROGRESS import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsData import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModelFactory Loading Loading @@ -83,7 +87,7 @@ constructor( defaultCustomizationOptionsViewModel.discardChangesDialogViewModel override fun handleBackPressed(): Boolean { if (isApplyButtonEnabled.value) { if (applyButtonState.value == APPLY_BUTTON_ENABLED) { defaultCustomizationOptionsViewModel.showDiscardChangesDialogViewModel() return true } Loading Loading @@ -219,12 +223,18 @@ constructor( } .stateIn(viewModelScope, SharingStarted.Eagerly, null) val isApplyButtonEnabled: StateFlow<Boolean> = val applyButtonState: StateFlow<ApplyButton.ApplyButtonState> = combine(isApplyInProgress, onApplyButtonClicked) { isApplyInProgress, onApplyButtonClicked -> !isApplyInProgress && onApplyButtonClicked != null if (isApplyInProgress) { APPLY_BUTTON_IN_PROGRESS } else if (onApplyButtonClicked == null) { APPLY_BUTTON_DISABLED } else { APPLY_BUTTON_ENABLED } } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), APPLY_BUTTON_DISABLED) val isApplyButtonVisible: Flow<Boolean> = selectedOption.map { it != null } Loading Loading
src/com/android/wallpaper/customization/ui/binder/ThemePickerToolbarBinder.kt +18 −18 Original line number Diff line number Diff line Loading @@ -16,11 +16,9 @@ package com.android.wallpaper.customization.ui.binder import android.widget.Button import android.widget.FrameLayout import android.widget.Toolbar import androidx.core.graphics.ColorUtils import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.isInvisible import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner Loading @@ -37,6 +35,10 @@ import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomization import com.android.wallpaper.picker.customization.ui.binder.ColorUpdateBinder import com.android.wallpaper.picker.customization.ui.binder.DefaultToolbarBinder import com.android.wallpaper.picker.customization.ui.binder.ToolbarBinder 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 import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_IN_PROGRESS import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel import javax.inject.Inject Loading @@ -52,7 +54,7 @@ constructor(private val defaultToolbarBinder: DefaultToolbarBinder) : ToolbarBin override fun bind( navButton: FrameLayout, toolbar: Toolbar, applyButton: Button, applyButton: ApplyButton, viewModel: CustomizationOptionsViewModel, colorUpdateViewModel: ColorUpdateViewModel, lifecycleOwner: LifecycleOwner, Loading @@ -75,26 +77,28 @@ constructor(private val defaultToolbarBinder: DefaultToolbarBinder) : ToolbarBin } ColorUpdateBinder.bind( setColor = { color -> DrawableCompat.setTint(DrawableCompat.wrap(applyButton.background), color) }, setColor = { color -> applyButton.setApplyButtonBackgroundColor(color) }, color = colorUpdateViewModel.colorPrimary, shouldAnimate = { true }, lifecycleOwner = lifecycleOwner, ) ColorUpdateBinder.bind( setColor = { color -> applyButton.setTextColor(color) }, setColor = { color -> applyButton.setApplyButtonTextColor(color) applyButton.setIndicatorColor(color) }, color = combine( viewModel.isApplyButtonEnabled, viewModel.applyButtonState, colorUpdateViewModel.colorOnPrimary, colorUpdateViewModel.colorOnSurface, ) { enabled, onPrimary, onSurface -> if (enabled) { onPrimary } else { ) { state, onPrimary, onSurface -> when (state) { APPLY_BUTTON_ENABLED -> onPrimary APPLY_BUTTON_DISABLED -> ColorUtils.setAlphaComponent(onSurface, 97) // 97 for 38% transparent APPLY_BUTTON_IN_PROGRESS -> onPrimary } }, shouldAnimate = { false }, Loading @@ -112,11 +116,7 @@ constructor(private val defaultToolbarBinder: DefaultToolbarBinder) : ToolbarBin launch { viewModel.isApplyButtonVisible.collect { applyButton.isInvisible = !it } } launch { viewModel.isApplyButtonEnabled.collect { applyButton.isEnabled = it applyButton.background.alpha = if (it) 255 else 31 // 255 for 100%, 31 for 12% transparent } viewModel.applyButtonState.collect { applyButton.setApplyButtonState(it) } } launch { Loading
src/com/android/wallpaper/customization/ui/viewmodel/ThemePickerCustomizationOptionsViewModel.kt +14 −4 Original line number Diff line number Diff line Loading @@ -18,6 +18,10 @@ package com.android.wallpaper.customization.ui.viewmodel import com.android.customization.picker.mode.ui.viewmodel.DarkModeViewModel import com.android.wallpaper.customization.ui.util.ThemePickerCustomizationOptionUtil 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 import com.android.wallpaper.picker.customization.ui.view.ApplyButton.ApplyButtonState.APPLY_BUTTON_IN_PROGRESS import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsData import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModelFactory Loading Loading @@ -83,7 +87,7 @@ constructor( defaultCustomizationOptionsViewModel.discardChangesDialogViewModel override fun handleBackPressed(): Boolean { if (isApplyButtonEnabled.value) { if (applyButtonState.value == APPLY_BUTTON_ENABLED) { defaultCustomizationOptionsViewModel.showDiscardChangesDialogViewModel() return true } Loading Loading @@ -219,12 +223,18 @@ constructor( } .stateIn(viewModelScope, SharingStarted.Eagerly, null) val isApplyButtonEnabled: StateFlow<Boolean> = val applyButtonState: StateFlow<ApplyButton.ApplyButtonState> = combine(isApplyInProgress, onApplyButtonClicked) { isApplyInProgress, onApplyButtonClicked -> !isApplyInProgress && onApplyButtonClicked != null if (isApplyInProgress) { APPLY_BUTTON_IN_PROGRESS } else if (onApplyButtonClicked == null) { APPLY_BUTTON_DISABLED } else { APPLY_BUTTON_ENABLED } } .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), false) .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), APPLY_BUTTON_DISABLED) val isApplyButtonVisible: Flow<Boolean> = selectedOption.map { it != null } Loading