summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adrian Roos <roosa@google.com> 2016-04-19 16:41:18 -0700
committer Adrian Roos <roosa@google.com> 2016-04-19 16:41:36 -0700
commit751f33f8c73892a34f99eb0f4c8266b87a331283 (patch)
treee1c33ba79daf6f2a8f9f45ba4efb6a99920f9025
parent6ed4e35e49fb9d1e485f53b4ce309865d98a6058 (diff)
Fix NPE in WallpaperDrawable
Fixes: 28272898 Change-Id: I0377a341c253c79f5179b3a9c8eadcf51f9ffad3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java48
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java3
2 files changed, 44 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
index 92f3585f43ef..15cf5525f7f1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.phone;
+import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.IWallpaperManager;
import android.app.IWallpaperManagerCallback;
@@ -26,6 +27,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
import android.graphics.drawable.DrawableWrapper;
import android.os.Bundle;
import android.os.Handler;
@@ -161,12 +163,16 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
*/
public static class WallpaperDrawable extends DrawableWrapper {
- private Bitmap mBackground;
- private Rect mTmpRect = new Rect();
+ private final ConstantState mState;
+ private final Rect mTmpRect = new Rect();
public WallpaperDrawable(Resources r, Bitmap b) {
- super(new BitmapDrawable(r, b));
- mBackground = b;
+ this(r, new ConstantState(b));
+ }
+
+ private WallpaperDrawable(Resources r, ConstantState state) {
+ super(new BitmapDrawable(r, state.mBackground));
+ mState = state;
}
@Override
@@ -183,8 +189,8 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
protected void onBoundsChange(Rect bounds) {
int vwidth = getBounds().width();
int vheight = getBounds().height();
- int dwidth = mBackground.getWidth();
- int dheight = mBackground.getHeight();
+ int dwidth = mState.mBackground.getWidth();
+ int dheight = mState.mBackground.getHeight();
float scale;
float dx = 0, dy = 0;
@@ -207,5 +213,35 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
super.onBoundsChange(mTmpRect);
}
+
+ @Override
+ public ConstantState getConstantState() {
+ return mState;
+ }
+
+ static class ConstantState extends Drawable.ConstantState {
+
+ private final Bitmap mBackground;
+
+ ConstantState(Bitmap background) {
+ mBackground = background;
+ }
+
+ @Override
+ public Drawable newDrawable() {
+ return newDrawable(null);
+ }
+
+ @Override
+ public Drawable newDrawable(@Nullable Resources res) {
+ return new WallpaperDrawable(res, this);
+ }
+
+ @Override
+ public int getChangingConfigurations() {
+ // DrawableWrapper already handles this for us.
+ return 0;
+ }
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index d3f3b2d58e1e..712f8143cbc5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -2021,7 +2021,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (metaDataChanged) {
if (mBackdropBack.getDrawable() != null) {
Drawable drawable =
- mBackdropBack.getDrawable().getConstantState().newDrawable().mutate();
+ mBackdropBack.getDrawable().getConstantState()
+ .newDrawable(mBackdropFront.getResources()).mutate();
mBackdropFront.setImageDrawable(drawable);
if (mScrimSrcModeEnabled) {
mBackdropFront.getDrawable().mutate().setXfermode(mSrcOverXferMode);