Loading apex/jobscheduler/framework/java/android/app/AlarmManager.java +11 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading
apex/jobscheduler/framework/java/android/app/AlarmManager.java +11 −5 Original line number Diff line number Diff line Loading @@ -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()); Loading
apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +3 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
services/tests/mockingservicestests/src/com/android/server/alarm/AlarmManagerServiceTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -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) { Loading