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:
@ -44,6 +44,8 @@ import android.view.ViewRoot;
|
|||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.WindowManagerImpl;
|
import android.view.WindowManagerImpl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A wallpaper service is responsible for showing a live wallpaper behind
|
* A wallpaper service is responsible for showing a live wallpaper behind
|
||||||
* applications that would like to sit on top of it. This service object
|
* 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 static final int MSG_TOUCH_EVENT = 10040;
|
||||||
|
|
||||||
private Looper mCallbackLooper;
|
private Looper mCallbackLooper;
|
||||||
|
private final ArrayList<Engine> mActiveEngines
|
||||||
|
= new ArrayList<Engine>();
|
||||||
|
|
||||||
static final class WallpaperCommand {
|
static final class WallpaperCommand {
|
||||||
String action;
|
String action;
|
||||||
@ -596,8 +600,10 @@ public abstract class WallpaperService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void doVisibilityChanged(boolean visible) {
|
void doVisibilityChanged(boolean visible) {
|
||||||
mVisible = visible;
|
if (!mDestroyed) {
|
||||||
reportVisibility();
|
mVisible = visible;
|
||||||
|
reportVisibility();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void reportVisibility() {
|
void reportVisibility() {
|
||||||
@ -666,6 +672,10 @@ public abstract class WallpaperService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void detach() {
|
void detach() {
|
||||||
|
if (mDestroyed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mDestroyed = true;
|
mDestroyed = true;
|
||||||
|
|
||||||
if (mVisible) {
|
if (mVisible) {
|
||||||
@ -773,10 +783,12 @@ public abstract class WallpaperService extends Service {
|
|||||||
}
|
}
|
||||||
Engine engine = onCreateEngine();
|
Engine engine = onCreateEngine();
|
||||||
mEngine = engine;
|
mEngine = engine;
|
||||||
|
mActiveEngines.add(engine);
|
||||||
engine.attach(this);
|
engine.attach(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case DO_DETACH: {
|
case DO_DETACH: {
|
||||||
|
mActiveEngines.remove(mEngine);
|
||||||
mEngine.detach();
|
mEngine.detach();
|
||||||
return;
|
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
|
* Implement to return the implementation of the internal accessibility
|
||||||
* service interface. Subclasses should not override.
|
* service interface. Subclasses should not override.
|
||||||
|
Reference in New Issue
Block a user