Merge "RESTRICT AUTOMERGE Allowlist alarm-clock alarms from pre-S apps for FGS"

This commit is contained in:
Treehugger Robot
2022-07-22 05:43:02 +00:00
committed by Gerrit Code Review
2 changed files with 12 additions and 3 deletions

View File

@@ -2523,7 +2523,11 @@ public class AlarmManagerService extends SystemService {
changeDisabled = true; changeDisabled = true;
needsPermission = false; needsPermission = false;
lowerQuota = allowWhileIdle; lowerQuota = allowWhileIdle;
idleOptions = allowWhileIdle ? mOptsWithFgs.toBundle() : null; idleOptions = (allowWhileIdle || (alarmClock != null))
// This avoids exceptions on existing alarms when the app upgrades to
// target S. Note that FGS from pre-S apps isn't restricted anyway.
? mOptsWithFgs.toBundle()
: null;
} }
if (needsPermission && !hasScheduleExactAlarmInternal(callingPackage, callingUid)) { if (needsPermission && !hasScheduleExactAlarmInternal(callingPackage, callingUid)) {
if (!isExemptFromExactAlarmPermission(callingUid)) { if (!isExemptFromExactAlarmPermission(callingUid)) {

View File

@@ -2204,10 +2204,15 @@ public class AlarmManagerServiceTest {
mBinder.set(TEST_CALLING_PACKAGE, RTC_WAKEUP, 1234, WINDOW_EXACT, 0, 0, mBinder.set(TEST_CALLING_PACKAGE, RTC_WAKEUP, 1234, WINDOW_EXACT, 0, 0,
alarmPi, null, null, null, alarmClock); alarmPi, null, null, null, alarmClock);
final ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
verify(mService).setImpl(eq(RTC_WAKEUP), eq(1234L), eq(WINDOW_EXACT), eq(0L), verify(mService).setImpl(eq(RTC_WAKEUP), eq(1234L), eq(WINDOW_EXACT), eq(0L),
eq(alarmPi), isNull(), isNull(), eq(FLAG_STANDALONE | FLAG_WAKE_FROM_IDLE), eq(alarmPi), isNull(), isNull(), eq(FLAG_STANDALONE | FLAG_WAKE_FROM_IDLE),
isNull(), eq(alarmClock), eq(TEST_CALLING_UID), eq(TEST_CALLING_PACKAGE), isNull(), isNull(), eq(alarmClock), eq(TEST_CALLING_UID), eq(TEST_CALLING_PACKAGE),
eq(EXACT_ALLOW_REASON_COMPAT)); bundleCaptor.capture(), eq(EXACT_ALLOW_REASON_COMPAT));
final BroadcastOptions idleOptions = new BroadcastOptions(bundleCaptor.getValue());
final int type = idleOptions.getTemporaryAppAllowlistType();
assertEquals(TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED, type);
} }
@Test @Test