Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1400b14 authored by Android Build Merger (Role)'s avatar Android Build Merger (Role) Committed by Android (Google) Code Review
Browse files

Merge "Merge \"Remove redundant setPendingIntentWhitelistDuration() calls.\"...

Merge "Merge \"Remove redundant setPendingIntentWhitelistDuration() calls.\" into nyc-dev am: c1374208" into nyc-mr1-dev
parents 23bc74a8 1cec26c6
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -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);
+16 −35
Original line number Diff line number Diff line
@@ -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;