Merge "Do not specify a workSource when setting a delayed alarm so that the alarm can still wake the device up when the device is idle as the AlarmManager.FLAG_ALLOW_WHILE_IDLE_UNRESTRICTED flag indicates." into sc-dev

This commit is contained in:
Kate Montgomery
2021-07-16 20:36:18 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 4 deletions

View File

@@ -33,7 +33,6 @@ public abstract class AlarmHelper {
WorkSource workSource) { WorkSource workSource) {
// helps ensure that we're not wasting system resources by setting alarms in the past/now // helps ensure that we're not wasting system resources by setting alarms in the past/now
Preconditions.checkArgument(delayMs > 0); Preconditions.checkArgument(delayMs > 0);
Preconditions.checkArgument(workSource != null);
setDelayedAlarmInternal(delayMs, listener, workSource); setDelayedAlarmInternal(delayMs, listener, workSource);
} }

View File

@@ -735,8 +735,12 @@ public class LocationProviderManager extends
if (mExpirationRealtimeMs <= registerTimeMs) { if (mExpirationRealtimeMs <= registerTimeMs) {
onAlarm(); onAlarm();
} else if (mExpirationRealtimeMs < Long.MAX_VALUE) { } else if (mExpirationRealtimeMs < Long.MAX_VALUE) {
// Set WorkSource to null in order to ensure the alarm wakes up the device even when
// it is idle. Do this when the cost of waking up the device is less than the power
// cost of not performing the actions set off by the alarm, such as unregistering a
// location request.
mAlarmHelper.setDelayedAlarm(mExpirationRealtimeMs - registerTimeMs, this, mAlarmHelper.setDelayedAlarm(mExpirationRealtimeMs - registerTimeMs, this,
getRequest().getWorkSource()); null);
} }
// start listening for provider enabled/disabled events // start listening for provider enabled/disabled events
@@ -1122,8 +1126,12 @@ public class LocationProviderManager extends
if (mExpirationRealtimeMs <= registerTimeMs) { if (mExpirationRealtimeMs <= registerTimeMs) {
onAlarm(); onAlarm();
} else if (mExpirationRealtimeMs < Long.MAX_VALUE) { } else if (mExpirationRealtimeMs < Long.MAX_VALUE) {
// Set WorkSource to null in order to ensure the alarm wakes up the device even when
// it is idle. Do this when the cost of waking up the device is less than the power
// cost of not performing the actions set off by the alarm, such as unregistering a
// location request.
mAlarmHelper.setDelayedAlarm(mExpirationRealtimeMs - registerTimeMs, this, mAlarmHelper.setDelayedAlarm(mExpirationRealtimeMs - registerTimeMs, this,
getRequest().getWorkSource()); null);
} }
} }
@@ -1995,7 +2003,11 @@ public class LocationProviderManager extends
} }
} }
}; };
mAlarmHelper.setDelayedAlarm(delayMs, mDelayedRegister, newRequest.getWorkSource()); // Set WorkSource to null in order to ensure the alarm wakes up the device even when it
// is idle. Do this when the cost of waking up the device is less than the power cost of
// not performing the actions set off by the alarm, such as unregistering a location
// request.
mAlarmHelper.setDelayedAlarm(delayMs, mDelayedRegister, null);
} }
return true; return true;