Make preview smartspace corresponds to the selected clock (1/3)
Test: Manually tested
Bug: 376091754
Flag: com.android.systemui.shared.new_customization_picker_ui
Change-Id: Ib2af12f5f60c1d67635d3e04829346e8fa1b5fa7
diff --git a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
index eaed4e5..46d0346 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ThemePickerCustomizationOptionBinder.kt
@@ -52,7 +52,6 @@
import javax.inject.Singleton
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.launch
@Singleton
@@ -259,7 +258,7 @@
lifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
launch {
combine(
- clockPickerViewModel.previewingClock.filterNotNull(),
+ clockPickerViewModel.previewingClock,
clockPickerViewModel.previewingClockSize,
) { clock, size ->
clock to size
diff --git a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
index 6ca773b..2a1a8c9 100644
--- a/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
+++ b/src/com/android/wallpaper/customization/ui/viewmodel/ClockPickerViewModel.kt
@@ -57,6 +57,7 @@
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.mapLatest
+import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.flow.stateIn
/** View model for the clock customization screen. */
@@ -120,8 +121,9 @@
val selectedClock = clockPickerInteractor.selectedClock
val previewingClock =
combine(overridingClock, selectedClock) { overridingClock, selectedClock ->
- overridingClock ?: selectedClock
- }
+ (overridingClock ?: selectedClock)
+ }
+ .shareIn(viewModelScope, SharingStarted.WhileSubscribed(), 1)
data class ClockStyleModel(val thumbnail: Drawable, val showEditButton: StateFlow<Boolean>)
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 6952d91..bb77193 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
@@ -25,13 +25,21 @@
import androidx.lifecycle.repeatOnLifecycle
import com.android.customization.model.grid.DefaultShapeGridManager.Companion.COL_GRID_NAME
import com.android.customization.model.grid.DefaultShapeGridManager.Companion.COL_SHAPE_KEY
+import com.android.customization.picker.clock.shared.ClockSize
+import com.android.customization.picker.clock.ui.view.ClockViewFactory
import com.android.customization.picker.color.data.util.MaterialColorsGenerator
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_END
import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots.SLOT_ID_BOTTOM_START
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.CLOCK_SIZE_DYNAMIC
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.CLOCK_SIZE_SMALL
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.KEY_CLOCK_SIZE
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.KEY_HIDE_SMART_SPACE
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.KEY_QUICK_AFFORDANCE_ID
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.KEY_SLOT_ID
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.MESSAGE_ID_DEFAULT_PREVIEW
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.MESSAGE_ID_HIDE_SMART_SPACE
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.MESSAGE_ID_PREVIEW_CLOCK_SIZE
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.MESSAGE_ID_PREVIEW_QUICK_AFFORDANCE_SELECTED
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.MESSAGE_ID_SLOT_SELECTED
import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants.MESSAGE_ID_START_CUSTOMIZING_QUICK_AFFORDANCES
@@ -60,6 +68,7 @@
colorUpdateViewModel: ColorUpdateViewModel,
screen: Screen,
lifecycleOwner: LifecycleOwner,
+ clockViewFactory: ClockViewFactory,
) {
defaultWorkspaceCallbackBinder.bind(
workspaceCallback = workspaceCallback,
@@ -67,6 +76,7 @@
colorUpdateViewModel = colorUpdateViewModel,
screen = screen,
lifecycleOwner = lifecycleOwner,
+ clockViewFactory = clockViewFactory,
)
if (viewModel !is ThemePickerCustomizationOptionsViewModel) {
@@ -135,6 +145,48 @@
}
}
}
+
+ launch {
+ combine(
+ viewModel.clockPickerViewModel.previewingClock,
+ viewModel.clockPickerViewModel.previewingClockSize,
+ ::Pair,
+ )
+ .collect { (previewingClock, previewingClockSize) ->
+ val hideSmartspace =
+ clockViewFactory
+ .getController(previewingClock.clockId)
+ .let {
+ when (previewingClockSize) {
+ ClockSize.DYNAMIC ->
+ it.largeClock.config
+ .hasCustomWeatherDataDisplay
+ ClockSize.SMALL ->
+ it.smallClock.config
+ .hasCustomWeatherDataDisplay
+ }
+ }
+ workspaceCallback.sendMessage(
+ MESSAGE_ID_HIDE_SMART_SPACE,
+ Bundle().apply {
+ putBoolean(KEY_HIDE_SMART_SPACE, hideSmartspace)
+ },
+ )
+
+ workspaceCallback.sendMessage(
+ MESSAGE_ID_PREVIEW_CLOCK_SIZE,
+ Bundle().apply {
+ putString(
+ KEY_CLOCK_SIZE,
+ when (previewingClockSize) {
+ ClockSize.DYNAMIC -> CLOCK_SIZE_DYNAMIC
+ ClockSize.SMALL -> CLOCK_SIZE_SMALL
+ },
+ )
+ },
+ )
+ }
+ }
}
}
Screen.HOME_SCREEN ->