Moves common screen preview logic to WPP2 (2/2). am: b169b2c1ea

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

Change-Id: I9b6168ccf282ff5605f5cba2ec4fbc91b5d0b374
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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 0af6bf4..c6cdcaa 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/binder/KeyguardQuickAffordancePreviewBinder.kt
@@ -18,29 +18,17 @@
 package com.android.customization.picker.quickaffordance.ui.binder
 
 import android.app.Activity
-import android.content.Intent
 import android.os.Bundle
-import android.service.wallpaper.WallpaperService
-import android.view.SurfaceView
 import androidx.cardview.widget.CardView
 import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
 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.wallpaper.R
-import com.android.wallpaper.asset.Asset
-import com.android.wallpaper.asset.BitmapCachingAsset
-import com.android.wallpaper.model.LiveWallpaperInfo
 import com.android.wallpaper.model.WallpaperInfo
-import com.android.wallpaper.picker.WorkspaceSurfaceHolderCallback
-import com.android.wallpaper.util.PreviewUtils
-import com.android.wallpaper.util.ResourceUtils
-import com.android.wallpaper.util.WallpaperConnection
-import com.android.wallpaper.util.WallpaperSurfaceCallback
-import java.util.concurrent.CompletableFuture
+import com.android.wallpaper.picker.customization.ui.binder.ScreenPreviewBinder
 import kotlinx.coroutines.launch
 
 object KeyguardQuickAffordancePreviewBinder {
@@ -54,123 +42,25 @@
         lifecycleOwner: LifecycleOwner,
         wallpaperInfoProvider: suspend () -> WallpaperInfo?,
     ) {
-        val workspaceSurface: SurfaceView = previewView.requireViewById(R.id.workspace_surface)
-        val wallpaperSurface: SurfaceView = previewView.requireViewById(R.id.wallpaper_surface)
+        val binding =
+            ScreenPreviewBinder.bind(
+                activity = activity,
+                previewView = previewView,
+                viewModel = viewModel.preview,
+                lifecycleOwner = lifecycleOwner,
+                wallpaperInfoProvider = wallpaperInfoProvider,
+            )
 
-        previewView.radius =
-            previewView.resources.getDimension(R.dimen.wallpaper_picker_entry_card_corner_radius)
         previewView.contentDescription =
             previewView.context.getString(
                 R.string.lockscreen_wallpaper_preview_card_content_description
             )
 
-        var previewSurfaceCallback: WorkspaceSurfaceHolderCallback? = null
-        var wallpaperSurfaceCallback: WallpaperSurfaceCallback? = null
-        var wallpaperConnection: WallpaperConnection? = null
-        var wallpaperInfo: WallpaperInfo? = null
-
-        lifecycleOwner.lifecycle.addObserver(
-            LifecycleEventObserver { _, event ->
-                when (event) {
-                    Lifecycle.Event.ON_CREATE -> {
-                        previewSurfaceCallback =
-                            WorkspaceSurfaceHolderCallback(
-                                workspaceSurface,
-                                PreviewUtils(
-                                    context = previewView.context,
-                                    authority =
-                                        previewView.context.getString(
-                                            R.string.lock_screen_preview_provider_authority
-                                        ),
-                                ),
-                                Bundle().apply {
-                                    putString(
-                                        KeyguardQuickAffordancePreviewConstants
-                                            .KEY_INITIALLY_SELECTED_SLOT_ID,
-                                        viewModel.selectedSlotId.value,
-                                    )
-                                },
-                            )
-                        workspaceSurface.holder.addCallback(previewSurfaceCallback)
-                        workspaceSurface.setZOrderMediaOverlay(true)
-
-                        wallpaperSurfaceCallback =
-                            WallpaperSurfaceCallback(
-                                previewView.context,
-                                previewView,
-                                wallpaperSurface,
-                                CompletableFuture.completedFuture(
-                                    WallpaperInfo.ColorInfo(
-                                        /* wallpaperColors= */ null,
-                                        ResourceUtils.getColorAttr(
-                                            previewView.context,
-                                            android.R.attr.colorSecondary,
-                                        )
-                                    )
-                                ),
-                            ) {
-                                maybeLoadThumbnail(
-                                    activity = activity,
-                                    wallpaperInfo = wallpaperInfo,
-                                    surfaceCallback = wallpaperSurfaceCallback,
-                                )
-                            }
-                        wallpaperSurface.holder.addCallback(wallpaperSurfaceCallback)
-                        wallpaperSurface.setZOrderMediaOverlay(true)
-                    }
-                    Lifecycle.Event.ON_DESTROY -> {
-                        workspaceSurface.holder.removeCallback(previewSurfaceCallback)
-                        previewSurfaceCallback?.cleanUp()
-                        wallpaperSurface.holder.removeCallback(wallpaperSurfaceCallback)
-                        wallpaperSurfaceCallback?.cleanUp()
-                    }
-                    Lifecycle.Event.ON_RESUME -> {
-                        lifecycleOwner.lifecycleScope.launch {
-                            wallpaperInfo = wallpaperInfoProvider()
-                            (wallpaperInfo as? LiveWallpaperInfo)?.let { liveWallpaperInfo ->
-                                if (WallpaperConnection.isPreviewAvailable()) {
-                                    wallpaperConnection =
-                                        WallpaperConnection(
-                                            Intent(WallpaperService.SERVICE_INTERFACE).apply {
-                                                setClassName(
-                                                    liveWallpaperInfo.wallpaperComponent
-                                                        .packageName,
-                                                    liveWallpaperInfo.wallpaperComponent.serviceName
-                                                )
-                                            },
-                                            previewView.context,
-                                            null,
-                                            wallpaperSurface,
-                                            null,
-                                        )
-
-                                    wallpaperConnection?.connect()
-                                    wallpaperConnection?.setVisibility(true)
-                                }
-                            }
-                            maybeLoadThumbnail(
-                                activity = activity,
-                                wallpaperInfo = wallpaperInfo,
-                                surfaceCallback = wallpaperSurfaceCallback,
-                            )
-                        }
-                    }
-                    Lifecycle.Event.ON_PAUSE -> {
-                        wallpaperConnection?.setVisibility(false)
-                    }
-                    Lifecycle.Event.ON_STOP -> {
-                        wallpaperConnection?.disconnect()
-                    }
-                    else -> Unit
-                }
-            }
-        )
-
         lifecycleOwner.lifecycleScope.launch {
             viewModel.selectedSlotId
                 .flowWithLifecycle(lifecycleOwner.lifecycle, Lifecycle.State.STARTED)
                 .collect { slotId ->
-                    previewSurfaceCallback?.send(
+                    binding.sendMessage(
                         KeyguardQuickAffordancePreviewConstants.MESSAGE_ID_SLOT_SELECTED,
                         Bundle().apply {
                             putString(KeyguardQuickAffordancePreviewConstants.KEY_SLOT_ID, slotId)
@@ -179,24 +69,4 @@
                 }
         }
     }
-
-    private fun maybeLoadThumbnail(
-        activity: Activity,
-        wallpaperInfo: WallpaperInfo?,
-        surfaceCallback: WallpaperSurfaceCallback?,
-    ) {
-        if (wallpaperInfo == null || surfaceCallback == null) {
-            return
-        }
-
-        val imageView = surfaceCallback.homeImageWallpaper
-        val thumbAsset: Asset = BitmapCachingAsset(activity, wallpaperInfo.getThumbAsset(activity))
-        if (imageView != null && imageView.drawable == null) {
-            thumbAsset.loadPreviewImage(
-                activity,
-                imageView,
-                ResourceUtils.getColorAttr(activity, android.R.attr.colorSecondary)
-            )
-        }
-    }
 }
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 fa43edd..aa64d9b 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
@@ -21,6 +21,7 @@
 import android.content.Context
 import android.content.Intent
 import android.graphics.drawable.Drawable
+import android.os.Bundle
 import androidx.annotation.DrawableRes
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
@@ -28,7 +29,9 @@
 import com.android.customization.picker.quickaffordance.domain.interactor.KeyguardQuickAffordancePickerInteractor
 import com.android.systemui.shared.keyguard.shared.model.KeyguardQuickAffordanceSlots
 import com.android.systemui.shared.quickaffordance.data.content.KeyguardQuickAffordanceProviderContract as Contract
+import com.android.systemui.shared.quickaffordance.shared.model.KeyguardQuickAffordancePreviewConstants
 import com.android.wallpaper.R
+import com.android.wallpaper.picker.customization.ui.viewmodel.ScreenPreviewViewModel
 import com.android.wallpaper.picker.undo.domain.interactor.UndoInteractor
 import com.android.wallpaper.picker.undo.ui.viewmodel.UndoViewModel
 import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -51,6 +54,22 @@
 
     @SuppressLint("StaticFieldLeak") private val applicationContext = context.applicationContext
 
+    val preview: ScreenPreviewViewModel
+        get() =
+            ScreenPreviewViewModel(
+                contentProviderAuthorityProvider = {
+                    applicationContext.getString(R.string.lock_screen_preview_provider_authority)
+                },
+                initialExtrasProvider = {
+                    Bundle().apply {
+                        putString(
+                            KeyguardQuickAffordancePreviewConstants.KEY_INITIALLY_SELECTED_SLOT_ID,
+                            selectedSlotId.value,
+                        )
+                    }
+                },
+            )
+
     val undo: UndoViewModel =
         UndoViewModel(
             interactor = undoInteractor,