ImageWallpaper: Only draw on valid surfaces

Previously, the wallpaper would draw even when
the surface had been destroyed, leading to
crashes.

Change-Id: I6465e832abb3bfd92495bca9b60dac474b35f6d6
Fixes: 28329816
This commit is contained in:
Adrian Roos
2016-04-28 15:22:29 -07:00
parent c39532dfcc
commit 53560f1c8b

View File

@@ -158,6 +158,7 @@ public class ImageWallpaper extends WallpaperService {
private int mLastRequestedHeight = -1;
private AsyncTask<Void, Void, Bitmap> mLoader;
private boolean mNeedsDrawAfterLoadingWallpaper;
private boolean mSurfaceValid;
public DrawableEngine() {
super();
@@ -248,11 +249,6 @@ public class ImageWallpaper extends WallpaperService {
}
}
@Override
public void onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset,
float xOffsetStep, float yOffsetStep,
@@ -288,13 +284,23 @@ public class ImageWallpaper extends WallpaperService {
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
if (DEBUG) {
Log.i(TAG, "onSurfaceDestroyed");
}
mLastSurfaceWidth = mLastSurfaceHeight = -1;
mSurfaceValid = false;
}
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
if (DEBUG) {
Log.i(TAG, "onSurfaceCreated");
}
mLastSurfaceWidth = mLastSurfaceHeight = -1;
mSurfaceValid = true;
}
@Override
@@ -314,6 +320,9 @@ public class ImageWallpaper extends WallpaperService {
}
void drawFrame() {
if (!mSurfaceValid) {
return;
}
try {
DisplayInfo displayInfo = getDefaultDisplayInfo();
int newRotation = displayInfo.rotation;