Merge "[TP] Preview on clock settings screen" into tm-qpr-dev am: 4769860862

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/ThemePicker/+/21170540

Change-Id: Ide6f3a40b98a14a8c9e95835e41587bb5e3a2def
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/res/layout/fragment_clock_settings.xml b/res/layout/fragment_clock_settings.xml
index 7268b34..13cec45 100644
--- a/res/layout/fragment_clock_settings.xml
+++ b/res/layout/fragment_clock_settings.xml
@@ -24,24 +24,36 @@
         android:id="@+id/section_header_container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
-
         <include layout="@layout/section_header" />
     </FrameLayout>
 
-    <com.android.wallpaper.picker.DisplayAspectRatioFrameLayout
+    <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:layout_weight="1"
         android:paddingTop="36dp"
         android:paddingBottom="40dp">
 
-        <include
-            android:id="@+id/preview"
-            layout="@layout/wallpaper_preview_card"
-            android:layout_width="0dp"
-            android:layout_height="match_parent"
-            android:layout_gravity="center"/>
-    </com.android.wallpaper.picker.DisplayAspectRatioFrameLayout>
+        <com.android.wallpaper.picker.DisplayAspectRatioFrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <include
+                android:id="@+id/lock_preview"
+                layout="@layout/wallpaper_preview_card"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_gravity="center" />
+
+        </com.android.wallpaper.picker.DisplayAspectRatioFrameLayout>
+
+        <com.android.customization.picker.clock.ui.view.ClockCarouselView
+            android:id="@+id/clock_carousel_view"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:visibility="gone" />
+    </FrameLayout>
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -63,7 +75,7 @@
                 android:layout_height="wrap_content"
                 android:clipToPadding="false"
                 android:paddingHorizontal="16dp"
-                android:layout_gravity="center_horizontal"/>
+                android:layout_gravity="center_horizontal" />
 
             <!--
             This is just an invisible placeholder put in place so that the parent keeps its height
diff --git a/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt b/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt
index c8d2434..56dd310 100644
--- a/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt
+++ b/src/com/android/customization/picker/clock/ui/fragment/ClockSettingsFragment.kt
@@ -19,20 +19,24 @@
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.cardview.widget.CardView
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.get
 import androidx.lifecycle.lifecycleScope
 import com.android.customization.module.ThemePickerInjector
 import com.android.customization.picker.clock.ui.binder.ClockSettingsBinder
 import com.android.customization.picker.clock.ui.viewmodel.ClockSettingsViewModel
-import com.android.customization.picker.quickaffordance.ui.binder.KeyguardQuickAffordancePreviewBinder
-import com.android.customization.picker.quickaffordance.ui.viewmodel.KeyguardQuickAffordancePickerViewModel
 import com.android.wallpaper.R
+import com.android.wallpaper.model.WallpaperColorsViewModel
 import com.android.wallpaper.module.InjectorProvider
 import com.android.wallpaper.picker.AppbarFragment
+import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder
+import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel
+import com.android.wallpaper.util.PreviewUtils
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.launch
+import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlinx.coroutines.withContext
 
 @OptIn(ExperimentalCoroutinesApi::class)
@@ -58,34 +62,59 @@
                 false,
             )
         setUpToolbar(view)
+
+        val context = requireContext()
+        val activity = requireActivity()
         val injector = InjectorProvider.getInjector() as ThemePickerInjector
 
-        // TODO(b/262924055): Modify to render the lockscreen properly
-        val viewModel: KeyguardQuickAffordancePickerViewModel =
-            ViewModelProvider(
-                    requireActivity(),
-                    injector.getKeyguardQuickAffordancePickerViewModelFactory(requireContext()),
-                )
-                .get()
-        KeyguardQuickAffordancePreviewBinder.bind(
-            activity = requireActivity(),
-            previewView = view.requireViewById(R.id.preview),
-            viewModel = viewModel,
-            lifecycleOwner = this,
-            offsetToStart =
-                injector.getDisplayUtils(requireActivity()).isOnWallpaperDisplay(requireActivity())
-        )
+        val lockScreenView: CardView = view.requireViewById(R.id.lock_preview)
+        val colorViewModel = ViewModelProvider(activity)[WallpaperColorsViewModel::class.java]
+        val displayUtils = injector.getDisplayUtils(context)
+        ScreenPreviewBinder.bind(
+                activity = activity,
+                previewView = lockScreenView,
+                viewModel =
+                    ScreenPreviewViewModel(
+                        previewUtils =
+                            PreviewUtils(
+                                context = context,
+                                authority =
+                                    resources.getString(
+                                        R.string.lock_screen_preview_provider_authority,
+                                    ),
+                            ),
+                        wallpaperInfoProvider = {
+                            suspendCancellableCoroutine { continuation ->
+                                injector
+                                    .getCurrentWallpaperInfoFactory(context)
+                                    .createCurrentWallpaperInfos(
+                                        { homeWallpaper, lockWallpaper, _ ->
+                                            continuation.resume(
+                                                homeWallpaper ?: lockWallpaper,
+                                                null,
+                                            )
+                                        },
+                                        /* forceRefresh= */ true,
+                                    )
+                            }
+                        },
+                        onWallpaperColorChanged = { colors ->
+                            colorViewModel.setLockWallpaperColors(colors)
+                        },
+                    ),
+                lifecycleOwner = this,
+                offsetToStart = displayUtils.isOnWallpaperDisplay(activity),
+            )
+            .show()
 
         lifecycleScope.launch {
             val clockRegistry =
-                withContext(Dispatchers.IO) {
-                    injector.getClockRegistryProvider(requireContext()).get()
-                }
+                withContext(Dispatchers.IO) { injector.getClockRegistryProvider(context).get() }
             ClockSettingsBinder.bind(
                 view,
                 ClockSettingsViewModel(
-                    requireContext(),
-                    injector.getClockPickerInteractor(requireContext(), clockRegistry)
+                    context,
+                    injector.getClockPickerInteractor(context, clockRegistry)
                 ),
                 this@ClockSettingsFragment,
             )