OSDN Git Service

Fixing bugs with peeking a wallpaper.
authorVadim Tryshev <vadimt@google.com>
Mon, 7 Mar 2016 20:48:51 +0000 (12:48 -0800)
committerVadim Tryshev <vadimt@google.com>
Wed, 9 Mar 2016 20:36:01 +0000 (20:36 +0000)
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

index 6bc03f7..2d06dcc 100644 (file)
@@ -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 (mCachedWallpaper != null) {
+                    return mCachedWallpaper;
+                }
                 if (returnDefault) {
-                    if (mWallpaper == null) {
+                    if (mDefaultWallpaper == null) {
                         mDefaultWallpaper = getDefaultWallpaperLocked(context);
-                        return mDefaultWallpaper;
-                    } else {
-                        mDefaultWallpaper = null;
                     }
+                    return mDefaultWallpaper;
                 }
-                return mWallpaper;
+                return null;
             }
         }
 
         public void forgetLoadedWallpaper() {
             synchronized (this) {
-                mWallpaper = null;
+                mCachedWallpaper = null;
+                mCachedWallpaperUserId = 0;
                 mDefaultWallpaper = null;
             }
         }