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

Commit 236f2686 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "canScheduleExactAlarms returns true for older apps" into sc-dev

parents 4c74c4e3 a7807022
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -1285,14 +1285,20 @@ public class AlarmManager {
    }

    /**
     * Called to check if the caller has the permission
     * {@link Manifest.permission#SCHEDULE_EXACT_ALARM}.
     *
     * Apps can start {@link android.provider.Settings#ACTION_REQUEST_SCHEDULE_EXACT_ALARM} to
     * Called to check if the caller can schedule exact alarms.
     * <p>
     * Apps targeting {@link Build.VERSION_CODES#S} or higher can schedule exact alarms if they
     * have the {@link Manifest.permission#SCHEDULE_EXACT_ALARM} permission. These apps can also
     * start {@link android.provider.Settings#ACTION_REQUEST_SCHEDULE_EXACT_ALARM} to
     * request this from the user.
     * <p>
     * Apps targeting lower sdk versions, can always schedule exact alarms.
     *
     * @return {@code true} if the caller has the permission, {@code false} otherwise.
     * @return {@code true} if the caller can schedule exact alarms.
     * @see android.provider.Settings#ACTION_REQUEST_SCHEDULE_EXACT_ALARM
     * @see #setExact(int, long, PendingIntent)
     * @see #setExactAndAllowWhileIdle(int, long, PendingIntent)
     * @see #setAlarmClock(AlarmClockInfo, PendingIntent)
     */
    public boolean canScheduleExactAlarms() {
        return hasScheduleExactAlarm(mContext.getOpPackageName(), mContext.getUserId());
+3 −0
Original line number Diff line number Diff line
@@ -2572,6 +2572,9 @@ public class AlarmManagerService extends SystemService {
                throw new SecurityException("Uid " + callingUid
                        + " cannot query hasScheduleExactAlarm for uid " + uid);
            }
            if (!isExactAlarmChangeEnabled(packageName, userId)) {
                return true;
            }
            return (uid > 0) ? hasScheduleExactAlarmInternal(packageName, uid) : false;
        }

+4 −4
Original line number Diff line number Diff line
@@ -1914,11 +1914,11 @@ public class AlarmManagerServiceTest {
    public void hasScheduleExactAlarmBinderCallChangeDisabled() throws RemoteException {
        mockChangeEnabled(AlarmManager.REQUIRE_EXACT_ALARM_PERMISSION, false);

        mockExactAlarmPermissionGrant(true, false, MODE_DEFAULT);
        assertFalse(mBinder.hasScheduleExactAlarm(TEST_CALLING_PACKAGE, TEST_CALLING_USER));
        mockExactAlarmPermissionGrant(false, true, MODE_DEFAULT);
        assertTrue(mBinder.hasScheduleExactAlarm(TEST_CALLING_PACKAGE, TEST_CALLING_USER));

        mockExactAlarmPermissionGrant(true, true, MODE_ALLOWED);
        assertFalse(mBinder.hasScheduleExactAlarm(TEST_CALLING_PACKAGE, TEST_CALLING_USER));
        mockExactAlarmPermissionGrant(true, false, MODE_ERRORED);
        assertTrue(mBinder.hasScheduleExactAlarm(TEST_CALLING_PACKAGE, TEST_CALLING_USER));
    }

    private void mockChangeEnabled(long changeId, boolean enabled) {