diff options
| author | 2022-07-22 05:43:02 +0000 | |
|---|---|---|
| committer | 2022-07-22 05:43:02 +0000 | |
| commit | 337bb720f4f0890c1ff4b0b0e10ac756da36472c (patch) | |
| tree | 0c539ec81a1f4eb7323b6065b3ceb11904bd607b | |
| parent | 584338ea98273df82df5bc33ba137a0470cc82d6 (diff) | |
| parent | 116ec3b913896460b99ba1231fa7691b622f234a (diff) | |
Merge "RESTRICT AUTOMERGE Allowlist alarm-clock alarms from pre-S apps for FGS"
| -rw-r--r-- | apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java | 6 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index c9b33aa4dafc..c063158cd216 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -2523,7 +2523,11 @@ public class AlarmManagerService extends SystemService { changeDisabled = true; needsPermission = false; 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 (!isExemptFromExactAlarmPermission(callingUid)) { diff --git a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java index 32d9247216c4..01ca49454de7 100644 --- a/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java @@ -2204,10 +2204,15 @@ public class AlarmManagerServiceTest { mBinder.set(TEST_CALLING_PACKAGE, RTC_WAKEUP, 1234, WINDOW_EXACT, 0, 0, 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), eq(alarmPi), isNull(), isNull(), eq(FLAG_STANDALONE | FLAG_WAKE_FROM_IDLE), - isNull(), eq(alarmClock), eq(TEST_CALLING_UID), eq(TEST_CALLING_PACKAGE), isNull(), - eq(EXACT_ALLOW_REASON_COMPAT)); + isNull(), eq(alarmClock), eq(TEST_CALLING_UID), eq(TEST_CALLING_PACKAGE), + 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 |