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
This commit is contained in:
Dianne Hackborn
2009-11-20 16:43:20 -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.