diff options
author | Dianne Hackborn <hackbod@google.com> | 2009-11-20 16:43:20 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2009-11-20 16:43:20 -0800 |
commit | dbf3d3acc18f86a671096f1626d80d055bc36e11 (patch) | |
tree | 20f3c4cb91e17ca0ab66e48280edf418cf440123 | |
parent | f29006000cfbcf7732df5d5432ab5ff8a2dbf691 (diff) | |
parent | af1f42be96a6ffa7a9b63e199e1614281ea3282d (diff) | |
download | frameworks_base-dbf3d3acc18f86a671096f1626d80d055bc36e11.zip frameworks_base-dbf3d3acc18f86a671096f1626d80d055bc36e11.tar.gz frameworks_base-dbf3d3acc18f86a671096f1626d80d055bc36e11.tar.bz2 |
am af1f42be: Fix issue #2271668: Live Wallpaper Force-Close when changing from live wallpaper to picasa wallpaper
Merge commit 'af1f42be96a6ffa7a9b63e199e1614281ea3282d' into eclair-mr2
* commit 'af1f42be96a6ffa7a9b63e199e1614281ea3282d':
Fix issue #2271668: Live Wallpaper Force-Close when changing from live wallpaper to picasa wallpaper
-rw-r--r-- | core/java/android/service/wallpaper/WallpaperService.java | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index ccb8f1c..45719e4 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -44,6 +44,8 @@ import android.view.ViewRoot; import android.view.WindowManager; import android.view.WindowManagerImpl; +import java.util.ArrayList; + /** * A wallpaper service is responsible for showing a live wallpaper behind * applications that would like to sit on top of it. This service object @@ -83,6 +85,8 @@ public abstract class WallpaperService extends Service { private static final int MSG_TOUCH_EVENT = 10040; private Looper mCallbackLooper; + private final ArrayList<Engine> mActiveEngines + = new ArrayList<Engine>(); static final class WallpaperCommand { String action; @@ -596,8 +600,10 @@ public abstract class WallpaperService extends Service { } void doVisibilityChanged(boolean visible) { - mVisible = visible; - reportVisibility(); + if (!mDestroyed) { + mVisible = visible; + reportVisibility(); + } } void reportVisibility() { @@ -666,6 +672,10 @@ public abstract class WallpaperService extends Service { } void detach() { + if (mDestroyed) { + return; + } + mDestroyed = true; if (mVisible) { @@ -773,10 +783,12 @@ public abstract class WallpaperService extends Service { } Engine engine = onCreateEngine(); mEngine = engine; + mActiveEngines.add(engine); engine.attach(this); return; } case DO_DETACH: { + mActiveEngines.remove(mEngine); mEngine.detach(); return; } @@ -844,6 +856,20 @@ public abstract class WallpaperService extends Service { } } + @Override + public void onCreate() { + super.onCreate(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + for (int i=0; i<mActiveEngines.size(); i++) { + mActiveEngines.get(i).detach(); + } + mActiveEngines.clear(); + } + /** * Implement to return the implementation of the internal accessibility * service interface. Subclasses should not override. |