diff options
| author | 2016-06-28 20:48:51 +0000 | |
|---|---|---|
| committer | 2016-06-28 20:48:51 +0000 | |
| commit | 1cec26c69e5ecd33d634996b05db8b0b3467b9f0 (patch) | |
| tree | 241464d4dc6c504dcf013d16c810561e6d1401a0 | |
| parent | 9d07eed168b6b0cf5006cd59cd95fdb4ba1e8b52 (diff) | |
| parent | c1374208e3b5a415770060b10416fada36c40e0f (diff) | |
Merge \"Remove redundant setPendingIntentWhitelistDuration() calls.\" into nyc-dev
am: c1374208e3
Change-Id: Ie02a847ac513f89c1c430af0e3f559cf0bc2039d
| -rw-r--r-- | core/java/android/app/Notification.java | 23 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 51 |
2 files changed, 27 insertions, 47 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 05f49c5a1f02..4104d72ec5ad 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -762,14 +762,13 @@ public class Notification implements Parcelable public Bundle extras = new Bundle(); /** - * All pending intents in the notification extras (notification extras, actions extras, - * and remote input extras) as the system needs to be able to access them but touching - * the extras bundle in the system process is not safe because the bundle may contain + * All pending intents in the notification as the system needs to be able to access them but + * touching the extras bundle in the system process is not safe because the bundle may contain * custom parcelable objects. * * @hide */ - public ArraySet<PendingIntent> extrasPendingIntents; + public ArraySet<PendingIntent> allPendingIntents; /** * {@link #extras} key: this is the title of the notification, @@ -1593,7 +1592,7 @@ public class Notification implements Parcelable // intents in extras are always written as the last entry. readFromParcelImpl(parcel); // Must be read last! - extrasPendingIntents = (ArraySet<PendingIntent>) parcel.readArraySet(null); + allPendingIntents = (ArraySet<PendingIntent>) parcel.readArraySet(null); } private void readFromParcelImpl(Parcel parcel) @@ -1751,8 +1750,8 @@ public class Notification implements Parcelable } } - if (!ArrayUtils.isEmpty(extrasPendingIntents)) { - that.extrasPendingIntents = new ArraySet<>(extrasPendingIntents); + if (!ArrayUtils.isEmpty(allPendingIntents)) { + that.allPendingIntents = new ArraySet<>(allPendingIntents); } if (this.actions != null) { @@ -1878,15 +1877,15 @@ public class Notification implements Parcelable // cannot look into the extras as there may be parcelables there that // the platform does not know how to handle. To go around that we have // an explicit list of the pending intents in the extras bundle. - final boolean collectPendingIntents = (extrasPendingIntents == null); + final boolean collectPendingIntents = (allPendingIntents == null); if (collectPendingIntents) { PendingIntent.setOnMarshaledListener( (PendingIntent intent, Parcel out, int outFlags) -> { if (parcel == out) { - if (extrasPendingIntents == null) { - extrasPendingIntents = new ArraySet<>(); + if (allPendingIntents == null) { + allPendingIntents = new ArraySet<>(); } - extrasPendingIntents.add(intent); + allPendingIntents.add(intent); } }); } @@ -1895,7 +1894,7 @@ public class Notification implements Parcelable // want to intercept all pending events written to the pacel. writeToParcelImpl(parcel, flags); // Must be written last! - parcel.writeArraySet(extrasPendingIntents); + parcel.writeArraySet(allPendingIntents); } finally { if (collectPendingIntents) { PendingIntent.setOnMarshaledListener(null); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 9209d3d4b54e..21bcacd3e9a7 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2577,7 +2577,22 @@ public class NotificationManagerService extends SystemService { + " id=" + id + " notification=" + notification); } - markAsSentFromNotification(notification); + // Whitelist pending intents. + if (notification.allPendingIntents != null) { + final int intentCount = notification.allPendingIntents.size(); + if (intentCount > 0) { + final ActivityManagerInternal am = LocalServices + .getService(ActivityManagerInternal.class); + final long duration = LocalServices.getService( + DeviceIdleController.LocalService.class).getNotificationWhitelistDuration(); + for (int i = 0; i < intentCount; i++) { + PendingIntent pendingIntent = notification.allPendingIntents.valueAt(i); + if (pendingIntent != null) { + am.setPendingIntentWhitelistDuration(pendingIntent.getTarget(), duration); + } + } + } + } // Sanitize inputs notification.priority = clamp(notification.priority, Notification.PRIORITY_MIN, @@ -2593,40 +2608,6 @@ public class NotificationManagerService extends SystemService { idOut[0] = id; } - private static void markAsSentFromNotification(Notification notification) { - final ActivityManagerInternal am = LocalServices.getService(ActivityManagerInternal.class); - final long duration = LocalServices.getService(DeviceIdleController.LocalService.class) - .getNotificationWhitelistDuration(); - - if (notification.contentIntent != null) { - am.setPendingIntentWhitelistDuration(notification.contentIntent.getTarget(), duration); - } - if (notification.deleteIntent != null) { - am.setPendingIntentWhitelistDuration(notification.deleteIntent.getTarget(), duration); - } - if (notification.fullScreenIntent != null) { - am.setPendingIntentWhitelistDuration(notification.fullScreenIntent.getTarget(), - duration); - } - if (notification.actions != null) { - for (Notification.Action action: notification.actions) { - if (action.actionIntent == null) { - continue; - } - am.setPendingIntentWhitelistDuration(action.actionIntent.getTarget(), duration); - } - } - if (notification.extrasPendingIntents != null) { - final int intentCount = notification.extrasPendingIntents.size(); - for (int i = 0; i < intentCount; i++) { - PendingIntent pendingIntent = notification.extrasPendingIntents.valueAt(i); - if (pendingIntent != null) { - am.setPendingIntentWhitelistDuration(pendingIntent.getTarget(), duration); - } - } - } - } - private class EnqueueNotificationRunnable implements Runnable { private final NotificationRecord r; private final int userId; |