Use check mark to indicate the applied wallpaper am: 369e082d73 am: c22dbd7eec

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

Change-Id: I69db8942ebaafc5ebf309d6eb42fbcd9ff01c7ca
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index 52b86aa..b837e10 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -17,6 +17,7 @@
 
 import android.annotation.SuppressLint;
 import android.app.Activity;
+import android.app.WallpaperColors;
 import android.app.WallpaperManager;
 import android.content.Context;
 import android.content.res.Resources;
@@ -30,6 +31,7 @@
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.ParcelFileDescriptor;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.Display;
 import android.view.WindowManager;
@@ -797,6 +799,7 @@
             mWallpaperManager.forgetLoadedWallpaper();
             mBitmap = ((BitmapDrawable) mWallpaperManagerCompat.getDrawable()).getBitmap();
             long bitmapHash = BitmapUtils.generateHashCode(mBitmap);
+            WallpaperColors colors = WallpaperColors.fromBitmap(mBitmap);
 
             mWallpaperPreferences.setHomeWallpaperHashCode(bitmapHash);
 
@@ -811,6 +814,10 @@
             mWallpaperPreferences.setHomeWallpaperCollectionId(
                     mWallpaper.getCollectionId(mAppContext));
             mWallpaperPreferences.setHomeWallpaperRemoteId(mWallpaper.getWallpaperId());
+            mWallpaperPreferences.storeLatestHomeWallpaper(
+                    TextUtils.isEmpty(mWallpaper.getWallpaperId()) ? String.valueOf(bitmapHash)
+                            : mWallpaper.getWallpaperId(),
+                    mWallpaper, mBitmap, colors);
         }
 
         private void setImageWallpaperLockMetadata(int lockWallpaperId) {
diff --git a/src/com/android/wallpaper/module/WallpaperPreferences.java b/src/com/android/wallpaper/module/WallpaperPreferences.java
index 2a0fc39..e1dd60d 100755
--- a/src/com/android/wallpaper/module/WallpaperPreferences.java
+++ b/src/com/android/wallpaper/module/WallpaperPreferences.java
@@ -16,11 +16,16 @@
 package com.android.wallpaper.module;
 
 import android.annotation.TargetApi;
+import android.app.WallpaperColors;
+import android.graphics.Bitmap;
 import android.os.Build;
 
 import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.android.wallpaper.model.LiveWallpaperInfo;
+import com.android.wallpaper.model.WallpaperInfo;
 import com.android.wallpaper.module.WallpaperPersister.Destination;
 
 import java.util.List;
@@ -512,4 +517,27 @@
             DAILY_WALLPAPER_UPDATE_PENDING})
     @interface PendingDailyWallpaperUpdateStatus {
     }
+
+    /**
+     * Stores the given live wallpaper in the recent wallpapers list
+     * @param wallpaperId unique identifier for this wallpaper
+     * @param wallpaper {@link LiveWallpaperInfo} for the applied wallpaper
+     * @param colors WallpaperColors to be used as placeholder for quickswitching
+     */
+    default void storeLatestHomeWallpaper(String wallpaperId,
+            @NonNull LiveWallpaperInfo wallpaper, WallpaperColors colors) {
+        // Do nothing in the default case.
+    }
+
+    /**
+     * Stores the given static wallpaper data in the recent wallpapers list.
+     * @param wallpaperId unique identifier for this wallpaper
+     * @param wallpaper {@link WallpaperInfo} for the applied wallpaper
+     * @param croppedWallpaperBitmap wallpaper bitmap exactly as applied to WallaperManager
+     * @param colors WallpaperColors to be used as placeholder for quickswitching
+     */
+    default void storeLatestHomeWallpaper(String wallpaperId, @NonNull WallpaperInfo wallpaper,
+            @NonNull Bitmap croppedWallpaperBitmap, WallpaperColors colors) {
+        // Do nothing in the default case.
+    }
 }
diff --git a/src/com/android/wallpaper/module/WallpaperSetter.java b/src/com/android/wallpaper/module/WallpaperSetter.java
index 9d5bb96..bd4da96 100644
--- a/src/com/android/wallpaper/module/WallpaperSetter.java
+++ b/src/com/android/wallpaper/module/WallpaperSetter.java
@@ -2,6 +2,7 @@
 
 import android.app.Activity;
 import android.app.ProgressDialog;
+import android.app.WallpaperColors;
 import android.app.WallpaperManager;
 import android.content.pm.ActivityInfo;
 import android.graphics.Point;
@@ -96,7 +97,7 @@
                     dimensions, visibleRawWallpaperRect, wallpaperScale);
 
             setCurrentWallpaper(containerActivity, wallpaper, wallpaperAsset, destination,
-                    wallpaperScale, cropRect, callback);
+                    wallpaperScale, cropRect, null, callback);
         });
     }
 
@@ -116,10 +117,10 @@
     public void setCurrentWallpaper(Activity containerActivity, WallpaperInfo wallpaper,
             @Nullable Asset wallpaperAsset, @Destination final int destination,
             float wallpaperScale, @Nullable Rect cropRect,
-            @Nullable SetWallpaperCallback callback) {
+            @Nullable WallpaperColors wallpaperColors, @Nullable SetWallpaperCallback callback) {
         if (wallpaper instanceof LiveWallpaperInfo) {
             setCurrentLiveWallpaper(containerActivity, (LiveWallpaperInfo) wallpaper, destination,
-                    callback);
+                    wallpaperColors, callback);
             return;
         }
         mPreferences.setPendingWallpaperSetStatus(
@@ -183,7 +184,8 @@
     }
 
     public void setCurrentLiveWallpaper(Activity activity, LiveWallpaperInfo wallpaper,
-            @Destination final int destination, @Nullable SetWallpaperCallback callback) {
+            @Destination final int destination, @Nullable WallpaperColors colors,
+            @Nullable SetWallpaperCallback callback) {
         try {
             // Save current screen rotation so we can temporarily disable rotation while setting the
             // wallpaper and restore after setting the wallpaper finishes.
@@ -203,6 +205,10 @@
             if (destination == WallpaperPersister.DEST_BOTH) {
                 wallpaperManager.clear(WallpaperManager.FLAG_LOCK);
             }
+            mPreferences.storeLatestHomeWallpaper(wallpaper.getWallpaperId(), wallpaper,
+                    colors != null ? colors :
+                            WallpaperColors.fromBitmap(wallpaper.getThumbAsset(activity)
+                                    .getLowResBitmap(activity)));
             onWallpaperApplied(wallpaper, activity);
             if (callback != null) {
                 callback.onSuccess(wallpaper);
@@ -224,7 +230,6 @@
                 WallpaperPreferences.WALLPAPER_SET_NOT_PENDING);
         mUserEventLogger.logWallpaperSetResult(
                 UserEventLogger.WALLPAPER_SET_RESULT_SUCCESS);
-
         cleanUp();
         restoreScreenOrientationIfNeeded(containerActivity);
     }
diff --git a/src/com/android/wallpaper/picker/ImagePreviewFragment.java b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
index c41d394..21d5979 100755
--- a/src/com/android/wallpaper/picker/ImagePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/ImagePreviewFragment.java
@@ -111,6 +111,7 @@
     private TouchForwardingLayout mTouchForwardingLayout;
     private ConstraintLayout mContainer;
     private SurfaceView mWallpaperSurface;
+    private WallpaperColors mWallpaperColors;
 
     protected SurfaceView mWorkspaceSurface;
     protected WorkspaceSurfaceHolderCallback mWorkspaceSurfaceCallback;
@@ -188,6 +189,7 @@
         // Make it enabled since the buttons are disabled while wallpaper is moving.
         mBottomActionBar.enableActionButtonsWithBottomSheet(true);
 
+        mWallpaperColors = colors;
         mLockScreenPreviewer.setColor(colors);
 
         mFullScreenAnimation.setFullScreenTextColor(
@@ -480,7 +482,7 @@
     protected void setCurrentWallpaper(@Destination int destination) {
         mWallpaperSetter.setCurrentWallpaper(getActivity(), mWallpaper, mWallpaperAsset,
                 destination, mFullResImageView.getScale(), calculateCropRect(getContext()),
-                new SetWallpaperCallback() {
+                mWallpaperColors, new SetWallpaperCallback() {
                     @Override
                     public void onSuccess(WallpaperInfo wallpaperInfo) {
                         finishActivity(/* success= */ true);
diff --git a/src/com/android/wallpaper/picker/LivePreviewFragment.java b/src/com/android/wallpaper/picker/LivePreviewFragment.java
index bb64817..985cdc7 100644
--- a/src/com/android/wallpaper/picker/LivePreviewFragment.java
+++ b/src/com/android/wallpaper/picker/LivePreviewFragment.java
@@ -118,6 +118,7 @@
     private TouchForwardingLayout mTouchForwardingLayout;
     private SurfaceView mWallpaperSurface;
     private Future<Integer> mPlaceholderColorFuture;
+    private WallpaperColors mWallpaperColors;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -326,7 +327,7 @@
             WallpaperColorsLoader.getWallpaperColors(
                     activity,
                     homeWallpaper.getThumbAsset(activity),
-                    mLockScreenPreviewer::setColor);
+                    colors -> onWallpaperColorsChanged(colors, 0));
         }
         if (mWallpaperConnection != null && !mWallpaperConnection.connect()) {
             mWallpaperConnection = null;
@@ -414,6 +415,7 @@
 
     @Override
     public void onWallpaperColorsChanged(WallpaperColors colors, int displayId) {
+        mWallpaperColors = colors;
         mLockScreenPreviewer.setColor(colors);
 
         mFullScreenAnimation.setFullScreenTextColor(
@@ -444,7 +446,8 @@
     @Override
     protected void setCurrentWallpaper(int destination) {
         mWallpaperSetter.setCurrentWallpaper(getActivity(), mWallpaper, null,
-                destination, 0, null, new SetWallpaperCallback() {
+                destination, 0, null, mWallpaperColors,
+                new SetWallpaperCallback() {
                     @Override
                     public void onSuccess(com.android.wallpaper.model.WallpaperInfo wallpaperInfo) {
                         finishActivity(/* success= */ true);
diff --git a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
index bb7a1d0..4436304 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
@@ -944,7 +944,7 @@
         mWallpaperPersister.setWallpaperInfoInPreview(mSelectedWallpaperInfo);
         if (mSelectedWallpaperInfo instanceof LiveWallpaperInfo) {
             mWallpaperSetter.setCurrentWallpaper(getActivity(), mSelectedWallpaperInfo, null,
-                    destination, 0, null, mSetWallpaperCallback);
+                    destination, 0, null, null, mSetWallpaperCallback);
         } else {
             mWallpaperSetter.setCurrentWallpaper(
                     getActivity(), mSelectedWallpaperInfo, destination, mSetWallpaperCallback);