diff options
author | Dianne Hackborn <hackbod@google.com> | 2012-10-05 11:06:53 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2012-10-05 11:06:53 -0700 |
commit | bce0cbb40d060f71a7de86d5668eb690e7073c19 (patch) | |
tree | 8065ba22c6966bdd1a0dc106a593c7b6c34cebce /core/java/android/service/wallpaper | |
parent | 8a2291952528303d284878468fe260ec41998db3 (diff) | |
download | frameworks_base-bce0cbb40d060f71a7de86d5668eb690e7073c19.zip frameworks_base-bce0cbb40d060f71a7de86d5668eb690e7073c19.tar.gz frameworks_base-bce0cbb40d060f71a7de86d5668eb690e7073c19.tar.bz2 |
Fix issue #7275122: Wall paper jank when switching users
Change-Id: I2677c7641a01b4afe89db29cb5fc1af876f9d078
Diffstat (limited to 'core/java/android/service/wallpaper')
-rw-r--r-- | core/java/android/service/wallpaper/WallpaperService.java | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 86bbc55..6d5705d 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -574,7 +574,8 @@ public abstract class WallpaperService extends Service { final boolean flagsChanged = mCurWindowFlags != mWindowFlags || mCurWindowPrivateFlags != mWindowPrivateFlags; if (forceRelayout || creating || surfaceCreating || formatChanged || sizeChanged - || typeChanged || flagsChanged || redrawNeeded) { + || typeChanged || flagsChanged || redrawNeeded + || !mIWallpaperEngine.mShownReported) { if (DEBUG) Log.v(TAG, "Changes: creating=" + creating + " format=" + formatChanged + " size=" + sizeChanged); @@ -739,6 +740,7 @@ public abstract class WallpaperService extends Service { if (redrawNeeded) { mSession.finishDrawing(mWindow); } + mIWallpaperEngine.reportShown(); } } catch (RemoteException ex) { } @@ -950,6 +952,7 @@ public abstract class WallpaperService extends Service { final IBinder mWindowToken; final int mWindowType; final boolean mIsPreview; + boolean mShownReported; int mReqWidth; int mReqHeight; @@ -1002,6 +1005,18 @@ public abstract class WallpaperService extends Service { } } + public void reportShown() { + if (!mShownReported) { + mShownReported = true; + try { + mConnection.engineShown(this); + } catch (RemoteException e) { + Log.w(TAG, "Wallpaper host disappeared", e); + return; + } + } + } + public void destroy() { Message msg = mCaller.obtainMessage(DO_DETACH); mCaller.sendMessage(msg); @@ -1020,12 +1035,6 @@ public abstract class WallpaperService extends Service { mEngine = engine; mActiveEngines.add(engine); engine.attach(this); - try { - mConnection.engineShown(this); - } catch (RemoteException e) { - Log.w(TAG, "Wallpaper host disappeared", e); - return; - } return; } case DO_DETACH: { |