diff options
| -rw-r--r-- | Android.mk | 4 | ||||
| -rw-r--r-- | core/java/android/app/Notification.java | 23 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageParser.java | 5 | ||||
| -rwxr-xr-x | services/core/java/com/android/server/am/ActiveServices.java | 4 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 51 |
5 files changed, 33 insertions, 54 deletions
diff --git a/Android.mk b/Android.mk index c2d398794fa1..dec667e9b71c 100644 --- a/Android.mk +++ b/Android.mk @@ -495,6 +495,10 @@ LOCAL_JACK_FLAGS := --multi-dex native LOCAL_RMTYPEDEFS := true +ifeq ($(EMMA_INSTRUMENT_FRAMEWORK),true) +LOCAL_EMMA_INSTRUMENT := true +endif + include $(BUILD_JAVA_LIBRARY) framework_module := $(LOCAL_INSTALLED_MODULE) diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 3c3da7804a11..7682af8def81 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, @@ -1569,7 +1568,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) @@ -1727,8 +1726,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) { @@ -1854,15 +1853,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); } }); } @@ -1871,7 +1870,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/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index adf9fe62c37e..4da77f4b35c9 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -1871,7 +1871,7 @@ public class PackageParser { sa = res.obtainAttributes(parser, com.android.internal.R.styleable.AndroidManifestUsesSdk); - int minVers = 0; + int minVers = 1; String minCode = null; int targetVers = 0; String targetCode = null; @@ -1898,9 +1898,6 @@ public class PackageParser { } else { // If it's not a string, it's an integer. targetVers = val.data; - if (minVers == 0) { - minVers = targetVers; - } } } diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index d9148817881b..ee2fa51c8666 100755 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -1148,9 +1148,7 @@ public final class ActiveServices { if (r.binding.service.app != null) { if (r.binding.service.app.whitelistManager) { - // Must reset flag here because on computeOomAdjLocked() the service - // connection will be gone... - r.binding.service.app.whitelistManager = false; + updateWhitelistManagerLocked(r.binding.service.app); } // This could have made the service less important. if ((r.flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) { diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index d0bd9816a62e..11c65250f94c 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2563,7 +2563,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, @@ -2579,40 +2594,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; |