diff options
| author | 2019-01-29 00:46:32 +0000 | |
|---|---|---|
| committer | 2019-01-29 00:46:32 +0000 | |
| commit | 7c7f18b9b1f8a8889e32ccdd52750b9fce4d1c6c (patch) | |
| tree | a6ebdbfc63b5a38b7da7c5ff864d8713bf098a17 | |
| parent | c6a4af096e63a00816b881e80fd5ff6ce25a59f3 (diff) | |
| parent | b40cd09df0a2dc43f094bc7a2cc909e9833b70e1 (diff) | |
Merge "Add API for checking paused packages."
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/app/INotificationManager.aidl | 1 | ||||
| -rw-r--r-- | core/java/android/app/NotificationManager.java | 16 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 19 |
4 files changed, 37 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index 3d77ffbc450d..5b36f2334449 100644 --- a/api/current.txt +++ b/api/current.txt @@ -5777,6 +5777,7 @@ package android.app { method public String addAutomaticZenRule(android.app.AutomaticZenRule); method public boolean areBubblesAllowed(); method public boolean areNotificationsEnabled(); + method public boolean areNotificationsPaused(); method public boolean canNotifyAsPackage(String); method public void cancel(int); method public void cancel(String, int); diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index 199c1338c50c..9ea39f7606a8 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -94,6 +94,7 @@ interface INotificationManager boolean areChannelsBypassingDnd(); int getAppsBypassingDndCount(int uid); ParceledListSlice getNotificationChannelsBypassingDnd(String pkg, int userId); + boolean isPackagePaused(String pkg); // TODO: Remove this when callers have been migrated to the equivalent // INotificationListener method. diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index c4b4b4070ce7..621f134dc68e 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -1094,6 +1094,22 @@ public class NotificationManager { } /** + * Returns whether notifications from this package are temporarily hidden. This + * could be done because the package was marked as distracting to the user via + * {@code PackageManager#setDistractingPackageRestrictions(String[], int)} or because the + * package is {@code PackageManager#setPackagesSuspended(String[], boolean, PersistableBundle, + * PersistableBundle, SuspendDialogInfo) suspended}. + */ + public boolean areNotificationsPaused() { + INotificationManager service = getService(); + try { + return service.isPackagePaused(mContext.getPackageName()); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Checks the ability to modify notification do not disturb policy for the calling package. * * <p> diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index de3f50ad8c2c..b81e2007c939 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -121,6 +121,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.PackageManagerInternal; import android.content.pm.ParceledListSlice; import android.content.pm.UserInfo; import android.content.res.Resources; @@ -3859,6 +3860,24 @@ public class NotificationManagerService extends SystemService { return mLockScreenAllowSecureNotifications; } + @Override + public boolean isPackagePaused(String pkg) { + Preconditions.checkNotNull(pkg); + checkCallerIsSameApp(pkg); + + boolean isPaused; + + final PackageManagerInternal pmi = LocalServices.getService( + PackageManagerInternal.class); + int flags = pmi.getDistractingPackageRestrictions( + pkg, Binder.getCallingUserHandle().getIdentifier()); + isPaused = ((flags & PackageManager.RESTRICTION_HIDE_NOTIFICATIONS) != 0); + + isPaused |= isPackageSuspendedForUser(pkg, Binder.getCallingUid()); + + return isPaused; + } + private void verifyPrivilegedListener(INotificationListener token, UserHandle user, boolean assistantAllowed) { ManagedServiceInfo info; |