Enable dark mode preview in the color picker UI (2/2)
Flag: com.android.systemui.shared.new_customization_picker_ui
Test: manually verified by toggling dark theme, see bug
Test: unit tests pass
Bug: 350718581
Change-Id: I64c83db06c6776c42708cba2d8e1aa6512e253b3
diff --git a/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
index bac650f..c2109ae 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
@@ -42,6 +42,7 @@
import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter2
import java.lang.ref.WeakReference
import kotlinx.coroutines.DisposableHandle
+import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
object ColorsFloatingSheetBinder {
@@ -52,7 +53,8 @@
colorUpdateViewModel: ColorUpdateViewModel,
lifecycleOwner: LifecycleOwner,
) {
- val viewModel = optionsViewModel.colorPickerViewModel2
+ val colorsViewModel = optionsViewModel.colorPickerViewModel2
+ val darkModeViewModel = optionsViewModel.darkModeViewModel
val isFloatingSheetActive = { optionsViewModel.selectedOption.value == COLORS }
ColorUpdateBinder.bind(
@@ -119,7 +121,7 @@
DarkModeBinder.bind(
darkModeToggle = view.findViewById(R.id.dark_mode_toggle),
- viewModel = optionsViewModel.darkModeViewModel,
+ viewModel = darkModeViewModel,
colorUpdateViewModel = colorUpdateViewModel,
shouldAnimateColor = isFloatingSheetActive,
lifecycleOwner = lifecycleOwner,
@@ -127,12 +129,12 @@
lifecycleOwner.lifecycleScope.launch {
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
- launch { viewModel.colorTypeTabs.collect { tabAdapter.submitList(it) } }
+ launch { colorsViewModel.colorTypeTabs.collect { tabAdapter.submitList(it) } }
- launch { viewModel.colorTypeTabSubheader.collect { subhead.text = it } }
+ launch { colorsViewModel.colorTypeTabSubheader.collect { subhead.text = it } }
launch {
- viewModel.colorOptions.collect { colorOptions ->
+ colorsViewModel.colorOptions.collect { colorOptions ->
colorsAdapter.setItems(colorOptions) {
var indexToFocus = colorOptions.indexOfFirst { it.isSelected.value }
indexToFocus = if (indexToFocus < 0) 0 else indexToFocus
@@ -143,14 +145,27 @@
}
launch {
- viewModel.previewingColorOption.collect { colorOption ->
- if (colorOption != null) {
- colorUpdateViewModel.previewColors(
- colorOption.seedColor,
- colorOption.style,
- )
- } else colorUpdateViewModel.resetPreview()
- }
+ combine(
+ colorsViewModel.previewingColorOption,
+ colorsViewModel.selectedColorOption,
+ darkModeViewModel.overridingIsDarkMode,
+ ::Triple,
+ )
+ .collect { (previewColor, selectedColor, overridingIsDarkMode) ->
+ if (previewColor != null || overridingIsDarkMode != null) {
+ val previewColorOption = previewColor ?: selectedColor
+ val previewIsDarkMode =
+ overridingIsDarkMode
+ ?: view.resources.configuration.isNightModeActive
+ previewColorOption?.let {
+ colorUpdateViewModel.previewColors(
+ previewColorOption.seedColor,
+ previewColorOption.style,
+ previewIsDarkMode,
+ )
+ }
+ } else colorUpdateViewModel.resetPreview()
+ }
}
}
}