Merge cherrypicks of [16840243] into sc-v2-release.

Change-Id: I4eacdb4681a90b0cd7d17a24bb11d8efce59d76e
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);