Merge "Address api council feedback"
diff --git a/api/current.txt b/api/current.txt
index 9534cec..f9267cc 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -4454,7 +4454,7 @@
ctor public AutomaticZenRule(android.os.Parcel);
method public int describeContents();
method public android.net.Uri getConditionId();
- method public android.content.ComponentName getConfigurationActivity();
+ method @Nullable public android.content.ComponentName getConfigurationActivity();
method public long getCreationTime();
method public int getInterruptionFilter();
method public String getName();
@@ -4462,7 +4462,7 @@
method public android.service.notification.ZenPolicy getZenPolicy();
method public boolean isEnabled();
method public void setConditionId(android.net.Uri);
- method public void setConfigurationActivity(android.content.ComponentName);
+ method public void setConfigurationActivity(@Nullable android.content.ComponentName);
method public void setEnabled(boolean);
method public void setInterruptionFilter(int);
method public void setName(String);
@@ -5819,10 +5819,9 @@
method public void notify(String, int, android.app.Notification);
method public void notifyAsPackage(@NonNull String, @NonNull String, int, @NonNull android.app.Notification);
method public boolean removeAutomaticZenRule(String);
- method public void revokeNotificationDelegate();
method public void setAutomaticZenRuleState(@NonNull String, @NonNull android.service.notification.Condition);
method public final void setInterruptionFilter(int);
- method public void setNotificationDelegate(@NonNull String);
+ method public void setNotificationDelegate(@Nullable String);
method public void setNotificationPolicy(@NonNull android.app.NotificationManager.Policy);
method public boolean shouldHideSilentStatusBarIcons();
method public boolean updateAutomaticZenRule(String, android.app.AutomaticZenRule);
@@ -41763,7 +41762,7 @@
method public int getId();
method public String getKey();
method public android.app.Notification getNotification();
- method public String getOpPkg();
+ method @NonNull public String getOpPkg();
method public String getOverrideGroupKey();
method public String getPackageName();
method public long getPostTime();
diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java
index 010a900..ec2825e 100644
--- a/core/java/android/app/AutomaticZenRule.java
+++ b/core/java/android/app/AutomaticZenRule.java
@@ -136,7 +136,7 @@
* Returns the {@link ComponentName} of the activity that shows configuration options
* for this rule.
*/
- public ComponentName getConfigurationActivity() {
+ public @Nullable ComponentName getConfigurationActivity() {
return configurationActivity;
}
@@ -237,9 +237,10 @@
/**
* Sets the configuration activity - an activity that handles
* {@link NotificationManager#ACTION_AUTOMATIC_ZEN_RULE} that shows the user more information
- * about this rule and/or allows them to configure it.
+ * about this rule and/or allows them to configure it. This is required to be non-null for rules
+ * that are not backed by {@link android.service.notification.ConditionProviderService}.
*/
- public void setConfigurationActivity(ComponentName componentName) {
+ public void setConfigurationActivity(@Nullable ComponentName componentName) {
this.configurationActivity = componentName;
}
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index e1da08b..29e6807 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -192,7 +192,6 @@
ParceledListSlice getAppActiveNotifications(String callingPkg, int userId);
void setNotificationDelegate(String callingPkg, String delegate);
- void revokeNotificationDelegate(String callingPkg);
String getNotificationDelegate(String callingPkg);
boolean canNotifyAsPackage(String callingPkg, String targetPkg);
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index edf86f9..ed7aa4a 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -589,11 +589,11 @@
* received on your behalf from the cloud, without your process having to wake up.
*
* You can check if you have an allowed delegate with {@link #getNotificationDelegate()} and
- * revoke your delegate with {@link #revokeNotificationDelegate()}.
+ * revoke your delegate by passing null to this method.
*
* @param delegate Package name of the app which can send notifications on your behalf.
*/
- public void setNotificationDelegate(@NonNull String delegate) {
+ public void setNotificationDelegate(@Nullable String delegate) {
INotificationManager service = getService();
String pkg = mContext.getPackageName();
if (localLOGV) Log.v(TAG, pkg + ": cancelAll()");
@@ -605,20 +605,6 @@
}
/**
- * Revokes permission for your {@link #setNotificationDelegate(String) notification delegate}
- * to post notifications on your behalf.
- */
- public void revokeNotificationDelegate() {
- INotificationManager service = getService();
- String pkg = mContext.getPackageName();
- try {
- service.revokeNotificationDelegate(pkg);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
* Returns the {@link #setNotificationDelegate(String) delegate} that can post notifications on
* your behalf, if there currently is one.
*/
diff --git a/core/java/android/service/notification/StatusBarNotification.java b/core/java/android/service/notification/StatusBarNotification.java
index 0836327..4315100 100644
--- a/core/java/android/service/notification/StatusBarNotification.java
+++ b/core/java/android/service/notification/StatusBarNotification.java
@@ -16,6 +16,7 @@
package android.service.notification;
+import android.annotation.NonNull;
import android.annotation.UnsupportedAppUsage;
import android.app.Notification;
import android.app.NotificationManager;
@@ -299,7 +300,7 @@
* Might be different from {@link #getPackageName()} if the app owning the notification has
* a {@link NotificationManager#setNotificationDelegate(String) notification delegate}.
*/
- public String getOpPkg() {
+ public @NonNull String getOpPkg() {
return opPkg;
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 9281bf8..d25360a 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -2477,29 +2477,27 @@
checkCallerIsSameApp(callingPkg);
final int callingUid = Binder.getCallingUid();
UserHandle user = UserHandle.getUserHandleForUid(callingUid);
- try {
- ApplicationInfo info =
- mPackageManager.getApplicationInfo(delegate,
- MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE,
- user.getIdentifier());
- if (info != null) {
- mPreferencesHelper.setNotificationDelegate(
- callingPkg, callingUid, delegate, info.uid);
- handleSavePolicyFile();
+ if (delegate == null) {
+ mPreferencesHelper.revokeNotificationDelegate(callingPkg, Binder.getCallingUid());
+ handleSavePolicyFile();
+ } else {
+ try {
+ ApplicationInfo info =
+ mPackageManager.getApplicationInfo(delegate,
+ MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE,
+ user.getIdentifier());
+ if (info != null) {
+ mPreferencesHelper.setNotificationDelegate(
+ callingPkg, callingUid, delegate, info.uid);
+ handleSavePolicyFile();
+ }
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
}
- } catch (RemoteException e) {
- // :(
}
}
@Override
- public void revokeNotificationDelegate(String callingPkg) {
- checkCallerIsSameApp(callingPkg);
- mPreferencesHelper.revokeNotificationDelegate(callingPkg, Binder.getCallingUid());
- handleSavePolicyFile();
- }
-
- @Override
public String getNotificationDelegate(String callingPkg) {
// callable by Settings also
checkCallerIsSystemOrSameApp(callingPkg);
@@ -7196,7 +7194,7 @@
@Override
protected String getRequiredPermission() {
- // only signature/privileged apps can be bound
+ // only signature/privileged apps can be bound.
return android.Manifest.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE;
}