Loading services/core/java/com/android/server/notification/NotificationManagerService.java +25 −0 Original line number Diff line number Diff line Loading @@ -6687,6 +6687,31 @@ public class NotificationManagerService extends SystemService { } } // Ensure all actions are present if (notification.actions != null) { boolean hasNullActions = false; int nActions = notification.actions.length; for (int i = 0; i < nActions; i++) { if (notification.actions[i] == null) { hasNullActions = true; break; } } if (hasNullActions) { ArrayList<Notification.Action> nonNullActions = new ArrayList<>(); for (int i = 0; i < nActions; i++) { if (notification.actions[i] != null) { nonNullActions.add(notification.actions[i]); } } if (nonNullActions.size() != 0) { notification.actions = nonNullActions.toArray(new Notification.Action[0]); } else { notification.actions = null; } } } // Ensure CallStyle has all the correct actions if (notification.isStyle(Notification.CallStyle.class)) { Notification.Builder builder = Loading services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +40 −0 Original line number Diff line number Diff line Loading @@ -1644,6 +1644,46 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { FLAG_FOREGROUND_SERVICE | FLAG_CAN_COLORIZE | FLAG_NO_CLEAR | FLAG_ONGOING_EVENT); } @Test public void testEnqueueNotificationWithTag_nullAction_fixed() throws Exception { Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId()) .setContentTitle("foo") .setSmallIcon(android.R.drawable.sym_def_app_icon) .addAction(new Notification.Action.Builder(null, "one", null).build()) .addAction(new Notification.Action.Builder(null, "two", null).build()) .addAction(new Notification.Action.Builder(null, "three", null).build()) .build(); n.actions[1] = null; mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", 0, n, 0); waitForIdle(); StatusBarNotification[] posted = mBinderService.getActiveNotifications(PKG); assertThat(posted).hasLength(1); assertThat(posted[0].getNotification().actions).hasLength(2); assertThat(posted[0].getNotification().actions[0].title.toString()).isEqualTo("one"); assertThat(posted[0].getNotification().actions[1].title.toString()).isEqualTo("three"); } @Test public void testEnqueueNotificationWithTag_allNullActions_fixed() throws Exception { Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId()) .setContentTitle("foo") .setSmallIcon(android.R.drawable.sym_def_app_icon) .addAction(new Notification.Action.Builder(null, "one", null).build()) .addAction(new Notification.Action.Builder(null, "two", null).build()) .build(); n.actions[0] = null; n.actions[1] = null; mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", 0, n, 0); waitForIdle(); StatusBarNotification[] posted = mBinderService.getActiveNotifications(PKG); assertThat(posted).hasLength(1); assertThat(posted[0].getNotification().actions).isNull(); } @Test public void testCancelNonexistentNotification() throws Exception { mBinderService.cancelNotificationWithTag(PKG, PKG, Loading Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +25 −0 Original line number Diff line number Diff line Loading @@ -6687,6 +6687,31 @@ public class NotificationManagerService extends SystemService { } } // Ensure all actions are present if (notification.actions != null) { boolean hasNullActions = false; int nActions = notification.actions.length; for (int i = 0; i < nActions; i++) { if (notification.actions[i] == null) { hasNullActions = true; break; } } if (hasNullActions) { ArrayList<Notification.Action> nonNullActions = new ArrayList<>(); for (int i = 0; i < nActions; i++) { if (notification.actions[i] != null) { nonNullActions.add(notification.actions[i]); } } if (nonNullActions.size() != 0) { notification.actions = nonNullActions.toArray(new Notification.Action[0]); } else { notification.actions = null; } } } // Ensure CallStyle has all the correct actions if (notification.isStyle(Notification.CallStyle.class)) { Notification.Builder builder = Loading
services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +40 −0 Original line number Diff line number Diff line Loading @@ -1644,6 +1644,46 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { FLAG_FOREGROUND_SERVICE | FLAG_CAN_COLORIZE | FLAG_NO_CLEAR | FLAG_ONGOING_EVENT); } @Test public void testEnqueueNotificationWithTag_nullAction_fixed() throws Exception { Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId()) .setContentTitle("foo") .setSmallIcon(android.R.drawable.sym_def_app_icon) .addAction(new Notification.Action.Builder(null, "one", null).build()) .addAction(new Notification.Action.Builder(null, "two", null).build()) .addAction(new Notification.Action.Builder(null, "three", null).build()) .build(); n.actions[1] = null; mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", 0, n, 0); waitForIdle(); StatusBarNotification[] posted = mBinderService.getActiveNotifications(PKG); assertThat(posted).hasLength(1); assertThat(posted[0].getNotification().actions).hasLength(2); assertThat(posted[0].getNotification().actions[0].title.toString()).isEqualTo("one"); assertThat(posted[0].getNotification().actions[1].title.toString()).isEqualTo("three"); } @Test public void testEnqueueNotificationWithTag_allNullActions_fixed() throws Exception { Notification n = new Notification.Builder(mContext, mTestNotificationChannel.getId()) .setContentTitle("foo") .setSmallIcon(android.R.drawable.sym_def_app_icon) .addAction(new Notification.Action.Builder(null, "one", null).build()) .addAction(new Notification.Action.Builder(null, "two", null).build()) .build(); n.actions[0] = null; n.actions[1] = null; mBinderService.enqueueNotificationWithTag(PKG, PKG, "tag", 0, n, 0); waitForIdle(); StatusBarNotification[] posted = mBinderService.getActiveNotifications(PKG); assertThat(posted).hasLength(1); assertThat(posted[0].getNotification().actions).isNull(); } @Test public void testCancelNonexistentNotification() throws Exception { mBinderService.cancelNotificationWithTag(PKG, PKG, Loading