RESTRICT AUTOMERGE Allowlist alarm-clock alarms from pre-S apps for FGS
FGS starts are allowed by default to apps targeting pre-S sdks. However, on update their alarms may start getting denied if the app could not reset its alarms. Explicitly adding them to the allowlist to avoid this problem. Test: atest FrameworksMockingServicesTests:AlarmManagerServiceTest Test: Manual, using steps listed in b/238407723 Bug: 239098759 Bug: 238407723 Change-Id: I895901f0c870b161a8a4df92ebe93c873a55abc9 Merged-In: I895901f0c870b161a8a4df92ebe93c873a55abc9
This commit is contained in:
@@ -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)) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user