Fix error when setting 3rd party LWP with no WallpaperColors
Ensure getLowResBitmap is called from a background thread.
Bug: 213189715
Test: manual
Change-Id: Ie8a17928997ad75e5a4a785e9aa5819380b37c2d
(cherry picked from commit a979207d20a7a438ef2c87c43784ecc00e8d29f6)
(cherry picked from commit 60024feda2ecc3c31220a8df2fd02c995d7cbabd)
Merged-In:Ie8a17928997ad75e5a4a785e9aa5819380b37c2d
diff --git a/src/com/android/wallpaper/module/WallpaperSetter.java b/src/com/android/wallpaper/module/WallpaperSetter.java
index 428ff86..76fe96e 100644
--- a/src/com/android/wallpaper/module/WallpaperSetter.java
+++ b/src/com/android/wallpaper/module/WallpaperSetter.java
@@ -39,6 +39,8 @@
import java.io.IOException;
import java.util.Optional;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
/**
* Helper class used to set the current wallpaper. It handles showing the destination request dialog
@@ -59,6 +61,7 @@
private final WallpaperPreferences mPreferences;
private final boolean mTestingModeEnabled;
private final UserEventLogger mUserEventLogger;
+ private final ExecutorService mSingleThreadExecutor = Executors.newSingleThreadExecutor();
private ProgressDialog mProgressDialog;
private Optional<Integer> mCurrentScreenOrientation = Optional.empty();
@@ -208,10 +211,11 @@
if (destination == WallpaperPersister.DEST_BOTH) {
wallpaperManager.clear(FLAG_LOCK);
}
- mPreferences.storeLatestHomeWallpaper(wallpaper.getWallpaperId(), wallpaper,
- colors != null ? colors :
+ mSingleThreadExecutor.execute(() ->
+ mPreferences.storeLatestHomeWallpaper(wallpaper.getWallpaperId(), wallpaper,
+ colors != null ? colors :
WallpaperColors.fromBitmap(wallpaper.getThumbAsset(activity)
- .getLowResBitmap(activity)));
+ .getLowResBitmap(activity))));
onWallpaperApplied(wallpaper, activity);
if (callback != null) {
callback.onSuccess(wallpaper);