Merge "canScheduleExactAlarms returns true for older apps" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
236f268650
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user