From 93a914a77f5bee56da5a7462217bed856884b5d9 Mon Sep 17 00:00:00 2001 From: Vadim Tryshev Date: Mon, 7 Mar 2016 12:48:51 -0800 Subject: [PATCH] Fixing bugs with peeking a wallpaper. 1. Cached wallpaper from one user could be retrieved for another user. Fixed with adding a mCachedWallpaperUserId member. 2. mDefault wallpaper was returned too early. Moved down so that default wallpaper could be returned only after making sure that system wallpaper is unspecified. Bug: 25185253 Change-Id: Ie620621e5c4039d5d680211150aa5327f321f11a --- core/java/android/app/WallpaperManager.java | 37 +++++++++++---------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 6bc03f7da77be..2d06dcca35f62 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -49,7 +49,6 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; -import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; import android.view.WindowManagerGlobal; @@ -263,7 +262,8 @@ public class WallpaperManager { static class Globals extends IWallpaperManagerCallback.Stub { private IWallpaperManager mService; - private Bitmap mWallpaper; + private Bitmap mCachedWallpaper; + private int mCachedWallpaperUserId; private Bitmap mDefaultWallpaper; Globals(Looper looper) { @@ -296,33 +296,34 @@ public class WallpaperManager { throw e.rethrowFromSystemServer(); } } - if (mWallpaper != null) { - return mWallpaper; + if (mCachedWallpaper != null && mCachedWallpaperUserId == userId) { + return mCachedWallpaper; } - if (mDefaultWallpaper != null) { - return mDefaultWallpaper; - } - mWallpaper = null; + mCachedWallpaper = null; + mCachedWallpaperUserId = 0; try { - mWallpaper = getCurrentWallpaperLocked(userId); + mCachedWallpaper = getCurrentWallpaperLocked(userId); + mCachedWallpaperUserId = userId; } catch (OutOfMemoryError e) { Log.w(TAG, "No memory load current wallpaper", e); } - if (returnDefault) { - if (mWallpaper == null) { - mDefaultWallpaper = getDefaultWallpaperLocked(context); - return mDefaultWallpaper; - } else { - mDefaultWallpaper = null; - } + if (mCachedWallpaper != null) { + return mCachedWallpaper; } - return mWallpaper; + if (returnDefault) { + if (mDefaultWallpaper == null) { + mDefaultWallpaper = getDefaultWallpaperLocked(context); + } + return mDefaultWallpaper; + } + return null; } } public void forgetLoadedWallpaper() { synchronized (this) { - mWallpaper = null; + mCachedWallpaper = null; + mCachedWallpaperUserId = 0; mDefaultWallpaper = null; } }