am dbf3d3ac: am af1f42be: Fix issue #2271668: Live Wallpaper Force-Close when changing from live wallpaper to picasa wallpaper

Merge commit 'dbf3d3acc18f86a671096f1626d80d055bc36e11' into eclair-mr2-plus-aosp

* commit 'dbf3d3acc18f86a671096f1626d80d055bc36e11':
  Fix issue #2271668: Live Wallpaper Force-Close when changing from live wallpaper to picasa wallpaper
This commit is contained in:
Dianne Hackborn
2009-11-20 16:49:21 -08:00
committed by Android Git Automerger

View File

@@ -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.