Display smartspace in lockscreen preview

Bug: b/271338533
Test: manual - validate that smartspace shows when swiping to a clock that doesn't have a custom date or weather
Test: manual - validate that smartspace does not show when swiping to a clock that has a custom date or weather
Change-Id: Ia2c055a91ea603cc5a7a0e3dfbc706dc914ca7ea
diff --git a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
index 8d5924e..7d19dc1 100644
--- a/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
+++ b/src/com/android/customization/picker/clock/ui/binder/ClockCarouselViewBinder.kt
@@ -38,6 +38,7 @@
         viewModel: ClockCarouselViewModel,
         clockViewFactory: ClockViewFactory,
         lifecycleOwner: LifecycleOwner,
+        hideSmartspace: (Boolean) -> Unit,
     ) {
         val singleClockHostView =
             singleClockView.requireViewById<FrameLayout>(R.id.single_clock_host_view)
@@ -53,7 +54,19 @@
                                 clockViewFactory.getController(clockId)
                             },
                             onClockSelected = { clockId -> viewModel.setSelectedClock(clockId) },
-                            getPreviewRatio = { clockViewFactory.getRatio() }
+                            getPreviewRatio = { clockViewFactory.getRatio() },
+                            onClockTransitionCompleted = { startId, endId ->
+                                if (startId != endId ) {
+                                    val hasCustomWeatherDataDisplay =
+                                            clockViewFactory
+                                                    .getController(endId)
+                                                    .largeClock
+                                                    .config
+                                                    .hasCustomWeatherDataDisplay
+
+                                    hideSmartspace(hasCustomWeatherDataDisplay)
+                                }
+                            },
                         )
                     }
                 }
diff --git a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
index d71e202..a084a54 100644
--- a/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
+++ b/src/com/android/customization/picker/clock/ui/view/ClockCarouselView.kt
@@ -59,6 +59,7 @@
         onGetClockController: (clockId: String) -> ClockController,
         onClockSelected: (clockId: String) -> Unit,
         getPreviewRatio: () -> Float,
+        onClockTransitionCompleted: (startId: String, endId: String) -> Unit,
     ) {
         adapter =
             ClockCarouselAdapter(clockIds, onGetClockController, onClockSelected, getPreviewRatio)
@@ -66,17 +67,20 @@
         carousel.refresh()
         motionLayout.setTransitionListener(
             object : MotionLayout.TransitionListener {
+                var scalingDownClockId = ""
+                var scalingUpClockId = ""
+
                 override fun onTransitionStarted(
                     motionLayout: MotionLayout?,
                     startId: Int,
                     endId: Int
                 ) {
                     isCarouselInTransition = true
-                    val scalingDownClockId = adapter.clockIds[carousel.currentIndex]
+                    scalingDownClockId = adapter.clockIds[carousel.currentIndex]
                     val scalingUpIdx =
                         if (endId == R.id.next) (carousel.currentIndex + 1) % adapter.count()
                         else (carousel.currentIndex - 1 + adapter.count()) % adapter.count()
-                    val scalingUpClockId = adapter.clockIds[scalingUpIdx]
+                    scalingUpClockId = adapter.clockIds[scalingUpIdx]
                     scalingDownClockController = adapter.onGetClockController(scalingDownClockId)
                     scalingUpClockController = adapter.onGetClockController(scalingUpClockId)
                     scalingDownClockView = motionLayout?.findViewById(R.id.clock_scale_view_2)
@@ -118,6 +122,7 @@
 
                 override fun onTransitionCompleted(motionLayout: MotionLayout?, currentId: Int) {
                     isCarouselInTransition = false
+                    onClockTransitionCompleted(scalingDownClockId, scalingUpClockId)
                 }
 
                 override fun onTransitionTrigger(
diff --git a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
index 2f83fa7..d2e0476 100644
--- a/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
+++ b/src/com/android/customization/picker/preview/ui/section/PreviewWithClockCarouselSectionController.kt
@@ -19,6 +19,7 @@
 
 import android.app.Activity
 import android.content.Context
+import android.os.Bundle
 import android.view.View
 import android.view.View.OnAttachStateChangeListener
 import android.view.ViewGroup
@@ -31,6 +32,7 @@
 import com.android.customization.picker.clock.ui.view.ClockCarouselView
 import com.android.customization.picker.clock.ui.view.ClockViewFactory
 import com.android.customization.picker.clock.ui.viewmodel.ClockCarouselViewModel
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants
 import com.android.wallpaper.R
 import com.android.wallpaper.model.CustomizationSectionController.CustomizationSectionNavigationController
 import com.android.wallpaper.model.WallpaperColorsViewModel
@@ -112,6 +114,7 @@
                                     viewModel = clockCarouselViewModel,
                                     clockViewFactory = clockViewFactory,
                                     lifecycleOwner = lifecycleOwner,
+                                    hideSmartspace = ::hideSmartspace,
                                 )
                                 if (onAttachStateChangeListener != null) {
                                     carouselView.carousel.removeOnAttachStateChangeListener(
@@ -130,4 +133,16 @@
 
         return view
     }
+
+    private fun hideSmartspace(hide: Boolean) {
+        previewViewBinding.sendMessage(
+            KeyguardPreviewConstants.MESSAGE_ID_HIDE_SMART_SPACE,
+            Bundle().apply {
+                putBoolean(
+                    KeyguardPreviewConstants.KEY_HIDE_SMART_SPACE,
+                    hide,
+                )
+            }
+        )
+    }
 }
diff --git a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
index 58a082d..67c63b7 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
@@ -25,7 +25,7 @@
 import androidx.lifecycle.flowWithLifecycle
 import androidx.lifecycle.lifecycleScope
 import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
-import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants
 import com.android.wallpaper.R
 import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder
 import kotlinx.coroutines.launch
@@ -61,9 +61,9 @@
                 .flowWithLifecycle(lifecycleOwner.lifecycle, Lifecycle.State.STARTED)
                 .collect { slotId ->
                     binding.sendMessage(
-                        KeyguardQuickAffordancePreviewConstants.MESSAGE_ID_SLOT_SELECTED,
+                        KeyguardPreviewConstants.MESSAGE_ID_SLOT_SELECTED,
                         Bundle().apply {
-                            putString(KeyguardQuickAffordancePreviewConstants.KEY_SLOT_ID, slotId)
+                            putString(KeyguardPreviewConstants.KEY_SLOT_ID, slotId)
                         },
                     )
                 }
diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
index 14b6acc..397d3a9 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
@@ -29,7 +29,7 @@
 import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
 import com.android.systemui.shared.customization.data.content.CustomizationProviderContract
 import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
-import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardPreviewConstants
 import com.android.wallpaper.R
 import com.android.wallpaper.module.CurrentWallpaperInfoFactory
 import com.android.wallpaper.picker.common.button.ui.viewmodel.ButtonStyle
@@ -79,11 +79,11 @@
             initialExtrasProvider = {
                 Bundle().apply {
                     putString(
-                        KeyguardQuickAffordancePreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
+                        KeyguardPreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
                         selectedSlotId.value,
                     )
                     putBoolean(
-                        KeyguardQuickAffordancePreviewConstants.KEY_HIGHLIGHT_QUICK_AFFORDANCES,
+                        KeyguardPreviewConstants.KEY_HIGHLIGHT_QUICK_AFFORDANCES,
                         true,
                     )
                 }