summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Julia Reynolds <juliacr@google.com> 2019-01-29 00:46:32 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-01-29 00:46:32 +0000
commit7c7f18b9b1f8a8889e32ccdd52750b9fce4d1c6c (patch)
treea6ebdbfc63b5a38b7da7c5ff864d8713bf098a17
parentc6a4af096e63a00816b881e80fd5ff6ce25a59f3 (diff)
parentb40cd09df0a2dc43f094bc7a2cc909e9833b70e1 (diff)
Merge "Add API for checking paused packages."
-rw-r--r--api/current.txt1
-rw-r--r--core/java/android/app/INotificationManager.aidl1
-rw-r--r--core/java/android/app/NotificationManager.java16
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java19
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;