Merge "Update previews on color config change (2/2)" into main
diff --git a/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt b/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt
index 2bcb644..f51d966 100644
--- a/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt
+++ b/src/com/android/customization/picker/mode/ui/viewmodel/DarkModeViewModel.kt
@@ -22,6 +22,7 @@
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
@ViewModelScoped
@@ -31,7 +32,8 @@
private val isDarkMode = interactor.isDarkMode
val isEnabled = interactor.isEnabled
- private val overridingIsDarkMode = MutableStateFlow<Boolean?>(null)
+ private val _overridingIsDarkMode = MutableStateFlow<Boolean?>(null)
+ val overridingIsDarkMode = _overridingIsDarkMode.asStateFlow()
val previewingIsDarkMode =
combine(overridingIsDarkMode, isDarkMode, isEnabled) { override, current, isEnabled ->
if (isEnabled) {
@@ -41,7 +43,8 @@
val toggleDarkMode =
combine(overridingIsDarkMode, isDarkMode) { override, current ->
- { overridingIsDarkMode.value = override?.not() ?: !current }
+ // Only set override if its value is different from current, else set to null
+ { _overridingIsDarkMode.value = if (override == null) !current else null }
}
val onApply: Flow<(suspend () -> Unit)?> =
@@ -55,6 +58,6 @@
}
fun resetPreview() {
- overridingIsDarkMode.value = null
+ _overridingIsDarkMode.value = null
}
}
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index 469db6d..6bdd6ce 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -238,6 +238,7 @@
context: Context,
clockHostView: View,
viewModel: CustomizationPickerViewModel2,
+ colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
clockViewFactory: ClockViewFactory,
) {
@@ -295,12 +296,12 @@
clockPickerViewModel.previewingSeedColor,
clockPickerViewModel.previewingClock,
clockPickerViewModel.previewingFontAxisMap,
- ::Triple,
+ colorUpdateViewModel.systemColorsUpdated,
+ ::Quadruple,
)
- .collect { triple ->
- val (color, clock, axisMap) = triple
+ .collect { quadruple ->
+ val (color, clock, axisMap, _) = quadruple
clockViewFactory.updateColor(clock.clockId, color)
-
val axisList = axisMap.map { ClockFontAxisSetting(it.key, it.value) }
clockViewFactory.updateFontAxes(clock.clockId, axisList)
}
@@ -308,4 +309,6 @@
}
}
}
+
+ data class Quadruple<A, B, C, D>(val first: A, val second: B, val third: C, val fourth: D)
}
diff --git a/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt b/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt
index 0656696..6952d91 100644
--- a/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt
+++ b/src/com/android/wallpaper/picker/common/preview/ui/binder/ThemePickerWorkspaceCallbackBinder.kt
@@ -39,6 +39,7 @@
import com.android.wallpaper.customization.ui.viewmodel.ThemePickerCustomizationOptionsViewModel
import com.android.wallpaper.model.Screen
import com.android.wallpaper.picker.common.preview.ui.binder.WorkspaceCallbackBinder.Companion.sendMessage
+import com.android.wallpaper.picker.customization.ui.viewmodel.ColorUpdateViewModel
import com.android.wallpaper.picker.customization.ui.viewmodel.CustomizationOptionsViewModel
import javax.inject.Inject
import javax.inject.Singleton
@@ -56,12 +57,14 @@
override fun bind(
workspaceCallback: Message,
viewModel: CustomizationOptionsViewModel,
+ colorUpdateViewModel: ColorUpdateViewModel,
screen: Screen,
lifecycleOwner: LifecycleOwner,
) {
defaultWorkspaceCallbackBinder.bind(
workspaceCallback = workspaceCallback,
viewModel = viewModel,
+ colorUpdateViewModel = colorUpdateViewModel,
screen = screen,
lifecycleOwner = lifecycleOwner,
)
@@ -158,10 +161,11 @@
launch {
combine(
viewModel.colorPickerViewModel2.previewingColorOption,
- viewModel.darkModeViewModel.previewingIsDarkMode,
- ::Pair,
+ viewModel.darkModeViewModel.overridingIsDarkMode,
+ colorUpdateViewModel.systemColorsUpdated,
+ ::Triple,
)
- .collect { (colorModel, darkMode) ->
+ .collect { (colorModel, darkMode, _) ->
val bundle =
Bundle().apply {
if (colorModel != null) {
@@ -174,7 +178,9 @@
putIntArray(KEY_COLOR_VALUES, colors)
}
- putBoolean(KEY_DARK_MODE, darkMode)
+ if (darkMode != null) {
+ putBoolean(KEY_DARK_MODE, darkMode)
+ }
}
workspaceCallback.sendMessage(MESSAGE_ID_UPDATE_COLOR, bundle)
}