Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -6202,6 +6202,7 @@ package android.app { public class NotificationManager { method public String addAutomaticZenRule(android.app.AutomaticZenRule); method @Deprecated public boolean areBubblesAllowed(); method public boolean areBubblesEnabled(); method public boolean areNotificationsEnabled(); method public boolean areNotificationsPaused(); method public boolean canNotifyAsPackage(@NonNull String); core/java/android/app/INotificationManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ interface INotificationManager void setBubblesAllowed(String pkg, int uid, int bubblePreference); boolean areBubblesAllowed(String pkg); boolean areBubblesEnabled(in UserHandle user); int getBubblePreferenceForPackage(String pkg, int uid); void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList); Loading core/java/android/app/NotificationManager.java +15 −1 Original line number Diff line number Diff line Loading @@ -1326,7 +1326,6 @@ public class NotificationManager { } } /** * Gets whether all notifications posted by this app can appear outside of the * notification shade, floating over other apps' content. Loading @@ -1347,6 +1346,21 @@ public class NotificationManager { } } /** * Returns whether bubbles are enabled at the feature level for the current user. When enabled, * notifications able to bubble will display an affordance allowing the user to bubble them. * * @see Notification.Builder#setBubbleMetadata(Notification.BubbleMetadata) */ public boolean areBubblesEnabled() { INotificationManager service = getService(); try { return service.areBubblesEnabled(mContext.getUser()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Gets the bubble preference for the app. This preference only applies to notifications that * have been properly configured to bubble. Loading services/core/java/com/android/server/notification/NotificationManagerService.java +14 −0 Original line number Diff line number Diff line Loading @@ -3304,6 +3304,20 @@ public class NotificationManagerService extends SystemService { == BUBBLE_PREFERENCE_ALL; } /** * @return true if this user has bubbles enabled at the feature-level. */ @Override public boolean areBubblesEnabled(UserHandle user) { if (UserHandle.getCallingUserId() != user.getIdentifier()) { getContext().enforceCallingPermission( android.Manifest.permission.INTERACT_ACROSS_USERS, "areBubblesEnabled for user " + user.getIdentifier()); } // TODO: incorporate uid / per-user prefs once settings moves off global table. return mPreferencesHelper.bubblesEnabled(); } @Override public int getBubblePreferenceForPackage(String pkg, int uid) { enforceSystemOrSystemUIOrSamePackage(pkg, Loading services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +28 −0 Original line number Diff line number Diff line Loading @@ -4706,6 +4706,34 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertFalse(mBinderService.areBubblesAllowed(PKG)); } @Test public void testAreBubblesEnabled() throws Exception { assertTrue(mBinderService.areBubblesEnabled(UserHandle.getUserHandleForUid(mUid))); } @Test public void testAreBubblesEnabled_false() throws Exception { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.NOTIFICATION_BUBBLES, 0); mService.mPreferencesHelper.updateBubblesEnabled(); assertFalse(mBinderService.areBubblesEnabled(UserHandle.getUserHandleForUid(mUid))); } @Test public void testAreBubblesEnabled_exception() throws Exception { try { assertTrue(mBinderService.areBubblesEnabled( UserHandle.getUserHandleForUid(mUid + UserHandle.PER_USER_RANGE))); fail("Cannot call cross user without permission"); } catch (SecurityException e) { // pass } // cross user, with permission, no problem enableInteractAcrossUsers(); assertTrue(mBinderService.areBubblesEnabled( UserHandle.getUserHandleForUid(mUid + UserHandle.PER_USER_RANGE))); } @Test public void testIsCallerInstantApp_primaryUser() throws Exception { ApplicationInfo info = new ApplicationInfo(); Loading Loading
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -6202,6 +6202,7 @@ package android.app { public class NotificationManager { method public String addAutomaticZenRule(android.app.AutomaticZenRule); method @Deprecated public boolean areBubblesAllowed(); method public boolean areBubblesEnabled(); method public boolean areNotificationsEnabled(); method public boolean areNotificationsPaused(); method public boolean canNotifyAsPackage(@NonNull String);
core/java/android/app/INotificationManager.aidl +1 −0 Original line number Diff line number Diff line Loading @@ -85,6 +85,7 @@ interface INotificationManager void setBubblesAllowed(String pkg, int uid, int bubblePreference); boolean areBubblesAllowed(String pkg); boolean areBubblesEnabled(in UserHandle user); int getBubblePreferenceForPackage(String pkg, int uid); void createNotificationChannelGroups(String pkg, in ParceledListSlice channelGroupList); Loading
core/java/android/app/NotificationManager.java +15 −1 Original line number Diff line number Diff line Loading @@ -1326,7 +1326,6 @@ public class NotificationManager { } } /** * Gets whether all notifications posted by this app can appear outside of the * notification shade, floating over other apps' content. Loading @@ -1347,6 +1346,21 @@ public class NotificationManager { } } /** * Returns whether bubbles are enabled at the feature level for the current user. When enabled, * notifications able to bubble will display an affordance allowing the user to bubble them. * * @see Notification.Builder#setBubbleMetadata(Notification.BubbleMetadata) */ public boolean areBubblesEnabled() { INotificationManager service = getService(); try { return service.areBubblesEnabled(mContext.getUser()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Gets the bubble preference for the app. This preference only applies to notifications that * have been properly configured to bubble. Loading
services/core/java/com/android/server/notification/NotificationManagerService.java +14 −0 Original line number Diff line number Diff line Loading @@ -3304,6 +3304,20 @@ public class NotificationManagerService extends SystemService { == BUBBLE_PREFERENCE_ALL; } /** * @return true if this user has bubbles enabled at the feature-level. */ @Override public boolean areBubblesEnabled(UserHandle user) { if (UserHandle.getCallingUserId() != user.getIdentifier()) { getContext().enforceCallingPermission( android.Manifest.permission.INTERACT_ACROSS_USERS, "areBubblesEnabled for user " + user.getIdentifier()); } // TODO: incorporate uid / per-user prefs once settings moves off global table. return mPreferencesHelper.bubblesEnabled(); } @Override public int getBubblePreferenceForPackage(String pkg, int uid) { enforceSystemOrSystemUIOrSamePackage(pkg, Loading
services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +28 −0 Original line number Diff line number Diff line Loading @@ -4706,6 +4706,34 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { assertFalse(mBinderService.areBubblesAllowed(PKG)); } @Test public void testAreBubblesEnabled() throws Exception { assertTrue(mBinderService.areBubblesEnabled(UserHandle.getUserHandleForUid(mUid))); } @Test public void testAreBubblesEnabled_false() throws Exception { Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.NOTIFICATION_BUBBLES, 0); mService.mPreferencesHelper.updateBubblesEnabled(); assertFalse(mBinderService.areBubblesEnabled(UserHandle.getUserHandleForUid(mUid))); } @Test public void testAreBubblesEnabled_exception() throws Exception { try { assertTrue(mBinderService.areBubblesEnabled( UserHandle.getUserHandleForUid(mUid + UserHandle.PER_USER_RANGE))); fail("Cannot call cross user without permission"); } catch (SecurityException e) { // pass } // cross user, with permission, no problem enableInteractAcrossUsers(); assertTrue(mBinderService.areBubblesEnabled( UserHandle.getUserHandleForUid(mUid + UserHandle.PER_USER_RANGE))); } @Test public void testIsCallerInstantApp_primaryUser() throws Exception { ApplicationInfo info = new ApplicationInfo(); Loading