Store recently applied wallpapers
Bug: 188248576
Test: manual
Change-Id: I19984c8919cd8b0b24856cd43284f0029d3e2950
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index bf86585..3b1fd91 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;
@@ -29,6 +30,7 @@
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask;
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 ec17767..854afc9 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 a7d1f5c..09d4c93 100755
--- a/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
+++ b/src/com/android/wallpaper/picker/individual/IndividualPickerFragment.java
@@ -941,7 +941,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);