diff options
| author | Selim Cinek <cinek@google.com> | 2014-03-10 09:10:08 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2014-03-10 09:10:08 -0700 |
| commit | 121114abe4b17c9515ebdfb2953576f8245199d6 (patch) | |
| tree | 270c5f3f8c911ce021f2442568dd6ffa4cd5aaaf | |
| parent | f7fcaa89beb5e0d9d069f48cd44f515c09b69c5a (diff) | |
| parent | eb7bd8bbc3f2c1bb383e394fa255e5b86e03f1bd (diff) | |
| download | frameworks_base-121114abe4b17c9515ebdfb2953576f8245199d6.zip frameworks_base-121114abe4b17c9515ebdfb2953576f8245199d6.tar.gz frameworks_base-121114abe4b17c9515ebdfb2953576f8245199d6.tar.bz2 | |
am eb7bd8bb: Merge "Fixed a bug where the current wallpaper could be reset on an update"
* commit 'eb7bd8bbc3f2c1bb383e394fa255e5b86e03f1bd':
Fixed a bug where the current wallpaper could be reset on an update
| -rw-r--r-- | services/core/java/com/android/server/wallpaper/WallpaperManagerService.java | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 97ea52c..87953fe 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -230,7 +230,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { public void onServiceConnected(ComponentName name, IBinder service) { synchronized (mLock) { if (mWallpaper.connection == this) { - mWallpaper.lastDiedTime = SystemClock.uptimeMillis(); mService = IWallpaperService.Stub.asInterface(service); attachServiceLocked(this, mWallpaper); // XXX should probably do saveSettingsLocked() later @@ -250,11 +249,21 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { if (mWallpaper.connection == this) { Slog.w(TAG, "Wallpaper service gone: " + mWallpaper.wallpaperComponent); if (!mWallpaper.wallpaperUpdating - && (mWallpaper.lastDiedTime + MIN_WALLPAPER_CRASH_TIME) - > SystemClock.uptimeMillis() && mWallpaper.userId == mCurrentUserId) { - Slog.w(TAG, "Reverting to built-in wallpaper!"); - clearWallpaperLocked(true, mWallpaper.userId, null); + // There is a race condition which causes + // {@link #mWallpaper.wallpaperUpdating} to be false even if it is + // currently updating since the broadcast notifying us is async. + // This race is overcome by the general rule that we only reset the + // wallpaper if its service was shut down twice + // during {@link #MIN_WALLPAPER_CRASH_TIME} millis. + if (mWallpaper.lastDiedTime != 0 + && mWallpaper.lastDiedTime + MIN_WALLPAPER_CRASH_TIME + > SystemClock.uptimeMillis()) { + Slog.w(TAG, "Reverting to built-in wallpaper!"); + clearWallpaperLocked(true, mWallpaper.userId, null); + } else { + mWallpaper.lastDiedTime = SystemClock.uptimeMillis(); + } } } } @@ -938,7 +947,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub { } wallpaper.wallpaperComponent = componentName; wallpaper.connection = newConn; - wallpaper.lastDiedTime = SystemClock.uptimeMillis(); newConn.mReply = reply; try { if (wallpaper.userId == mCurrentUserId) { |
