Guard against NPE
Test: atest; manually ensure that icons still work when
using SystemUI's context
Fixes: 192575971
Change-Id: I3c93d4898a6995148606b15fc8bd98d465741c0a
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index a00d014..5302188 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -416,10 +416,12 @@
return mIcon.icon;
}
- private Drawable getIcon(StatusBarIcon icon) {
- Context notifContext = mNotification != null ?
- mNotification.getPackageContext(getContext()) : getContext();
- return getIcon(getContext(), notifContext, icon);
+ Drawable getIcon(StatusBarIcon icon) {
+ Context notifContext = getContext();
+ if (mNotification != null) {
+ notifContext = mNotification.getPackageContext(getContext());
+ }
+ return getIcon(getContext(), notifContext != null ? notifContext : getContext(), icon);
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java
index 7c819f5..85ea52b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconViewTest.java
@@ -39,6 +39,7 @@
import android.graphics.Color;
import android.graphics.drawable.Icon;
import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
@@ -131,4 +132,19 @@
icon, 0, 0, "");
assertFalse(mIconView.set(largeIcon));
}
+
+ @Test
+ public void testNullNotifInfo() {
+ Bitmap bitmap = Bitmap.createBitmap(60, 60, Bitmap.Config.ARGB_8888);
+ Icon icon = Icon.createWithBitmap(bitmap);
+ StatusBarIcon largeIcon = new StatusBarIcon(UserHandle.ALL, "mockPackage",
+ icon, 0, 0, "");
+ mIconView.setNotification(mock(StatusBarNotification.class));
+ mIconView.getIcon(largeIcon);
+ // no crash? good
+
+ mIconView.setNotification(null);
+ mIconView.getIcon(largeIcon);
+ // no crash? good
+ }
}
\ No newline at end of file