Loading core/java/android/app/Notification.java +4 −3 Original line number Diff line number Diff line Loading @@ -7733,11 +7733,12 @@ public class Notification implements Parcelable } else if (mPictureIcon.getType() == Icon.TYPE_BITMAP) { // If the icon contains a bitmap, use the old extra so that listeners which look // for that extra can still find the picture. Don't include the new extra in // that case, to avoid duplicating data. // that case, to avoid duplicating data. Leave the unused extra set to null to avoid // crashing apps that came to expect it to be present but null. extras.putParcelable(EXTRA_PICTURE, mPictureIcon.getBitmap()); extras.remove(EXTRA_PICTURE_ICON); extras.putParcelable(EXTRA_PICTURE_ICON, null); } else { extras.remove(EXTRA_PICTURE); extras.putParcelable(EXTRA_PICTURE, null); extras.putParcelable(EXTRA_PICTURE_ICON, mPictureIcon); } } Loading core/tests/coretests/src/android/app/NotificationTest.java +16 −8 Original line number Diff line number Diff line Loading @@ -1244,29 +1244,33 @@ public class NotificationTest { } @Test public void testBigPictureStyle_setExtras_pictureIconNull_noPictureIconKey() { public void testBigPictureStyle_setExtras_pictureIconNull_pictureIconKeyNull() { Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture((Bitmap) null); Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isTrue(); final Parcelable pictureIcon = extras.getParcelable(EXTRA_PICTURE_ICON); assertThat(pictureIcon).isNull(); } @Test public void testBigPictureStyle_setExtras_pictureIconNull_noPictureKey() { public void testBigPictureStyle_setExtras_pictureIconNull_pictureKeyNull() { Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture((Bitmap) null); Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE)).isTrue(); final Parcelable picture = extras.getParcelable(EXTRA_PICTURE); assertThat(picture).isNull(); } @Test public void testBigPictureStyle_setExtras_pictureIconTypeBitmap_noPictureIconKey() { public void testBigPictureStyle_setExtras_pictureIconTypeBitmap_pictureIconKeyNull() { Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture(bitmap); Loading @@ -1274,11 +1278,13 @@ public class NotificationTest { Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isTrue(); final Parcelable pictureIcon = extras.getParcelable(EXTRA_PICTURE_ICON); assertThat(pictureIcon).isNull(); } @Test public void testBigPictureStyle_setExtras_pictureIconTypeIcon_noPictureKey() { public void testBigPictureStyle_setExtras_pictureIconTypeIcon_pictureKeyNull() { Icon icon = Icon.createWithResource(mContext, R.drawable.btn_plus); Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture(icon); Loading @@ -1286,7 +1292,9 @@ public class NotificationTest { Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE)).isTrue(); final Parcelable picture = extras.getParcelable(EXTRA_PICTURE); assertThat(picture).isNull(); } @Test Loading services/core/java/com/android/server/notification/NotificationManagerService.java +8 −5 Original line number Diff line number Diff line Loading @@ -7018,12 +7018,14 @@ public class NotificationManagerService extends SystemService { return false; } final boolean hasBitmap = n.extras.containsKey(Notification.EXTRA_PICTURE); final boolean hasBitmap = n.extras.containsKey(Notification.EXTRA_PICTURE) && n.extras.getParcelable(Notification.EXTRA_PICTURE) != null; if (hasBitmap) { return true; } final boolean hasIcon = n.extras.containsKey(Notification.EXTRA_PICTURE_ICON); final boolean hasIcon = n.extras.containsKey(Notification.EXTRA_PICTURE_ICON) && n.extras.getParcelable(Notification.EXTRA_PICTURE_ICON) != null; if (hasIcon) { return true; } Loading @@ -7039,9 +7041,10 @@ public class NotificationManagerService extends SystemService { if (!isBigPictureWithBitmapOrIcon(r.getNotification())) { return; } // Remove Notification object's reference to picture bitmap or URI r.getNotification().extras.remove(Notification.EXTRA_PICTURE); r.getNotification().extras.remove(Notification.EXTRA_PICTURE_ICON); // Remove Notification object's reference to picture bitmap or URI. Leave the extras set to // null to avoid crashing apps that came to expect them to be present but null. r.getNotification().extras.putParcelable(Notification.EXTRA_PICTURE, null); r.getNotification().extras.putParcelable(Notification.EXTRA_PICTURE_ICON, null); // Make Notification silent r.getNotification().flags |= FLAG_ONLY_ALERT_ONCE; Loading services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +7 −2 Original line number Diff line number Diff line Loading @@ -12302,7 +12302,9 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { /* isImageBitmap= */ true, /* isExpired= */ true); addRecordAndRemoveBitmaps(record); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE)).isFalse(); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE)).isTrue(); final Parcelable picture = record.getNotification().extras.getParcelable(EXTRA_PICTURE); assertThat(picture).isNull(); } @Test Loading Loading @@ -12336,7 +12338,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { /* isImageBitmap= */ false, /* isExpired= */ true); addRecordAndRemoveBitmaps(record); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE_ICON)).isFalse(); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE_ICON)).isTrue(); final Parcelable pictureIcon = record.getNotification().extras.getParcelable(EXTRA_PICTURE_ICON); assertThat(pictureIcon).isNull(); } @Test Loading
core/java/android/app/Notification.java +4 −3 Original line number Diff line number Diff line Loading @@ -7733,11 +7733,12 @@ public class Notification implements Parcelable } else if (mPictureIcon.getType() == Icon.TYPE_BITMAP) { // If the icon contains a bitmap, use the old extra so that listeners which look // for that extra can still find the picture. Don't include the new extra in // that case, to avoid duplicating data. // that case, to avoid duplicating data. Leave the unused extra set to null to avoid // crashing apps that came to expect it to be present but null. extras.putParcelable(EXTRA_PICTURE, mPictureIcon.getBitmap()); extras.remove(EXTRA_PICTURE_ICON); extras.putParcelable(EXTRA_PICTURE_ICON, null); } else { extras.remove(EXTRA_PICTURE); extras.putParcelable(EXTRA_PICTURE, null); extras.putParcelable(EXTRA_PICTURE_ICON, mPictureIcon); } } Loading
core/tests/coretests/src/android/app/NotificationTest.java +16 −8 Original line number Diff line number Diff line Loading @@ -1244,29 +1244,33 @@ public class NotificationTest { } @Test public void testBigPictureStyle_setExtras_pictureIconNull_noPictureIconKey() { public void testBigPictureStyle_setExtras_pictureIconNull_pictureIconKeyNull() { Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture((Bitmap) null); Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isTrue(); final Parcelable pictureIcon = extras.getParcelable(EXTRA_PICTURE_ICON); assertThat(pictureIcon).isNull(); } @Test public void testBigPictureStyle_setExtras_pictureIconNull_noPictureKey() { public void testBigPictureStyle_setExtras_pictureIconNull_pictureKeyNull() { Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture((Bitmap) null); Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE)).isTrue(); final Parcelable picture = extras.getParcelable(EXTRA_PICTURE); assertThat(picture).isNull(); } @Test public void testBigPictureStyle_setExtras_pictureIconTypeBitmap_noPictureIconKey() { public void testBigPictureStyle_setExtras_pictureIconTypeBitmap_pictureIconKeyNull() { Bitmap bitmap = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888); Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture(bitmap); Loading @@ -1274,11 +1278,13 @@ public class NotificationTest { Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE_ICON)).isTrue(); final Parcelable pictureIcon = extras.getParcelable(EXTRA_PICTURE_ICON); assertThat(pictureIcon).isNull(); } @Test public void testBigPictureStyle_setExtras_pictureIconTypeIcon_noPictureKey() { public void testBigPictureStyle_setExtras_pictureIconTypeIcon_pictureKeyNull() { Icon icon = Icon.createWithResource(mContext, R.drawable.btn_plus); Notification.BigPictureStyle bpStyle = new Notification.BigPictureStyle(); bpStyle.bigPicture(icon); Loading @@ -1286,7 +1292,9 @@ public class NotificationTest { Bundle extras = new Bundle(); bpStyle.addExtras(extras); assertThat(extras.containsKey(EXTRA_PICTURE)).isFalse(); assertThat(extras.containsKey(EXTRA_PICTURE)).isTrue(); final Parcelable picture = extras.getParcelable(EXTRA_PICTURE); assertThat(picture).isNull(); } @Test Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +8 −5 Original line number Diff line number Diff line Loading @@ -7018,12 +7018,14 @@ public class NotificationManagerService extends SystemService { return false; } final boolean hasBitmap = n.extras.containsKey(Notification.EXTRA_PICTURE); final boolean hasBitmap = n.extras.containsKey(Notification.EXTRA_PICTURE) && n.extras.getParcelable(Notification.EXTRA_PICTURE) != null; if (hasBitmap) { return true; } final boolean hasIcon = n.extras.containsKey(Notification.EXTRA_PICTURE_ICON); final boolean hasIcon = n.extras.containsKey(Notification.EXTRA_PICTURE_ICON) && n.extras.getParcelable(Notification.EXTRA_PICTURE_ICON) != null; if (hasIcon) { return true; } Loading @@ -7039,9 +7041,10 @@ public class NotificationManagerService extends SystemService { if (!isBigPictureWithBitmapOrIcon(r.getNotification())) { return; } // Remove Notification object's reference to picture bitmap or URI r.getNotification().extras.remove(Notification.EXTRA_PICTURE); r.getNotification().extras.remove(Notification.EXTRA_PICTURE_ICON); // Remove Notification object's reference to picture bitmap or URI. Leave the extras set to // null to avoid crashing apps that came to expect them to be present but null. r.getNotification().extras.putParcelable(Notification.EXTRA_PICTURE, null); r.getNotification().extras.putParcelable(Notification.EXTRA_PICTURE_ICON, null); // Make Notification silent r.getNotification().flags |= FLAG_ONLY_ALERT_ONCE; Loading
services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +7 −2 Original line number Diff line number Diff line Loading @@ -12302,7 +12302,9 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { /* isImageBitmap= */ true, /* isExpired= */ true); addRecordAndRemoveBitmaps(record); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE)).isFalse(); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE)).isTrue(); final Parcelable picture = record.getNotification().extras.getParcelable(EXTRA_PICTURE); assertThat(picture).isNull(); } @Test Loading Loading @@ -12336,7 +12338,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { /* isImageBitmap= */ false, /* isExpired= */ true); addRecordAndRemoveBitmaps(record); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE_ICON)).isFalse(); assertThat(record.getNotification().extras.containsKey(EXTRA_PICTURE_ICON)).isTrue(); final Parcelable pictureIcon = record.getNotification().extras.getParcelable(EXTRA_PICTURE_ICON); assertThat(pictureIcon).isNull(); } @Test