From 53560f1c8b7d290cf6db9de44df8210c9ed30ba7 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Thu, 28 Apr 2016 15:22:29 -0700 Subject: [PATCH] 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 --- .../com/android/systemui/ImageWallpaper.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index c72f5d2f18cdd..0962d8488188e 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -158,6 +158,7 @@ public class ImageWallpaper extends WallpaperService { private int mLastRequestedHeight = -1; private AsyncTask 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;