From e61758adc8cc448e0b345ed68422dac83d6fa22b Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 10 Jun 2020 10:26:44 -0400 Subject: Track sent conversations better Include all notifications that appear in the conversation space, not just messaging style ones And then I decided to fix a user vs uid issue in the tests which means many of them have been touched Test: atest Fixes: 158610806 Change-Id: I0bb3f0415845b44ae3e3f9d7b2af836be00ceb24 --- .../notification/NotificationManagerService.java | 14 +- .../NotificationManagerServiceTest.java | 222 +++++++++++++-------- 2 files changed, 145 insertions(+), 91 deletions(-) diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index a9139adff4f9..b64e99168445 100755 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2048,12 +2048,15 @@ public class NotificationManagerService extends SystemService { mStripRemoteViewsSizeBytes = getContext().getResources().getInteger( com.android.internal.R.integer.config_notificationStripRemoteViewSizeBytes); - mMsgPkgsAllowedAsConvos = Set.of( - getContext().getResources().getStringArray( - com.android.internal.R.array.config_notificationMsgPkgsAllowedAsConvos)); + mMsgPkgsAllowedAsConvos = Set.of(getStringArrayResource( + com.android.internal.R.array.config_notificationMsgPkgsAllowedAsConvos)); mStatsManager = statsManager; } + protected String[] getStringArrayResource(int key) { + return getContext().getResources().getStringArray(key); + } + @Override public void onStart() { SnoozeHelper snoozeHelper = new SnoozeHelper(getContext(), (userId, r, muteOnReturn) -> { @@ -2741,10 +2744,7 @@ public class NotificationManagerService extends SystemService { } protected void maybeRegisterMessageSent(NotificationRecord r) { - Context appContext = r.getSbn().getPackageContext(getContext()); - Notification.Builder nb = - Notification.Builder.recoverBuilder(appContext, r.getNotification()); - if (nb.getStyle() instanceof Notification.MessagingStyle) { + if (r.isConversation()) { if (r.getShortcutInfo() != null) { if (mPreferencesHelper.setValidMessageSent( r.getSbn().getPackageName(), r.getUid())) { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index ae22b2be0c69..be3c4eeeaec2 100755 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -347,6 +347,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { super.setNotificationAssistantAccessGrantedForUserInternal(assistant, userId, granted); } + @Override + protected String[] getStringArrayResource(int key) { + return new String[] {PKG_O}; + } + private void setNotificationAssistantAccessGrantedCallback( @Nullable NotificationAssistantAccessGrantedCallback callback) { this.mNotificationAssistantAccessGrantedCallback = callback; @@ -434,7 +439,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // Setup managed services mListener = mListeners.new ManagedServiceInfo( - null, new ComponentName(PKG, "test_class"), mUid, true, null, 0); + null, new ComponentName(PKG, "test_class"), + UserHandle.getUserId(mUid), true, null, 0); ComponentName defaultComponent = ComponentName.unflattenFromString("config/device"); ArraySet components = new ArraySet<>(); components.add(defaultComponent); @@ -444,7 +450,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { when(mAssistants.getDefaultComponents()).thenReturn(components); when(mAssistants.queryPackageForServices( anyString(), anyInt(), anyInt())).thenReturn(components); - when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener); + when(mListeners.checkServiceTokenLocked(null)).thenReturn(mListener); ManagedServices.Config listenerConfig = new ManagedServices.Config(); listenerConfig.xmlTag = NotificationListeners.TAG_ENABLED_NOTIFICATION_LISTENERS; when(mListeners.getConfig()).thenReturn(listenerConfig); @@ -497,6 +503,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mBinderService.createNotificationChannels( PKG, new ParceledListSlice(Arrays.asList(mTestNotificationChannel))); + mBinderService.createNotificationChannels( + PKG_P, new ParceledListSlice(Arrays.asList(mTestNotificationChannel))); + mBinderService.createNotificationChannels( + PKG_O, new ParceledListSlice(Arrays.asList(mTestNotificationChannel))); assertNotNull(mBinderService.getNotificationChannel( PKG, mContext.getUserId(), PKG, TEST_CHANNEL_ID)); clearInvocations(mRankingHandler); @@ -583,7 +593,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setGroupSummary(isSummary); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, id, "tag" + System.currentTimeMillis(), mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); return new NotificationRecord(mContext, sbn, channel); } @@ -603,7 +613,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { nb.extend(extender); } StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 8, "tag", mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); return new NotificationRecord(mContext, sbn, channel); } @@ -635,7 +645,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb = getMessageStyleNotifBuilder(addMetadata, groupKey, isSummary); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, id, tag, mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); return new NotificationRecord(mContext, sbn, channel); } @@ -1687,7 +1697,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setSmallIcon(android.R.drawable.sym_def_app_icon) .build(); StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, null, mUid, 0, - n, new UserHandle(mUid), null, 0); + n, UserHandle.getUserHandleForUid(mUid), null, 0); sbn.getNotification().flags |= FLAG_FOREGROUND_SERVICE; mBinderService.enqueueNotificationWithTag(PKG, PKG, null, sbn.getId(), sbn.getNotification(), sbn.getUserId()); @@ -2191,7 +2201,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testCreateChannelNotifyListener() throws Exception { List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mService.setPreferencesHelper(mPreferencesHelper); when(mPreferencesHelper.getNotificationChannel(eq(PKG), anyInt(), eq(mTestNotificationChannel.getId()), anyBoolean())) @@ -2219,7 +2230,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testCreateChannelGroupNotifyListener() throws Exception { List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mService.setPreferencesHelper(mPreferencesHelper); NotificationChannelGroup group1 = new NotificationChannelGroup("a", "b"); NotificationChannelGroup group2 = new NotificationChannelGroup("n", "m"); @@ -2239,7 +2251,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testUpdateChannelNotifyListener() throws Exception { List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mService.setPreferencesHelper(mPreferencesHelper); mTestNotificationChannel.setLightColor(Color.CYAN); when(mPreferencesHelper.getNotificationChannel(eq(PKG), anyInt(), @@ -2257,7 +2270,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testDeleteChannelNotifyListener() throws Exception { List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mService.setPreferencesHelper(mPreferencesHelper); when(mPreferencesHelper.getNotificationChannel(eq(PKG), anyInt(), eq(mTestNotificationChannel.getId()), anyBoolean())) @@ -2273,7 +2287,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testDeleteChannelGroupNotifyListener() throws Exception { List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); NotificationChannelGroup ncg = new NotificationChannelGroup("a", "b/c"); mService.setPreferencesHelper(mPreferencesHelper); when(mPreferencesHelper.getNotificationChannelGroup(eq(ncg.getId()), eq(PKG), anyInt())) @@ -2290,7 +2305,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); when(mPreferencesHelper.getNotificationChannel(eq(PKG), anyInt(), eq(mTestNotificationChannel.getId()), anyBoolean())) .thenReturn(mTestNotificationChannel); @@ -2310,7 +2326,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testUpdateNotificationChannelFromPrivilegedListener_noAccess() throws Exception { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); try { mBinderService.updateNotificationChannelFromPrivilegedListener( @@ -2333,7 +2350,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mListener = mock(ManagedServices.ManagedServiceInfo.class); mListener.component = new ComponentName(PKG, PKG); when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false); @@ -2360,7 +2378,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mBinderService.getNotificationChannelsFromPrivilegedListener( null, PKG, Process.myUserHandle()); @@ -2373,7 +2392,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testGetNotificationChannelFromPrivilegedListener_cdm_noAccess() throws Exception { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); try { mBinderService.getNotificationChannelsFromPrivilegedListener( @@ -2391,7 +2411,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testGetNotificationChannelFromPrivilegedListener_assistant_success() throws Exception { mService.setPreferencesHelper(mPreferencesHelper); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(new ArrayList<>()); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(new ArrayList<>()); when(mAssistants.isServiceTokenValidLocked(any())).thenReturn(true); mBinderService.getNotificationChannelsFromPrivilegedListener( @@ -2405,7 +2426,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testGetNotificationChannelFromPrivilegedListener_assistant_noAccess() throws Exception { mService.setPreferencesHelper(mPreferencesHelper); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(new ArrayList<>()); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(new ArrayList<>()); when(mAssistants.isServiceTokenValidLocked(any())).thenReturn(false); try { @@ -2425,7 +2447,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mListener = mock(ManagedServices.ManagedServiceInfo.class); when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false); when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener); @@ -2447,7 +2470,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); associations.add("a"); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mBinderService.getNotificationChannelGroupsFromPrivilegedListener( null, PKG, Process.myUserHandle()); @@ -2459,7 +2483,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testGetNotificationChannelGroupsFromPrivilegedListener_noAccess() throws Exception { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); try { mBinderService.getNotificationChannelGroupsFromPrivilegedListener( @@ -2476,7 +2501,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void testGetNotificationChannelGroupsFromPrivilegedListener_badUser() throws Exception { mService.setPreferencesHelper(mPreferencesHelper); List associations = new ArrayList<>(); - when(mCompanionMgr.getAssociations(PKG, mUid)).thenReturn(associations); + when(mCompanionMgr.getAssociations(PKG, UserHandle.getUserId(mUid))) + .thenReturn(associations); mListener = mock(ManagedServices.ManagedServiceInfo.class); when(mListener.enabledAndUserMatches(anyInt())).thenReturn(false); when(mListeners.checkServiceTokenLocked(any())).thenReturn(mListener); @@ -3026,8 +3052,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mBinderService.setNotificationAssistantAccessGranted(c, true); verify(mListeners).migrateToXml(); - verify(mListeners).notifyNotificationChannelChanged(anyString(), any(), any(), - anyInt()); verify(mConditionProviders).setPackageOrComponentEnabled( anyString(), anyInt(), anyBoolean(), anyBoolean()); verify(mAssistants).migrateToXml(); @@ -3041,8 +3065,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { mBinderService.setNotificationPolicyAccessGranted(c.getPackageName(), true); verify(mListeners).migrateToXml(); - verify(mListeners).notifyNotificationChannelChanged(anyString(), any(), any(), - anyInt()); verify(mConditionProviders).setPackageOrComponentEnabled( anyString(), anyInt(), anyBoolean(), anyBoolean()); verify(mAssistants).migrateToXml(); @@ -3178,7 +3200,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setSmallIcon(android.R.drawable.sym_def_app_icon); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, "testNoFakeColorizedPermission", mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mBinderService.enqueueNotificationWithTag(PKG, PKG, sbn.getTag(), @@ -3216,7 +3238,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .build(); StatusBarNotification sbn = new StatusBarNotification("a", "a", 0, "tag", mUid, 0, - n, new UserHandle(mUid), null, 0); + n, UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord otherPackage = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mService.addEnqueuedNotification(otherPackage); @@ -3224,7 +3246,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // Same notifications are enqueued as posted, everything counts b/c id and tag don't match // anything that's currently enqueued or posted - int userId = new UserHandle(mUid).getIdentifier(); + int userId = UserHandle.getUserId(mUid); assertEquals(40, mService.getNotificationCountLocked(PKG, userId, 0, null)); assertEquals(40, @@ -3441,8 +3463,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { StatusBarNotification sbn = new StatusBarNotification(preOPkg, preOPkg, 9, "testBumpFGImportance_noChannelChangePreOApp", - Binder.getCallingUid(), 0, nb.build(), new UserHandle(Binder.getCallingUid()), null, - 0); + Binder.getCallingUid(), 0, nb.build(), + UserHandle.getUserHandleForUid(Binder.getCallingUid()), null, 0); mBinderService.enqueueNotificationWithTag(sbn.getPackageName(), sbn.getOpPkg(), sbn.getTag(), sbn.getId(), sbn.getNotification(), sbn.getUserId()); @@ -3459,7 +3481,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { sbn = new StatusBarNotification(preOPkg, preOPkg, 9, "testBumpFGImportance_noChannelChangePreOApp", Binder.getCallingUid(), - 0, nb.build(), new UserHandle(Binder.getCallingUid()), null, 0); + 0, nb.build(), UserHandle.getUserHandleForUid(Binder.getCallingUid()), null, 0); mBinderService.enqueueNotificationWithTag(preOPkg, preOPkg, "testBumpFGImportance_noChannelChangePreOApp", @@ -3813,7 +3835,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .addMessage(message1) .addMessage(message2)); NotificationRecord recordA = new NotificationRecord(mContext, new StatusBarNotification( - PKG, PKG, 0, "tag", mUid, 0, nbA.build(), new UserHandle(mUid), null, 0), c); + PKG, PKG, 0, "tag", mUid, 0, nbA.build(), UserHandle.getUserHandleForUid(mUid), + null, 0), c); // First post means we grant access to both reset(mUgm); @@ -3831,7 +3854,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setSmallIcon(android.R.drawable.sym_def_app_icon) .setStyle(new Notification.MessagingStyle("").addMessage(message2)); NotificationRecord recordB = new NotificationRecord(mContext, new StatusBarNotification(PKG, - PKG, 0, "tag", mUid, 0, nbB.build(), new UserHandle(mUid), null, 0), c); + PKG, 0, "tag", mUid, 0, nbB.build(), UserHandle.getUserHandleForUid(mUid), null, 0), + c); // Update means we drop access to first reset(mUgmInternal); @@ -3870,7 +3894,8 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setStyle(new Notification.MessagingStyle("") .addMessage(message1)); NotificationRecord recordA = new NotificationRecord(mContext, new StatusBarNotification( - PKG, PKG, 0, "tag", mUid, 0, nbA.build(), new UserHandle(mUid), null, 0), c); + PKG, PKG, 0, "tag", mUid, 0, nbA.build(), UserHandle.getUserHandleForUid(mUid), + null, 0), c); doThrow(new SecurityException("no access")).when(mUgm) .grantUriPermissionFromOwner( @@ -4029,7 +4054,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setContentTitle("foo"); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); @@ -4037,7 +4062,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setFlag(FLAG_FOREGROUND_SERVICE, true) .setContentTitle("bar"); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4049,14 +4074,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setContentTitle("foo"); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setContentTitle("bar"); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4069,7 +4094,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setStyle(new Notification.InboxStyle() .addLine("line1").addLine("line2")); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); @@ -4077,7 +4102,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setStyle(new Notification.InboxStyle() .addLine("line1").addLine("line2_changed")); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4087,7 +4112,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setStyle(new Notification.InboxStyle() .addLine("line1")); StatusBarNotification sbn3 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb3.build(), new UserHandle(mUid), null, 0); + nb3.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r3 = new NotificationRecord(mContext, sbn3, mock(NotificationChannel.class)); @@ -4097,7 +4122,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setStyle(new Notification.InboxStyle() .addLine("line1").addLine("line2").addLine("line3")); StatusBarNotification sbn4 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb4.build(), new UserHandle(mUid), null, 0); + nb4.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r4 = new NotificationRecord(mContext, sbn4, mock(NotificationChannel.class)); @@ -4106,7 +4131,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb5 = new Notification.Builder(mContext, "") .setContentText("not an inbox"); StatusBarNotification sbn5 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb5.build(), new UserHandle(mUid), null, 0); + nb5.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r5 = new NotificationRecord(mContext, sbn5, mock(NotificationChannel.class)); @@ -4118,14 +4143,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setContentText("foo"); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setContentText("bar"); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4137,14 +4162,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setContentText("foo"); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setContentText("foo"); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4156,14 +4181,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setContentText(Html.fromHtml("foo")); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setContentText(Html.fromHtml("foo")); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4175,14 +4200,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setContentText(Html.fromHtml("foo")); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setContentText(Html.fromHtml("bar")); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4194,14 +4219,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setProgress(100, 90, false); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setProgress(100, 100, false); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4213,14 +4238,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setProgress(100, 90, false); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setProgress(100, 91, false); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4232,14 +4257,14 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb1 = new Notification.Builder(mContext, "") .setProgress(100, 100, false); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); Notification.Builder nb2 = new Notification.Builder(mContext, "") .setProgress(100, 100, false); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4253,7 +4278,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setFlag(Notification.FLAG_GROUP_SUMMARY, true) .setContentText("foo"); StatusBarNotification sbn1 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb1.build(), new UserHandle(mUid), null, 0); + nb1.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r1 = new NotificationRecord(mContext, sbn1, mock(NotificationChannel.class)); @@ -4262,7 +4287,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setFlag(Notification.FLAG_GROUP_SUMMARY, true) .setContentText("bar"); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4276,7 +4301,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setFlag(Notification.FLAG_GROUP_SUMMARY, true) .setContentText("bar"); StatusBarNotification sbn2 = new StatusBarNotification(PKG, PKG, 0, "tag", mUid, 0, - nb2.build(), new UserHandle(mUid), null, 0); + nb2.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r2 = new NotificationRecord(mContext, sbn2, mock(NotificationChannel.class)); @@ -4694,7 +4719,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { n.flags |= FLAG_FOREGROUND_SERVICE; StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 9, null, mUid, 0, - n, new UserHandle(mUid), null, 0); + n, UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mService.addEnqueuedNotification(r); @@ -4713,7 +4738,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { n.flags |= FLAG_FOREGROUND_SERVICE; StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 9, null, mUid, 0, - n, new UserHandle(mUid), null, 0); + n, UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mService.addNotification(r); @@ -5026,7 +5051,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setSmallIcon(android.R.drawable.sym_def_app_icon); StatusBarNotification sbn = new StatusBarNotification(PKG, "opPkg", 0, "tag", mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord r = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mService.reportSeen(r); @@ -5050,7 +5075,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, r.getSbn().getId(), r.getSbn().getTag(), mUid, 0, new Notification.Builder(mContext, mTestNotificationChannel.getId()).build(), - new UserHandle(mUid), null, 0); + UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord update = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mService.addEnqueuedNotification(update); assertNull(update.getSbn().getNotification().getSmallIcon()); @@ -5084,7 +5109,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - public void testgetNotificationChannels_crossUser() throws Exception { + public void testGetNotificationChannels_crossUser() throws Exception { // same user no problem mBinderService.getNotificationChannels("src", "target", mContext.getUserId()); @@ -5273,7 +5298,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { .setSmallIcon(android.R.drawable.sym_def_app_icon) .setBubbleMetadata(getBubbleMetadata()); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, "tag", mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); // Say we're foreground @@ -5319,7 +5344,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { nb.setShortcutId(null); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, null, mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); mBinderService.enqueueNotificationWithTag(PKG, PKG, sbn.getTag(), sbn.getId(), sbn.getNotification(), sbn.getUserId()); @@ -5363,7 +5388,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, "testFlagBubbleNotifs_noFlag_notBubble", mUid, 0, - nb.build(), new UserHandle(mUid), null, 0); + nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); // Post the notification @@ -6178,7 +6203,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { nb.setShortcutId(VALID_CONVO_SHORTCUT_ID); nb.setBubbleMetadata(metadata); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, - "tag", mUid, 0, nb.build(), new UserHandle(mUid), null, 0); + "tag", mUid, 0, nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); // Test: Send the bubble notification @@ -6203,7 +6228,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { // Test: Remove the shortcut when(mLauncherApps.getShortcuts(any(), any())).thenReturn(null); launcherAppsCallback.getValue().onShortcutsChanged(PKG, Collections.emptyList(), - new UserHandle(mUid)); + UserHandle.getUserHandleForUid(mUid)); waitForIdle(); // Verify: @@ -6238,7 +6263,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { nb.setShortcutId(shortcutId); nb.setBubbleMetadata(metadata); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, - "tag", mUid, 0, nb.build(), new UserHandle(mUid), null, 0); + "tag", mUid, 0, nb.build(), UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); // Pretend the shortcut exists @@ -6686,15 +6711,43 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testRecordMessages_invalidMsg() throws RemoteException { - NotificationRecord nr = - generateMessageBubbleNotifRecord(mTestNotificationChannel, - "testRecordMessages_invalidMsg"); + Notification.Builder nb = getMessageStyleNotifBuilder(false /* addDefaultMetadata */, + null /* groupKey */, false /* isSummary */); + nb.setShortcutId(null); + StatusBarNotification sbn = new StatusBarNotification(PKG_P, PKG_P, 1, + "testRecordMessages_invalidMsg", mUid, 0, nb.build(), + UserHandle.getUserHandleForUid(mUid), null, 0); + NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); + when(mLauncherApps.getShortcuts(any(), any())).thenReturn(null); - mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(), + mBinderService.enqueueNotificationWithTag(PKG_P, PKG_P, nr.getSbn().getTag(), nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId()); waitForIdle(); - assertTrue(mBinderService.isInInvalidMsgState(PKG, mUid)); + assertTrue(mBinderService.isInInvalidMsgState(PKG_P, mUid)); + } + + @Test + public void testRecordMessages_invalidMsg_notMessageStyle() throws RemoteException { + Notification.Builder nb = new Notification.Builder(mContext, + mTestNotificationChannel.getId()) + .setContentTitle("foo") + .setShortcutId(null) + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setCategory(Notification.CATEGORY_MESSAGE); + StatusBarNotification sbn = new StatusBarNotification(PKG_O, PKG_O, 1, + "testRecordMessages_invalidMsg_notMessageStyle", mUid, 0, nb.build(), + UserHandle.getUserHandleForUid(mUid), null, 0); + NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); + + when(mLauncherApps.getShortcuts(any(), any())).thenReturn(null); + mBinderService.enqueueNotificationWithTag(PKG_O, PKG_O, nr.getSbn().getTag(), + nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId()); + waitForIdle(); + + // PKG_O is allowed to be in conversation space b/c of override in + // TestableNotificationManagerService + assertTrue(mBinderService.isInInvalidMsgState(PKG_O, mUid)); } @Test @@ -6702,24 +6755,25 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { Notification.Builder nb = getMessageStyleNotifBuilder(false /* addDefaultMetadata */, null /* groupKey */, false /* isSummary */); nb.setShortcutId(null); - StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, - "testRecordMessages_validMsg", mUid, 0, nb.build(), new UserHandle(mUid), null, 0); + StatusBarNotification sbn = new StatusBarNotification(PKG_P, PKG_P, 1, + "testRecordMessages_validMsg", mUid, 0, nb.build(), + UserHandle.getUserHandleForUid(mUid), null, 0); NotificationRecord nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); - mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(), + mBinderService.enqueueNotificationWithTag(PKG_P, PKG_P, nr.getSbn().getTag(), nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId()); waitForIdle(); - assertTrue(mBinderService.isInInvalidMsgState(PKG, mUid)); + assertTrue(mBinderService.isInInvalidMsgState(PKG_P, mUid)); nr = generateMessageBubbleNotifRecord(mTestNotificationChannel, "testRecordMessages_validMsg"); - mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(), + mBinderService.enqueueNotificationWithTag(PKG_P, PKG_P, nr.getSbn().getTag(), nr.getSbn().getId(), nr.getSbn().getNotification(), nr.getSbn().getUserId()); waitForIdle(); - assertFalse(mBinderService.isInInvalidMsgState(PKG, mUid)); + assertFalse(mBinderService.isInInvalidMsgState(PKG_P, mUid)); } @Test @@ -6739,7 +6793,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { nb.setShortcutId(null); StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1, "testRecordMessages_invalidMsg_afterValidMsg_2", mUid, 0, nb.build(), - new UserHandle(mUid), null, 0); + UserHandle.getUserHandleForUid(mUid), null, 0); nr = new NotificationRecord(mContext, sbn, mTestNotificationChannel); mBinderService.enqueueNotificationWithTag(PKG, PKG, nr.getSbn().getTag(), -- cgit v1.2.3-59-g8ed1b