Loading apex/jobscheduler/framework/java/android/app/AlarmManager.java +23 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.compat.annotation.UnsupportedAppUsage; Loading Loading @@ -1132,12 +1133,31 @@ public class AlarmManager { } /** * Called to check if the caller has permission to use alarms set via {@link } * @return * 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 * request this from the user. * * @return {@code true} if the caller has the permission, {@code false} otherwise. * @see android.provider.Settings#ACTION_REQUEST_SCHEDULE_EXACT_ALARM */ public boolean canScheduleExactAlarms() { return hasScheduleExactAlarm(mContext.getOpPackageName(), mContext.getUserId()); } /** * Called to check if the given package in the given user has the permission * {@link Manifest.permission#SCHEDULE_EXACT_ALARM}. * * <p><em>Note: This is only for use by system components.</em> * * @hide */ @TestApi public boolean hasScheduleExactAlarm(@NonNull String packageName, int userId) { try { return mService.canScheduleExactAlarms(); return mService.hasScheduleExactAlarm(packageName, userId); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,6 @@ interface IAlarmManager { @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) AlarmManager.AlarmClockInfo getNextAlarmClock(int userId); long currentNetworkTimeMillis(); boolean canScheduleExactAlarms(); boolean hasScheduleExactAlarm(String packageName, int userId); int getConfigVersion(); } apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +165 −207 File changed.Preview size limit exceeded, changes collapsed. Show changes apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +11 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IBatteryStats; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ConcurrentUtils; import com.android.server.AlarmManagerInternal; import com.android.server.JobSchedulerBackgroundThread; import com.android.server.LocalServices; import com.android.server.pm.parsing.pkg.AndroidPackage; Loading Loading @@ -1191,6 +1192,10 @@ public class AppStandbyController if (mInjector.isWellbeingPackage(packageName)) { return STANDBY_BUCKET_WORKING_SET; } if (mInjector.hasScheduleExactAlarm(packageName, UserHandle.getUid(userId, appId))) { return STANDBY_BUCKET_WORKING_SET; } } // Check this last, as it can be the most expensive check Loading Loading @@ -2007,6 +2012,7 @@ public class AppStandbyController private PowerManager mPowerManager; private IDeviceIdleController mDeviceIdleController; private CrossProfileAppsInternal mCrossProfileAppsInternal; private AlarmManagerInternal mAlarmManagerInternal; int mBootPhase; /** * The minimum amount of time required since the last user interaction before an app can be Loading Loading @@ -2047,6 +2053,7 @@ public class AppStandbyController mBatteryManager = mContext.getSystemService(BatteryManager.class); mCrossProfileAppsInternal = LocalServices.getService( CrossProfileAppsInternal.class); mAlarmManagerInternal = LocalServices.getService(AlarmManagerInternal.class); final ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); Loading Loading @@ -2110,6 +2117,10 @@ public class AppStandbyController return mWellbeingApp != null && mWellbeingApp.equals(packageName); } boolean hasScheduleExactAlarm(String packageName, int uid) { return mAlarmManagerInternal.hasScheduleExactAlarm(packageName, uid); } void updatePowerWhitelistCache() { try { // Don't call out to DeviceIdleController with the lock held. Loading core/api/test-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,10 @@ package android.app { method public void onTaskRemovalStarted(int); } public class AlarmManager { method public boolean hasScheduleExactAlarm(@NonNull String, int); } public class AppDetailsActivity extends android.app.Activity { ctor public AppDetailsActivity(); } Loading Loading
apex/jobscheduler/framework/java/android/app/AlarmManager.java +23 −3 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.annotation.RequiresPermission; import android.annotation.SdkConstant; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledSince; import android.compat.annotation.UnsupportedAppUsage; Loading Loading @@ -1132,12 +1133,31 @@ public class AlarmManager { } /** * Called to check if the caller has permission to use alarms set via {@link } * @return * 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 * request this from the user. * * @return {@code true} if the caller has the permission, {@code false} otherwise. * @see android.provider.Settings#ACTION_REQUEST_SCHEDULE_EXACT_ALARM */ public boolean canScheduleExactAlarms() { return hasScheduleExactAlarm(mContext.getOpPackageName(), mContext.getUserId()); } /** * Called to check if the given package in the given user has the permission * {@link Manifest.permission#SCHEDULE_EXACT_ALARM}. * * <p><em>Note: This is only for use by system components.</em> * * @hide */ @TestApi public boolean hasScheduleExactAlarm(@NonNull String packageName, int userId) { try { return mService.canScheduleExactAlarms(); return mService.hasScheduleExactAlarm(packageName, userId); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading
apex/jobscheduler/framework/java/android/app/IAlarmManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -41,6 +41,6 @@ interface IAlarmManager { @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) AlarmManager.AlarmClockInfo getNextAlarmClock(int userId); long currentNetworkTimeMillis(); boolean canScheduleExactAlarms(); boolean hasScheduleExactAlarm(String packageName, int userId); int getConfigVersion(); }
apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +165 −207 File changed.Preview size limit exceeded, changes collapsed. Show changes
apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +11 −0 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IBatteryStats; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ConcurrentUtils; import com.android.server.AlarmManagerInternal; import com.android.server.JobSchedulerBackgroundThread; import com.android.server.LocalServices; import com.android.server.pm.parsing.pkg.AndroidPackage; Loading Loading @@ -1191,6 +1192,10 @@ public class AppStandbyController if (mInjector.isWellbeingPackage(packageName)) { return STANDBY_BUCKET_WORKING_SET; } if (mInjector.hasScheduleExactAlarm(packageName, UserHandle.getUid(userId, appId))) { return STANDBY_BUCKET_WORKING_SET; } } // Check this last, as it can be the most expensive check Loading Loading @@ -2007,6 +2012,7 @@ public class AppStandbyController private PowerManager mPowerManager; private IDeviceIdleController mDeviceIdleController; private CrossProfileAppsInternal mCrossProfileAppsInternal; private AlarmManagerInternal mAlarmManagerInternal; int mBootPhase; /** * The minimum amount of time required since the last user interaction before an app can be Loading Loading @@ -2047,6 +2053,7 @@ public class AppStandbyController mBatteryManager = mContext.getSystemService(BatteryManager.class); mCrossProfileAppsInternal = LocalServices.getService( CrossProfileAppsInternal.class); mAlarmManagerInternal = LocalServices.getService(AlarmManagerInternal.class); final ActivityManager activityManager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); Loading Loading @@ -2110,6 +2117,10 @@ public class AppStandbyController return mWellbeingApp != null && mWellbeingApp.equals(packageName); } boolean hasScheduleExactAlarm(String packageName, int uid) { return mAlarmManagerInternal.hasScheduleExactAlarm(packageName, uid); } void updatePowerWhitelistCache() { try { // Don't call out to DeviceIdleController with the lock held. Loading
core/api/test-current.txt +4 −0 Original line number Diff line number Diff line Loading @@ -204,6 +204,10 @@ package android.app { method public void onTaskRemovalStarted(int); } public class AlarmManager { method public boolean hasScheduleExactAlarm(@NonNull String, int); } public class AppDetailsActivity extends android.app.Activity { ctor public AppDetailsActivity(); } Loading