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

Commit f10f9ea0 authored by David Christie's avatar David Christie
Browse files

Revert "Add WorkSource capability to AlarmManager"

This reverts commit 02600fb6.

Broke some tests.

Change-Id: Ic47b23a935bf90aba817073c27cd247306db7d5f
parent 02600fb6
Loading
Loading
Loading
Loading
+7 −15
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.RemoteException;
import android.os.WorkSource;

/**
 * This class provides access to the system alarm services.  These allow you
@@ -156,7 +155,7 @@ public class AlarmManager
     * @see #RTC_WAKEUP
     */
    public void set(int type, long triggerAtMillis, PendingIntent operation) {
        setImpl(type, triggerAtMillis, legacyExactLength(), 0, operation, null);
        setImpl(type, triggerAtMillis, legacyExactLength(), 0, operation);
    }

    /**
@@ -210,7 +209,7 @@ public class AlarmManager
     */
    public void setRepeating(int type, long triggerAtMillis,
            long intervalMillis, PendingIntent operation) {
        setImpl(type, triggerAtMillis, legacyExactLength(), intervalMillis, operation, null);
        setImpl(type, triggerAtMillis, legacyExactLength(), intervalMillis, operation);
    }

    /**
@@ -245,7 +244,7 @@ public class AlarmManager
     */
    public void setWindow(int type, long windowStartMillis, long windowLengthMillis,
            PendingIntent operation) {
        setImpl(type, windowStartMillis, windowLengthMillis, 0, operation, null);
        setImpl(type, windowStartMillis, windowLengthMillis, 0, operation);
    }

    /**
@@ -253,20 +252,13 @@ public class AlarmManager
     * to the precise time specified.
     */
    public void setExact(int type, long triggerAtMillis, PendingIntent operation) {
        setImpl(type, triggerAtMillis, WINDOW_EXACT, 0, operation, null);
    }

    /** @hide */
    public void set(int type, long triggerAtMillis, long windowMillis, long intervalMillis,
            PendingIntent operation, WorkSource workSource) {
        setImpl(type, triggerAtMillis, windowMillis, intervalMillis, operation, workSource);
        setImpl(type, triggerAtMillis, WINDOW_EXACT, 0, operation);
    }

    private void setImpl(int type, long triggerAtMillis, long windowMillis, long intervalMillis,
            PendingIntent operation, WorkSource workSource) {
            PendingIntent operation) {
        try {
            mService.set(type, triggerAtMillis, windowMillis, intervalMillis, operation,
                    workSource);
            mService.set(type, triggerAtMillis, windowMillis, intervalMillis, operation);
        } catch (RemoteException ex) {
        }
    }
@@ -359,7 +351,7 @@ public class AlarmManager
    @Deprecated
    public void setInexactRepeating(int type, long triggerAtMillis,
            long intervalMillis, PendingIntent operation) {
        setImpl(type, triggerAtMillis, WINDOW_HEURISTIC, intervalMillis, operation, null);
        setImpl(type, triggerAtMillis, WINDOW_HEURISTIC, intervalMillis, operation);
    }
    
    /**
+1 −2
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@
package android.app;

import android.app.PendingIntent;
import android.os.WorkSource;

/**
 * System private API for talking with the alarm manager service.
@@ -27,7 +26,7 @@ import android.os.WorkSource;
interface IAlarmManager {
	/** windowLength == 0 means exact; windowLength < 0 means the let the OS decide */
    void set(int type, long triggerAtTime, long windowLength,
            long interval, in PendingIntent operation, in WorkSource workSource);
            long interval, in PendingIntent operation);
    void setTime(long millis);
    void setTimeZone(String zone);
    void remove(in PendingIntent operation);
+18 −41
Original line number Diff line number Diff line
@@ -385,13 +385,13 @@ class AlarmManagerService extends IAlarmManager.Stub {
                    if (batch.standalone) {
                        // this will also be the only alarm in the batch
                        a = new Alarm(a.type, a.when, whenElapsed, maxElapsed,
                                a.repeatInterval, a.operation, a.workSource);
                                a.repeatInterval, a.operation);
                        Batch newBatch = new Batch(a);
                        newBatch.standalone = true;
                        addBatchLocked(mAlarmBatches, newBatch);
                    } else {
                        setImplLocked(a.type, a.when, whenElapsed, maxElapsed,
                                a.repeatInterval, a.operation, false, a.workSource);
                                a.repeatInterval, a.operation, false);
                    }
                }
            }
@@ -400,14 +400,12 @@ class AlarmManagerService extends IAlarmManager.Stub {

    private static final class InFlight extends Intent {
        final PendingIntent mPendingIntent;
        final WorkSource mWorkSource;
        final Pair<String, ComponentName> mTarget;
        final BroadcastStats mBroadcastStats;
        final FilterStats mFilterStats;

        InFlight(AlarmManagerService service, PendingIntent pendingIntent, WorkSource workSource) {
        InFlight(AlarmManagerService service, PendingIntent pendingIntent) {
            mPendingIntent = pendingIntent;
            mWorkSource = workSource;
            Intent intent = pendingIntent.getIntent();
            mTarget = intent != null
                    ? new Pair<String, ComponentName>(intent.getAction(), intent.getComponent())
@@ -504,17 +502,12 @@ class AlarmManagerService extends IAlarmManager.Stub {

    @Override
    public void set(int type, long triggerAtTime, long windowLength, long interval,
            PendingIntent operation, WorkSource workSource) {
        if (workSource != null) {
            mContext.enforceCallingPermission(
                    android.Manifest.permission.UPDATE_DEVICE_STATS,
                    "AlarmManager.set");
        }
        set(type, triggerAtTime, windowLength, interval, operation, false, workSource);
            PendingIntent operation) {
        set(type, triggerAtTime, windowLength, interval, operation, false);
    }

    public void set(int type, long triggerAtTime, long windowLength, long interval,
            PendingIntent operation, boolean isStandalone, WorkSource workSource) {
            PendingIntent operation, boolean isStandalone) {
        if (operation == null) {
            Slog.w(TAG, "set/setRepeating ignored because there is no intent");
            return;
@@ -551,13 +544,13 @@ class AlarmManagerService extends IAlarmManager.Stub {
                        + " interval=" + interval + " standalone=" + isStandalone);
            }
            setImplLocked(type, triggerAtTime, triggerElapsed, maxElapsed,
                    interval, operation, isStandalone, workSource);
                    interval, operation, isStandalone);
        }
    }

    private void setImplLocked(int type, long when, long whenElapsed, long maxWhen, long interval,
            PendingIntent operation, boolean isStandalone, WorkSource workSource) {
        Alarm a = new Alarm(type, when, whenElapsed, maxWhen, interval, operation, workSource);
            PendingIntent operation, boolean isStandalone) {
        Alarm a = new Alarm(type, when, whenElapsed, maxWhen, interval, operation);
        removeLocked(operation);

        final boolean reschedule;
@@ -969,8 +962,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
                    final long nextElapsed = alarm.whenElapsed + delta;
                    setImplLocked(alarm.type, alarm.when + delta, nextElapsed,
                            maxTriggerTime(nowELAPSED, nextElapsed, alarm.repeatInterval),
                            alarm.repeatInterval, alarm.operation, batch.standalone,
                            alarm.workSource);
                            alarm.repeatInterval, alarm.operation, batch.standalone);
                }

            }
@@ -1002,17 +994,15 @@ class AlarmManagerService extends IAlarmManager.Stub {
        public long maxWhen;        // also in the elapsed time base
        public long repeatInterval;
        public PendingIntent operation;
        public WorkSource workSource;
        
        public Alarm(int _type, long _when, long _whenElapsed, long _maxWhen,
                long _interval, PendingIntent _op, WorkSource _ws) {
                long _interval, PendingIntent _op) {
            type = _type;
            when = _when;
            whenElapsed = _whenElapsed;
            maxWhen = _maxWhen;
            repeatInterval = _interval;
            operation = _op;
            workSource = _ws;
        }

        @Override
@@ -1126,11 +1116,11 @@ class AlarmManagerService extends IAlarmManager.Stub {
                            
                            // we have an active broadcast so stay awake.
                            if (mBroadcastRefCount == 0) {
                                setWakelockWorkSource(alarm.operation, alarm.workSource);
                                setWakelockWorkSource(alarm.operation);
                                mWakeLock.acquire();
                            }
                            final InFlight inflight = new InFlight(AlarmManagerService.this,
                                    alarm.operation, alarm.workSource);
                                    alarm.operation);
                            mInFlight.add(inflight);
                            mBroadcastRefCount++;

@@ -1172,18 +1162,8 @@ class AlarmManagerService extends IAlarmManager.Stub {
        }
    }

    /**
     * Attribute blame for a WakeLock.
     * @param pi PendingIntent to attribute blame to if ws is null.
     * @param ws WorkSource to attribute blame.
     */
    void setWakelockWorkSource(PendingIntent pi, WorkSource ws) {
    void setWakelockWorkSource(PendingIntent pi) {
        try {
            if (ws != null) {
                mWakeLock.setWorkSource(ws);
                return;
            }

            final int uid = ActivityManagerNative.getDefault()
                    .getUidForIntentSender(pi.getTarget());
            if (uid >= 0) {
@@ -1266,9 +1246,8 @@ class AlarmManagerService extends IAlarmManager.Stub {
            // the top of the next minute.
            final long tickEventDelay = nextTime - currentTime;

            final WorkSource workSource = null; // Let system take blame for time tick events.
            set(ELAPSED_REALTIME, SystemClock.elapsedRealtime() + tickEventDelay, 0,
                    0, mTimeTickSender, true, workSource);
                    0, mTimeTickSender, true);
        }

        public void scheduleDateChangedEvent() {
@@ -1280,8 +1259,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
      
            final WorkSource workSource = null; // Let system take blame for date change events.
            set(RTC, calendar.getTimeInMillis(), 0, 0, mDateChangeSender, true, workSource);
            set(RTC, calendar.getTimeInMillis(), 0, 0, mDateChangeSender, true);
        }
    }
    
@@ -1397,8 +1375,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
                } else {
                    // the next of our alarms is now in flight.  reattribute the wakelock.
                    if (mInFlight.size() > 0) {
                        InFlight inFlight = mInFlight.get(0);
                        setWakelockWorkSource(inFlight.mPendingIntent, inFlight.mWorkSource);
                        setWakelockWorkSource(mInFlight.get(0).mPendingIntent);
                    } else {
                        // should never happen
                        mLog.w("Alarm wakelock still held but sent queue empty");