Moves common screen preview logic to WPP2 (2/2).
To enable reuse of the newer preview logic to render both the home
screen and the lock screen previews, we're extracting the shared logic
from KeyguardQuickAffordancePreviewBinder in ThemePicker and moving it
down into WallpaperPicker2.
Bug: 263507648
Test: Ran wallpaper picker quick affordances, they still work.
Change-Id: I281072b76669a05245915b0550a418af7ef3cd05
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,