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,