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

Commit d1293fc9 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Removing non-wakeup alarms on user-removed" into sc-dev

parents c03a2d30 8c9ca800
Loading
Loading
Loading
Loading
+3 −41
Original line number Diff line number Diff line
@@ -3363,56 +3363,18 @@ public class AlarmManagerService extends SystemService {

    void removeUserLocked(int userHandle) {
        if (userHandle == USER_SYSTEM) {
            // If we're told we're removing the system user, ignore it.
            Slog.w(TAG, "Ignoring attempt to remove system-user state!");
            return;
        }
        final Predicate<Alarm> whichAlarms =
                (Alarm a) -> UserHandle.getUserId(a.creatorUid) == userHandle;
        final ArrayList<Alarm> removedAlarms = mAlarmStore.remove(whichAlarms);
        for (final Alarm removed : removedAlarms) {
            decrementAlarmCount(removed.uid, 1);
        }
        final boolean didRemove = !removedAlarms.isEmpty();
                (Alarm a) -> UserHandle.getUserId(a.uid) == userHandle;
        removeAlarmsInternalLocked(whichAlarms);

        for (int i = mPendingBackgroundAlarms.size() - 1; i >= 0; i--) {
            if (UserHandle.getUserId(mPendingBackgroundAlarms.keyAt(i)) == userHandle) {
                final ArrayList<Alarm> toRemove = mPendingBackgroundAlarms.valueAt(i);
                if (toRemove != null) {
                    for (int j = 0; j < toRemove.size(); j++) {
                        decrementAlarmCount(toRemove.get(j).uid, 1);
                    }
                }
                mPendingBackgroundAlarms.removeAt(i);
            }
        }
        for (int i = mLastPriorityAlarmDispatch.size() - 1; i >= 0; i--) {
            if (UserHandle.getUserId(mLastPriorityAlarmDispatch.keyAt(i)) == userHandle) {
                mLastPriorityAlarmDispatch.removeAt(i);
            }
        }
        if (mNextWakeFromIdle != null && whichAlarms.test(mNextWakeFromIdle)) {
            mNextWakeFromIdle = mAlarmStore.getNextWakeFromIdleAlarm();
            if (mPendingIdleUntil != null) {
                final boolean updated = mAlarmStore.updateAlarmDeliveries(alarm -> {
                    if (alarm != mPendingIdleUntil) {
                        return false;
                    }
                    return adjustIdleUntilTime(alarm);
                });
                if (updated) {
                    mAlarmStore.updateAlarmDeliveries(
                            alarm -> adjustDeliveryTimeBasedOnDeviceIdle(alarm));
                }
            }
        }

        if (didRemove) {
            if (DEBUG_BATCH) {
                Slog.v(TAG, "remove(user) changed bounds; rebatching");
            }
            rescheduleKernelAlarmsLocked();
            updateNextAlarmClockLocked();
        }
    }

    void interactiveStateChangedLocked(boolean interactive) {