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

Commit 38838912 authored by Suprabh Shukla's avatar Suprabh Shukla Committed by Android (Google) Code Review
Browse files

Merge "Remove WORKING_SET elevation for SCHEDULE_EXACT_ALARM"

parents f8509b88 75878658
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -290,6 +290,17 @@ public class AlarmManager {
    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.TIRAMISU)
    public static final long SCHEDULE_EXACT_ALARM_DENIED_BY_DEFAULT = 226439802L;

    /**
     * Holding the permission {@link Manifest.permission#SCHEDULE_EXACT_ALARM} will no longer pin
     * the standby-bucket of the app to
     * {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_WORKING_SET} or better.
     *
     * @hide
     */
    @ChangeId
    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
    public static final long SCHEDULE_EXACT_ALARM_DOES_NOT_ELEVATE_BUCKET = 262645982L;

    @UnsupportedAppUsage
    private final IAlarmManager mService;
    private final Context mContext;
+5 −3
Original line number Diff line number Diff line
@@ -2704,9 +2704,11 @@ public class AlarmManagerService extends SystemService {
        }

        @Override
        public boolean hasExactAlarmPermission(String packageName, int uid) {
            return hasScheduleExactAlarmInternal(packageName, uid)
                    || hasUseExactAlarmInternal(packageName, uid);
        public boolean shouldGetBucketElevation(String packageName, int uid) {
            return hasUseExactAlarmInternal(packageName, uid) || (!CompatChanges.isChangeEnabled(
                    AlarmManager.SCHEDULE_EXACT_ALARM_DOES_NOT_ELEVATE_BUCKET, packageName,
                    UserHandle.getUserHandleForUid(uid)) && hasScheduleExactAlarmInternal(
                    packageName, uid));
        }

        @Override
+4 −3
Original line number Diff line number Diff line
@@ -1492,7 +1492,8 @@ public class AppStandbyController
                return STANDBY_BUCKET_WORKING_SET;
            }

            if (mInjector.hasExactAlarmPermission(packageName, UserHandle.getUid(userId, appId))) {
            if (mInjector.shouldGetExactAlarmBucketElevation(packageName,
                    UserHandle.getUid(userId, appId))) {
                return STANDBY_BUCKET_WORKING_SET;
            }
        }
@@ -2625,8 +2626,8 @@ public class AppStandbyController
            return packageName.equals(mWellbeingApp);
        }

        boolean hasExactAlarmPermission(String packageName, int uid) {
            return mAlarmManagerInternal.hasExactAlarmPermission(packageName, uid);
        boolean shouldGetExactAlarmBucketElevation(String packageName, int uid) {
            return mAlarmManagerInternal.shouldGetBucketElevation(packageName, uid);
        }

        void updatePowerWhitelistCache() {
+3 −2
Original line number Diff line number Diff line
@@ -4650,7 +4650,8 @@
         <p>Apps need to target API {@link android.os.Build.VERSION_CODES#S} or above to be able to
         request this permission. Note that apps targeting lower API levels do not need this
         permission to use exact alarm APIs.
         <p>Apps that hold this permission, always stay in the
         <p>Apps that hold this permission and target API
         {@link android.os.Build.VERSION_CODES#TIRAMISU} and below always stay in the
         {@link android.app.usage.UsageStatsManager#STANDBY_BUCKET_WORKING_SET WORKING_SET} or
         lower standby bucket.
         <p>If your app relies on exact alarms for core functionality, it can instead request
@@ -4676,7 +4677,7 @@
         <p> Apps need to target API {@link android.os.Build.VERSION_CODES#TIRAMISU} or above to be
         able to request this permission. Note that only one of {@code USE_EXACT_ALARM} or
         {@code SCHEDULE_EXACT_ALARM} should be requested on a device. If your app is already using
         {@code SCHEDULE_EXACT_ALARM} on older SDKs but need {@code USE_EXACT_ALARM} on SDK 33 and
         {@code SCHEDULE_EXACT_ALARM} on older SDKs but needs {@code USE_EXACT_ALARM} on SDK 33 and
         above, then {@code SCHEDULE_EXACT_ALARM} should be declared with a max-sdk attribute, like:
         <pre>
         &lt;uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"
+4 −4
Original line number Diff line number Diff line
@@ -47,11 +47,11 @@ public interface AlarmManagerInternal {
    void remove(PendingIntent rec);

    /**
     * Returns if the given package in the given user holds
     * {@link android.Manifest.permission#SCHEDULE_EXACT_ALARM} or
     * {@link android.Manifest.permission#USE_EXACT_ALARM}.
     * Returns {@code true} if the given package in the given uid holds
     * {@link android.Manifest.permission#USE_EXACT_ALARM} or
     * {@link android.Manifest.permission#SCHEDULE_EXACT_ALARM} for apps targeting T or lower.
     */
    boolean hasExactAlarmPermission(String packageName, int uid);
    boolean shouldGetBucketElevation(String packageName, int uid);

    /**
     * Sets the device's current time zone and time zone confidence.
Loading