summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2009-11-20 16:43:20 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-11-20 16:43:20 -0800
commitdbf3d3acc18f86a671096f1626d80d055bc36e11 (patch)
tree20f3c4cb91e17ca0ab66e48280edf418cf440123
parentf29006000cfbcf7732df5d5432ab5ff8a2dbf691 (diff)
parentaf1f42be96a6ffa7a9b63e199e1614281ea3282d (diff)
downloadframeworks_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.java30
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.