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);