Remove support for rotating live wallpaper
Bug:112267966
Change-Id: I3b75dcb462ca648d2a2dc7d7fe04d878cb8de4a6
diff --git a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
index e2c968c..27e4491 100755
--- a/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
+++ b/src/com/android/wallpaper/module/DefaultWallpaperPersister.java
@@ -19,7 +19,6 @@
import android.app.Activity;
import android.app.WallpaperManager;
import android.content.Context;
-import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
@@ -32,6 +31,8 @@
import android.view.Display;
import android.view.WindowManager;
+import androidx.annotation.Nullable;
+
import com.android.wallpaper.asset.Asset;
import com.android.wallpaper.asset.Asset.BitmapReceiver;
import com.android.wallpaper.asset.Asset.DimensionsReceiver;
@@ -42,24 +43,16 @@
import com.android.wallpaper.compat.WallpaperManagerCompat;
import com.android.wallpaper.model.WallpaperInfo;
import com.android.wallpaper.module.BitmapCropper.Callback;
-import com.android.wallpaper.module.RotatingWallpaperComponentChecker.RotatingWallpaperComponent;
import com.android.wallpaper.util.BitmapTransformer;
-import com.android.wallpaper.util.DiskBasedLogger;
-import com.android.wallpaper.util.FileMover;
import com.android.wallpaper.util.ScreenSizeCalculator;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
-import java.io.File;
import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
-import androidx.annotation.Nullable;
-
/**
* Concrete implementation of WallpaperPersister which actually sets wallpapers to the system via
* the WallpaperManager.
@@ -71,11 +64,9 @@
private final Context mAppContext; // The application's context.
// Context that accesses files in device protected storage
- private final Context mDeviceProtectedContext;
private final WallpaperManager mWallpaperManager;
private final WallpaperManagerCompat mWallpaperManagerCompat;
private final WallpaperPreferences mWallpaperPreferences;
- private final RotatingWallpaperComponentChecker mRotatingWallpaperComponentChecker;
private final WallpaperChangedNotifier mWallpaperChangedNotifier;
private WallpaperInfo mWallpaperInfoInPreview;
@@ -83,21 +74,19 @@
@SuppressLint("ServiceCast")
public DefaultWallpaperPersister(Context context) {
mAppContext = context.getApplicationContext();
- mDeviceProtectedContext = mAppContext.createDeviceProtectedStorageContext();
// Retrieve WallpaperManager using Context#getSystemService instead of
// WallpaperManager#getInstance so it can be mocked out in test.
Injector injector = InjectorProvider.getInjector();
mWallpaperManager = (WallpaperManager) context.getSystemService(Context.WALLPAPER_SERVICE);
mWallpaperManagerCompat = injector.getWallpaperManagerCompat(context);
mWallpaperPreferences = injector.getPreferences(context);
- mRotatingWallpaperComponentChecker = injector.getRotatingWallpaperComponentChecker();
mWallpaperChangedNotifier = WallpaperChangedNotifier.getInstance();
}
@Override
public void setIndividualWallpaper(final WallpaperInfo wallpaper, Asset asset,
- @Nullable Rect cropRect, float scale, @Destination final int destination,
- final SetWallpaperCallback callback) {
+ @Nullable Rect cropRect, float scale, @Destination final int destination,
+ final SetWallpaperCallback callback) {
// Set wallpaper without downscaling directly from an input stream if there's no crop rect
// specified by the caller and the asset is streamable.
if (cropRect == null && asset instanceof StreamableAsset) {
@@ -149,7 +138,7 @@
@Override
public void setIndividualWallpaperWithPosition(Activity activity, WallpaperInfo wallpaper,
- @WallpaperPosition int wallpaperPosition, SetWallpaperCallback callback) {
+ @WallpaperPosition int wallpaperPosition, SetWallpaperCallback callback) {
Display display = ((WindowManager) mAppContext.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
Point screenSize = ScreenSizeCalculator.getInstance().getScreenSize(display);
@@ -164,9 +153,10 @@
}
switch (wallpaperPosition) {
- // Crop out screen-sized center portion of the source image if it's larger than the screen
- // in both dimensions. Otherwise, decode the entire bitmap and fill the space around it to
- // fill a new screen-sized bitmap with plain black pixels.
+ // Crop out screen-sized center portion of the source image if it's larger
+ // than the screen
+ // in both dimensions. Otherwise, decode the entire bitmap and fill the space
+ // around it to fill a new screen-sized bitmap with plain black pixels.
case WALLPAPER_POSITION_CENTER:
setIndividualWallpaperWithCenterPosition(
wallpaper, asset, dimensions, screenSize, callback);
@@ -178,19 +168,22 @@
wallpaper, asset, dimensions, screenSize, callback);
break;
- // Decode full bitmap sized for screen and stretch it to fill the screen dimensions.
+ // Decode full bitmap sized for screen and stretch it to fill the screen
+ // dimensions.
case WALLPAPER_POSITION_STRETCH:
asset.decodeBitmap(screenSize.x, screenSize.y, new BitmapReceiver() {
@Override
public void onBitmapDecoded(@Nullable Bitmap bitmap) {
- setIndividualWallpaperStretch(wallpaper, bitmap, screenSize /* stretchSize */,
+ setIndividualWallpaperStretch(wallpaper, bitmap,
+ screenSize /* stretchSize */,
WallpaperPersister.DEST_BOTH, callback);
}
});
break;
default:
- Log.e(TAG, "Unsupported wallpaper position option specified: " + wallpaperPosition);
+ Log.e(TAG, "Unsupported wallpaper position option specified: "
+ + wallpaperPosition);
callback.onError(null);
}
}
@@ -208,7 +201,7 @@
* @param callback Callback used to notify original caller of wallpaper set operation result.
*/
private void setIndividualWallpaperWithCenterPosition(WallpaperInfo wallpaper, Asset asset,
- Point dimensions, Point screenSize, SetWallpaperCallback callback) {
+ Point dimensions, Point screenSize, SetWallpaperCallback callback) {
if (dimensions.x >= screenSize.x && dimensions.y >= screenSize.y) {
Rect cropRect = new Rect(
(dimensions.x - screenSize.x) / 2,
@@ -218,7 +211,8 @@
asset.decodeBitmapRegion(cropRect, screenSize.x, screenSize.y, new BitmapReceiver() {
@Override
public void onBitmapDecoded(@Nullable Bitmap bitmap) {
- setIndividualWallpaper(wallpaper, bitmap, WallpaperPersister.DEST_BOTH, callback);
+ setIndividualWallpaper(wallpaper, bitmap, WallpaperPersister.DEST_BOTH,
+ callback);
}
});
} else {
@@ -249,7 +243,7 @@
* @param callback Callback used to notify original caller of wallpaper set operation result.
*/
private void setIndividualWallpaperWithCenterCropPosition(WallpaperInfo wallpaper, Asset asset,
- Point dimensions, Point screenSize, SetWallpaperCallback callback) {
+ Point dimensions, Point screenSize, SetWallpaperCallback callback) {
float scale = Math.max((float) screenSize.x / dimensions.x,
(float) screenSize.y / dimensions.y);
@@ -276,7 +270,7 @@
* @param callback Called once the wallpaper was set or if an error occurred.
*/
private void setIndividualWallpaper(WallpaperInfo wallpaper, Bitmap croppedBitmap,
- @Destination int destination, SetWallpaperCallback callback) {
+ @Destination int destination, SetWallpaperCallback callback) {
SetWallpaperTask setWallpaperTask =
new SetWallpaperTask(wallpaper, croppedBitmap, destination, callback);
setWallpaperTask.execute();
@@ -287,15 +281,16 @@
*
* @param wallpaper Wallpaper model object.
* @param croppedBitmap Bitmap representing the individual wallpaper image.
- * @param fillSize Specifies the final bitmap size that should be set to WallpaperManager. This
- * final bitmap will show the visible area of the provided bitmap after applying a mask with
- * black background the source bitmap and centering. There may be black borders around the
- * original bitmap if it's smaller than the fillSize in one or both dimensions.
+ * @param fillSize Specifies the final bitmap size that should be set to WallpaperManager.
+ * This final bitmap will show the visible area of the provided bitmap
+ * after applying a mask with black background the source bitmap and
+ * centering. There may be black borders around the original bitmap if
+ * it's smaller than the fillSize in one or both dimensions.
* @param destination The destination - where to set the wallpaper to.
* @param callback Called once the wallpaper was set or if an error occurred.
*/
private void setIndividualWallpaperFill(WallpaperInfo wallpaper, Bitmap croppedBitmap,
- Point fillSize, @Destination int destination, SetWallpaperCallback callback) {
+ Point fillSize, @Destination int destination, SetWallpaperCallback callback) {
SetWallpaperTask setWallpaperTask =
new SetWallpaperTask(wallpaper, croppedBitmap, destination, callback);
setWallpaperTask.setFillSize(fillSize);
@@ -308,13 +303,14 @@
*
* @param wallpaper Wallpaper model object.
* @param croppedBitmap Bitmap representing the individual wallpaper image.
- * @param stretchSize Specifies the final size to which the the bitmap should be stretched prior
+ * @param stretchSize Specifies the final size to which the bitmap should be stretched
+ * prior
* to being set to the device.
* @param destination The destination - where to set the wallpaper to.
* @param callback Called once the wallpaper was set or if an error occurred.
*/
private void setIndividualWallpaperStretch(WallpaperInfo wallpaper, Bitmap croppedBitmap,
- Point stretchSize, @Destination int destination, SetWallpaperCallback callback) {
+ Point stretchSize, @Destination int destination, SetWallpaperCallback callback) {
SetWallpaperTask setWallpaperTask =
new SetWallpaperTask(wallpaper, croppedBitmap, destination, callback);
setWallpaperTask.setStretchSize(stretchSize);
@@ -330,7 +326,7 @@
* @param callback Called once the wallpaper was set or if an error occurred.
*/
private void setIndividualWallpaper(WallpaperInfo wallpaper, InputStream inputStream,
- @Destination int destination, SetWallpaperCallback callback) {
+ @Destination int destination, SetWallpaperCallback callback) {
SetWallpaperTask setWallpaperTask =
new SetWallpaperTask(wallpaper, inputStream, destination, callback);
setWallpaperTask.execute();
@@ -338,58 +334,31 @@
@Override
public boolean setWallpaperInRotation(Bitmap wallpaperBitmap, List<String> attributions,
- int actionLabelRes, int actionIconRes,
- String actionUrl, String collectionId) {
- @RotatingWallpaperComponent int rotatingWallpaperComponent = mRotatingWallpaperComponentChecker
- .getCurrentRotatingWallpaperComponent(mAppContext);
+ int actionLabelRes, int actionIconRes, String actionUrl, String collectionId) {
- switch (rotatingWallpaperComponent) {
- case RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_STATIC:
- return setWallpaperInRotationStatic(wallpaperBitmap, attributions, actionUrl,
- actionLabelRes, actionIconRes, collectionId);
- case RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_LIVE:
- return setWallpaperInRotationLive(wallpaperBitmap, attributions, actionUrl,
- actionLabelRes, actionIconRes, collectionId);
- default:
- Log.e(TAG, "Unknown rotating wallpaper component: " + rotatingWallpaperComponent);
- return false;
- }
+ return setWallpaperInRotationStatic(wallpaperBitmap, attributions, actionUrl,
+ actionLabelRes, actionIconRes, collectionId);
}
@Override
public int setWallpaperBitmapInNextRotation(Bitmap wallpaperBitmap) {
- @RotatingWallpaperComponent int rotatingWallpaperComponent = mRotatingWallpaperComponentChecker
- .getNextRotatingWallpaperComponent(mAppContext);
-
- switch (rotatingWallpaperComponent) {
- case RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_STATIC:
- return setWallpaperBitmapInRotationStatic(wallpaperBitmap);
- case RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_LIVE:
- boolean isSuccess = setWallpaperBitmapInRotationLive(wallpaperBitmap, true /* isPreview */);
- return isSuccess ? 1 : 0;
- default:
- Log.e(TAG, "Unknown rotating wallpaper component: " + rotatingWallpaperComponent);
- return 0;
- }
+ return setWallpaperBitmapInRotationStatic(wallpaperBitmap);
}
@Override
public boolean finalizeWallpaperForNextRotation(List<String> attributions, String actionUrl,
- int actionLabelRes, int actionIconRes,
- String collectionId, int wallpaperId) {
- @RotatingWallpaperComponent int rotatingWallpaperComponent =
- mRotatingWallpaperComponentChecker.getNextRotatingWallpaperComponent(mAppContext);
+ int actionLabelRes, int actionIconRes, String collectionId, int wallpaperId) {
return finalizeWallpaperForRotatingComponent(attributions, actionUrl, actionLabelRes,
- actionIconRes, collectionId, wallpaperId, rotatingWallpaperComponent);
+ actionIconRes, collectionId, wallpaperId);
}
/**
- * Sets wallpaper image and attributions when a static wallpaper is responsible for presenting the
+ * Sets wallpaper image and attributions when a static wallpaper is responsible for presenting
+ * the
* current "daily wallpaper".
*/
private boolean setWallpaperInRotationStatic(Bitmap wallpaperBitmap, List<String> attributions,
- String actionUrl, int actionLabelRes,
- int actionIconRes, String collectionId) {
+ String actionUrl, int actionLabelRes, int actionIconRes, String collectionId) {
final int wallpaperId = setWallpaperBitmapInRotationStatic(wallpaperBitmap);
if (wallpaperId == 0) {
@@ -397,8 +366,7 @@
}
return finalizeWallpaperForRotatingComponent(attributions, actionUrl, actionLabelRes,
- actionIconRes, collectionId, wallpaperId,
- RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_STATIC);
+ actionIconRes, collectionId, wallpaperId);
}
/**
@@ -413,83 +381,21 @@
int actionLabelRes,
int actionIconRes,
String collectionId,
- int wallpaperId,
- @RotatingWallpaperComponent int rotatingWallpaperComponent) {
+ int wallpaperId) {
mWallpaperPreferences.clearHomeWallpaperMetadata();
boolean isLockWallpaperSet = isSeparateLockScreenWallpaperSet();
- // Persist wallpaper IDs if the rotating wallpaper component is static and this device is
- // running Android N or later.
- if (rotatingWallpaperComponent
- == RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_STATIC) {
- if (BuildCompat.isAtLeastN()) {
- mWallpaperPreferences.setHomeWallpaperManagerId(wallpaperId);
+ // Persist wallpaper IDs if the rotating wallpaper component
+ mWallpaperPreferences.setHomeWallpaperManagerId(wallpaperId);
- // Only copy over wallpaper ID to lock wallpaper if no explicit lock wallpaper is set (so
- // metadata isn't lost if a user explicitly sets a home-only wallpaper).
- if (!isLockWallpaperSet) {
- mWallpaperPreferences.setLockWallpaperId(wallpaperId);
- }
- } else { // Pre-N but using static component
- // Compute bitmap hash code after setting the wallpaper because JPEG compression has likely
- // changed many pixels' color values. Forget the previously loaded wallpaper bitmap so that
- // WallpaperManager doesn't return the old wallpaper drawable.
- mWallpaperManager.forgetLoadedWallpaper();
- Bitmap bitmap = ((BitmapDrawable) mWallpaperManagerCompat.getDrawable()).getBitmap();
- long bitmapHash = BitmapUtils.generateHashCode(bitmap);
-
- mWallpaperPreferences.setHomeWallpaperHashCode(bitmapHash);
- }
- } else { // Live wallpaper rotating component.
-
- // Copy "preview" JPEG to "rotating" JPEG if the preview file exists.
- File rotatingWallpaper;
- try {
- rotatingWallpaper = moveToDeviceProtectedStorage(
- NoBackupImageWallpaper.PREVIEW_WALLPAPER_FILE_PATH,
- NoBackupImageWallpaper.ROTATING_WALLPAPER_FILE_PATH);
- } catch (Exception e) {
- DiskBasedLogger.e(
- TAG,
- "Unable to move preview to final file for rotating wallpaper " +
- "file (exception)" + e.toString(),
- mAppContext);
- return false;
- }
- if (rotatingWallpaper == null) {
- rotatingWallpaper = mDeviceProtectedContext.getFileStreamPath(
- NoBackupImageWallpaper.ROTATING_WALLPAPER_FILE_PATH);
- }
- try {
- FileInputStream fis = new FileInputStream(rotatingWallpaper.getAbsolutePath());
- Bitmap bitmap = BitmapFactory.decodeStream(fis);
- fis.close();
-
- if (bitmap != null) {
- long bitmapHash = BitmapUtils.generateHashCode(bitmap);
- mWallpaperPreferences.setHomeWallpaperHashCode(bitmapHash);
- } else {
- Log.e(TAG, "Unable to decode rotating wallpaper file");
- return false;
- }
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Rotating wallpaper file not found at path: "
- + rotatingWallpaper.getAbsolutePath());
- e.printStackTrace();
- return false;
- } catch (IOException e) {
- Log.e(TAG, "IOException when closing FileInputStream " + e);
- return false;
- }
-
- mWallpaperChangedNotifier.notifyWallpaperChanged();
-
- // Send a broadcast to {@link RotatingWallpaperChangedReceiver} in the :live_wallpaper
- // process so the currently displayed wallpaper updates.
- notifyLiveWallpaperBitmapChanged();
+ // Only copy over wallpaper ID to lock wallpaper if no explicit lock wallpaper is set
+ // (so metadata isn't lost if a user explicitly sets a home-only wallpaper).
+ if (!isLockWallpaperSet) {
+ mWallpaperPreferences.setLockWallpaperId(wallpaperId);
}
+
mWallpaperPreferences.setHomeWallpaperAttributions(attributions);
mWallpaperPreferences.setHomeWallpaperActionUrl(actionUrl);
mWallpaperPreferences.setHomeWallpaperActionLabelRes(actionLabelRes);
@@ -498,11 +404,9 @@
mWallpaperPreferences.setHomeWallpaperBaseImageUrl(null);
mWallpaperPreferences.setHomeWallpaperCollectionId(collectionId);
- // Set metadata to lock screen also when the rotating wallpaper is a static one so if user sets
- // a home screen-only wallpaper later, these attributions will still be available.
- if (rotatingWallpaperComponent
- == RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_STATIC
- && !isLockWallpaperSet) {
+ // Set metadata to lock screen also when the rotating wallpaper so if user sets a home
+ // screen-only wallpaper later, these attributions will still be available.
+ if (!isLockWallpaperSet) {
mWallpaperPreferences.setLockWallpaperAttributions(attributions);
mWallpaperPreferences.setLockWallpaperActionUrl(actionUrl);
mWallpaperPreferences.setLockWallpaperActionLabelRes(actionLabelRes);
@@ -514,26 +418,6 @@
}
/**
- * Sets wallpaper image and attributions when a live wallpaper is responsible for presenting the
- * current "daily wallpaper".
- */
- private boolean setWallpaperInRotationLive(Bitmap wallpaperBitmap, List<String> attributions,
- String actionUrl, int actionLabelRes,
- int actionIconRes, String collectionId) {
-
- synchronized (RotatingWallpaperLockProvider.getInstance()) {
- if (!setWallpaperBitmapInRotationLive(wallpaperBitmap, false /* isPreview */)) {
- return false;
- }
-
- return finalizeWallpaperForRotatingComponent(attributions, actionUrl, actionLabelRes,
- actionIconRes, collectionId,
- 0 /* wallpaperId */,
- RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_LIVE);
- }
- }
-
- /**
* Sets a wallpaper in rotation as a static wallpaper to the {@link WallpaperManager} with the
* option allowBackup=false to save user data.
*
@@ -553,84 +437,6 @@
}
/**
- * Sets a wallpaper in rotation as a live wallpaper. Writes wallpaper bitmap to a file in internal
- * storage and sends a broadcast to the live wallpaper notifying it that rotating wallpaper image
- * data changed.
- *
- * @return whether the set wallpaper operation was successful.
- */
- private boolean setWallpaperBitmapInRotationLive(Bitmap wallpaperBitmap, boolean isPreview) {
- File pendingFile;
- try {
- pendingFile = File.createTempFile("rotating_pending", ".jpg", mAppContext.getFilesDir());
- } catch (IOException e) {
- Log.e(TAG, "Unable to create temp file for rotating wallpaper");
- return false;
- }
-
- FileOutputStream fos;
- try {
- fos = mAppContext.openFileOutput(pendingFile.getName(), Context.MODE_PRIVATE);
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Unable to open file output stream for pending rotating wallpaper file");
- return false;
- }
-
- boolean compressedSuccessfully =
- wallpaperBitmap.compress(CompressFormat.JPEG, DEFAULT_COMPRESS_QUALITY, fos);
-
- // Close the file stream.
- try {
- fos.flush();
- fos.close();
- } catch (IOException e) {
- Log.e(TAG, "Unable to close FileOutputStream for pending rotating wallpaper file"
- + " (compress succeeded");
- return false;
- }
-
- if (compressedSuccessfully) {
- // Compressing/writing to disk succeeded, so move the pending file to the final location.
- try {
- if (isPreview) {
- if (!pendingFile.renameTo(mAppContext.getFileStreamPath(
- NoBackupImageWallpaper.PREVIEW_WALLPAPER_FILE_PATH))) {
- return false;
- }
- } else {
- moveToDeviceProtectedStorage(pendingFile.getName(),
- NoBackupImageWallpaper.ROTATING_WALLPAPER_FILE_PATH);
- }
- } catch (Exception e) {
- Log.e(TAG, "Unable to rename pending to final file for rotating wallpaper file"
- + " (exception)" + e.toString());
- return false;
- }
- } else {
- Log.e(TAG, "Unable to compress the wallpaper bitmap");
-
- // Delete the pending file since compressing/writing the image to disk failed.
- try {
- pendingFile.delete();
- } catch (SecurityException e) {
- Log.e(TAG, "Unable to delete pending rotating wallpaper file");
- return false;
- }
-
- return false;
- }
-
- mWallpaperChangedNotifier.notifyWallpaperChanged();
-
- // Send a broadcast to {@link RotatingWallpaperChangedReceiver} in the :live_wallpaper
- // process so the currently displayed wallpaper updates if the live wallpaper is set to the
- // device.
- notifyLiveWallpaperBitmapChanged();
-
- return true;
- }
-
- /**
* Sets a wallpaper bitmap to the {@link WallpaperManagerCompat}.
*
* @return an integer wallpaper ID. This is an actual wallpaper ID on N and later versions of
@@ -638,7 +444,7 @@
* operation was successful and zero if the operation encountered an error.
*/
private int setBitmapToWallpaperManagerCompat(Bitmap wallpaperBitmap, boolean allowBackup,
- int whichWallpaper) {
+ int whichWallpaper) {
ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
if (wallpaperBitmap.compress(CompressFormat.JPEG, DEFAULT_COMPRESS_QUALITY, tmpOut)) {
try {
@@ -668,9 +474,10 @@
}
private int setStreamToWallpaperManagerCompat(InputStream inputStream, boolean allowBackup,
- int whichWallpaper) {
+ int whichWallpaper) {
try {
- return mWallpaperManagerCompat.setStream(inputStream, null, allowBackup, whichWallpaper);
+ return mWallpaperManagerCompat.setStream(inputStream, null, allowBackup,
+ whichWallpaper);
} catch (IOException e) {
return 0;
}
@@ -688,7 +495,8 @@
mWallpaperInfoInPreview.getWallpaperComponent();
// If there is no live wallpaper set on the WallpaperManager or it doesn't match the
- // WallpaperInfo which was last previewed, then do nothing and nullify last previewed wallpaper.
+ // WallpaperInfo which was last previewed, then do nothing and nullify last previewed
+ // wallpaper.
if (currentWallpaperComponent == null || previewedWallpaperComponent == null
|| !currentWallpaperComponent.getPackageName()
.equals(previewedWallpaperComponent.getPackageName())) {
@@ -729,9 +537,9 @@
mWallpaperInfoInPreview.getWallpaperComponent();
mWallpaperPreferences.clearHomeWallpaperMetadata();
- // NOTE: We explicitly do not also clear the lock wallpaper metadata. Since the user may have
- // set the live wallpaper on the home screen only, we leave the lock wallpaper metadata intact.
- // If the user has set the live wallpaper for both home and lock screens, then the
+ // NOTE: We explicitly do not also clear the lock wallpaper metadata. Since the user may
+ // have set the live wallpaper on the home screen only, we leave the lock wallpaper metadata
+ // intact. If the user has set the live wallpaper for both home and lock screens, then the
// WallpaperRefresher will pick up on that and update the preferences later.
mWallpaperPreferences
.setHomeWallpaperAttributions(mWallpaperInfoInPreview.getAttributions(mAppContext));
@@ -744,36 +552,6 @@
mWallpaperPreferences.clearDailyRotations();
}
- /**
- * Notifies the :live_wallpaper process that the contents of the rotating live wallpaper bitmap
- * changed.
- */
- private void notifyLiveWallpaperBitmapChanged() {
- Intent intent = new Intent(mAppContext.getPackageName()
- + NoBackupImageWallpaper.ACTION_ROTATING_WALLPAPER_CHANGED);
- // Handled by a runtime-registered receiver in NoBackupImageWallpaper.
- intent.setPackage(mAppContext.getPackageName());
- mAppContext.sendBroadcast(intent);
- }
-
- /**
- * Moves a file from the app's files directory to the device content protected storage
- * directory.
- * @param srcFileName Name of the source file (just the name, no path). It's expected to be
- * located in {@link Context#getFilesDir()} for {@link #mAppContext}
- * @param dstFileName Name of the destination file (just the name, no path), which will be
- * located in {@link Context#getFilesDir()}
- * for {@link #mDeviceProtectedContext}
- * @return a {@link File} corresponding to the moved file in its new location, or null if
- * nothing was moved (because srcFileName didn't exist).
- */
- @Nullable
- private File moveToDeviceProtectedStorage(String srcFileName, String dstFileName)
- throws IOException {
- return FileMover.moveFileBetweenContexts(mAppContext, srcFileName, mDeviceProtectedContext,
- dstFileName);
- }
-
private class SetWallpaperTask extends AsyncTask<Void, Void, Boolean> {
private final WallpaperInfo mWallpaper;
@@ -793,7 +571,7 @@
private Point mStretchSize;
SetWallpaperTask(WallpaperInfo wallpaper, Bitmap bitmap, @Destination int destination,
- WallpaperPersister.SetWallpaperCallback callback) {
+ WallpaperPersister.SetWallpaperCallback callback) {
super();
mWallpaper = wallpaper;
mBitmap = bitmap;
@@ -806,7 +584,7 @@
* will close the InputStream once it is done with it.
*/
SetWallpaperTask(WallpaperInfo wallpaper, InputStream stream,
- @Destination int destination, WallpaperPersister.SetWallpaperCallback callback) {
+ @Destination int destination, WallpaperPersister.SetWallpaperCallback callback) {
mWallpaper = wallpaper;
mInputStream = stream;
mDestination = destination;
@@ -815,16 +593,18 @@
void setFillSize(Point fillSize) {
if (mStretchSize != null) {
- throw new IllegalArgumentException("Can't pass a fill size option if a stretch size is "
- + "already set.");
+ throw new IllegalArgumentException(
+ "Can't pass a fill size option if a stretch size is "
+ + "already set.");
}
mFillSize = fillSize;
}
void setStretchSize(Point stretchSize) {
if (mFillSize != null) {
- throw new IllegalArgumentException("Can't pass a stretch size option if a fill size is "
- + "already set.");
+ throw new IllegalArgumentException(
+ "Can't pass a stretch size option if a fill size is "
+ + "already set.");
}
mStretchSize = stretchSize;
}
@@ -841,16 +621,9 @@
| WallpaperManagerCompat.FLAG_LOCK;
}
- // NOTE: The rotating wallpaper component must be determined here, _before_ actually setting
- // the bitmap/stream on WallpaperManagerCompat, to ensure that the
- // RotatingWallpaperComponentChecker is doing its check while rotation is still enabled.
- // E.g., if "live wallpaper" is the component, then it needs to check while live wallpaper is
- // still set as the active wallpaper on the device. Otherwise, the checker would see a static
- // wallpaper is currently set and it would return the wrong value.
- @RotatingWallpaperComponent int currentRotatingWallpaperComponent =
- mRotatingWallpaperComponentChecker.getCurrentRotatingWallpaperComponent(mAppContext);
- boolean wasLockWallpaperSet = LockWallpaperStatusChecker.isLockWallpaperSet(mAppContext);
+ boolean wasLockWallpaperSet = LockWallpaperStatusChecker.isLockWallpaperSet(
+ mAppContext);
boolean allowBackup = mWallpaper.getBackupPermission() == WallpaperInfo.BACKUP_ALLOWED;
final int wallpaperId;
@@ -860,15 +633,20 @@
mBitmap = BitmapTransformer.applyFillTransformation(mBitmap, mFillSize);
}
if (mStretchSize != null) {
- mBitmap = Bitmap.createScaledBitmap(mBitmap, mStretchSize.x, mStretchSize.y, true);
+ mBitmap = Bitmap.createScaledBitmap(mBitmap, mStretchSize.x, mStretchSize.y,
+ true);
}
- wallpaperId = setBitmapToWallpaperManagerCompat(mBitmap, allowBackup, whichWallpaper);
+ wallpaperId = setBitmapToWallpaperManagerCompat(mBitmap, allowBackup,
+ whichWallpaper);
} else if (mInputStream != null) {
- wallpaperId = setStreamToWallpaperManagerCompat(mInputStream, allowBackup, whichWallpaper);
+ wallpaperId = setStreamToWallpaperManagerCompat(mInputStream, allowBackup,
+ whichWallpaper);
} else {
- Log.e(TAG, "Both the wallpaper bitmap and input stream are null so we're unable to set any "
- + "kind of wallpaper here.");
+ Log.e(TAG,
+ "Both the wallpaper bitmap and input stream are null so we're unable to "
+ + "set any "
+ + "kind of wallpaper here.");
wallpaperId = 0;
}
@@ -878,7 +656,7 @@
== WallpaperPreferences.PRESENTATION_MODE_ROTATING
&& !wasLockWallpaperSet
&& BuildCompat.isAtLeastN()) {
- copyRotatingWallpaperToLock(currentRotatingWallpaperComponent);
+ copyRotatingWallpaperToLock();
}
setImageWallpaperMetadata(mDestination, wallpaperId);
return true;
@@ -914,12 +692,8 @@
* Used to accommodate the case where a user had gone from a home+lock daily rotation to
* selecting a static wallpaper on home-only. The image and metadata that was previously
* rotating is now copied to the lock screen.
- *
- * @param currentRotatingWallpaperComponent The component in which rotating wallpapers were
- * presented.
*/
- private void copyRotatingWallpaperToLock(
- @RotatingWallpaperComponent int currentRotatingWallpaperComponent) {
+ private void copyRotatingWallpaperToLock() {
mWallpaperPreferences.setLockWallpaperAttributions(
mWallpaperPreferences.getHomeWallpaperAttributions());
@@ -935,41 +709,28 @@
// Set the lock wallpaper ID to what Android set it to, following its having
// copied the system wallpaper over to the lock screen when we changed from
// "both" to distinct system and lock screen wallpapers.
- if (currentRotatingWallpaperComponent
- == RotatingWallpaperComponentChecker.ROTATING_WALLPAPER_COMPONENT_STATIC) {
- mWallpaperPreferences.setLockWallpaperId(
- mWallpaperManagerCompat.getWallpaperId(WallpaperManagerCompat.FLAG_LOCK));
- } else {
- try {
- FileInputStream fileInputStream = mDeviceProtectedContext.openFileInput(
- NoBackupImageWallpaper.ROTATING_WALLPAPER_FILE_PATH);
- int lockWallpaperId = setStreamToWallpaperManagerCompat(
- fileInputStream, false /* allowBackup */, WallpaperManagerCompat.FLAG_LOCK);
- fileInputStream.close();
- mWallpaperPreferences.setLockWallpaperId(lockWallpaperId);
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Couldn't copy over previously rotating wallpaper to lock screen.");
- } catch (IOException e) {
- Log.e(TAG, "IOException when closing the file input stream " + e);
- }
- }
+ mWallpaperPreferences.setLockWallpaperId(
+ mWallpaperManagerCompat.getWallpaperId(WallpaperManagerCompat.FLAG_LOCK));
+
}
/**
- * Sets the image wallpaper's metadata on SharedPreferences. This method is called after the set
- * wallpaper operation is successful.
+ * Sets the image wallpaper's metadata on SharedPreferences. This method is called after the
+ * set wallpaper operation is successful.
*
- * @param destination Which destination of wallpaper the metadata corresponds to (home screen,
- * lock screen, or both).
- * @param wallpaperId The ID of the static wallpaper returned by WallpaperManager, which on N
- * and later versions of Android uniquely identifies a wallpaper image.
+ * @param destination Which destination of wallpaper the metadata corresponds to (home
+ * screen, lock screen, or both).
+ * @param wallpaperId The ID of the static wallpaper returned by WallpaperManager, which
+ * on N and later versions of Android uniquely identifies a wallpaper
+ * image.
*/
private void setImageWallpaperMetadata(@Destination int destination, int wallpaperId) {
if (destination == DEST_HOME_SCREEN || destination == DEST_BOTH) {
mWallpaperPreferences.clearHomeWallpaperMetadata();
setImageWallpaperHomeMetadata(wallpaperId);
- // Reset presentation mode to STATIC if an individual wallpaper is set to the home screen
+ // Reset presentation mode to STATIC if an individual wallpaper is set to the
+ // home screen
// because rotation always affects at least the home screen.
mWallpaperPreferences.setWallpaperPresentationMode(
WallpaperPreferences.PRESENTATION_MODE_STATIC);
@@ -988,10 +749,11 @@
mWallpaperPreferences.setHomeWallpaperManagerId(homeWallpaperId);
}
- // Compute bitmap hash code after setting the wallpaper because JPEG compression has likely
- // changed many pixels' color values. Forget the previously loaded wallpaper bitmap so that
- // WallpaperManager doesn't return the old wallpaper drawable. Do this on N+ devices in
- // addition to saving the wallpaper ID for the purpose of backup & restore.
+ // Compute bitmap hash code after setting the wallpaper because JPEG compression has
+ // likely changed many pixels' color values. Forget the previously loaded wallpaper
+ // bitmap so that WallpaperManager doesn't return the old wallpaper drawable. Do this
+ // on N+ devices in addition to saving the wallpaper ID for the purpose of backup &
+ // restore.
mWallpaperManager.forgetLoadedWallpaper();
mBitmap = ((BitmapDrawable) mWallpaperManagerCompat.getDrawable()).getBitmap();
long bitmapHash = BitmapUtils.generateHashCode(mBitmap);
@@ -1023,9 +785,10 @@
mWallpaperPreferences.setLockWallpaperCollectionId(
mWallpaper.getCollectionId(mAppContext));
- // Save the lock wallpaper image's hash code as well for the sake of backup & restore because
- // WallpaperManager-generated IDs are specific to a physical device and cannot be used to
- // identify a wallpaper image on another device after restore is complete.
+ // Save the lock wallpaper image's hash code as well for the sake of backup & restore
+ // because WallpaperManager-generated IDs are specific to a physical device and
+ // cannot be used to identify a wallpaper image on another device after restore is
+ // complete.
saveLockWallpaperHashCode();
}
@@ -1051,7 +814,9 @@
try {
fileStream.close();
} catch (IOException e) {
- Log.e(TAG, "IO exception when closing the input stream for the lock screen WP.");
+ Log.e(TAG,
+ "IO exception when closing the input stream for the lock screen "
+ + "WP.");
}
}
}