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

Commit 384bb8bb authored by Varun Shah's avatar Varun Shah
Browse files

Add a new intent to navigate to the long background tasks page.

Also add a new API in JobScheduler to check if apps hold the permission.

Bug: 255821578
Test: manually
Change-Id: I4beeb7eb40b5e19fc95784b4a54031467e9bc780
parent 9ae00a02
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -102,6 +102,15 @@ public class JobSchedulerImpl extends JobScheduler {
        }
    }

    @Override
    public boolean hasRunLongJobsPermission(String packageName, int userId) {
        try {
            return mBinder.hasRunLongJobsPermission(packageName, userId);
        } catch (RemoteException e) {
            return false;
        }
    }

    @Override
    public List<JobInfo> getStartedJobs() {
        try {
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ interface IJobScheduler {
    void cancelAll();
    ParceledListSlice getAllPendingJobs();
    JobInfo getPendingJob(int jobId);
    boolean hasRunLongJobsPermission(String packageName, int userId);
    List<JobInfo> getStartedJobs();
    ParceledListSlice getAllJobSnapshots();
}
+10 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.UserIdInt;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledAfter;
import android.content.ClipData;
@@ -248,6 +249,15 @@ public abstract class JobScheduler {
     */
    public abstract @Nullable JobInfo getPendingJob(int jobId);

    /**
     * Returns {@code true} if the app currently holds the
     * {@link android.Manifest.permission#RUN_LONG_JOBS} permission, allowing it to run long jobs.
     * @hide
     */
    public boolean hasRunLongJobsPermission(@NonNull String packageName, @UserIdInt int userId) {
        return false;
    }

    /**
     * <b>For internal system callers only!</b>
     * Returns a list of all currently-executing jobs.
+19 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.IUidObserver;
import android.app.compat.CompatChanges;
import android.app.job.IJobScheduler;
@@ -304,6 +305,7 @@ public class JobSchedulerService extends com.android.server.SystemService
    final JobHandler mHandler;
    final JobSchedulerStub mJobSchedulerStub;

    private AppOpsManager mAppOps;
    PackageManagerInternal mLocalPM;
    ActivityManagerInternal mActivityManagerInternal;
    DeviceIdleInternal mLocalDeviceIdleController;
@@ -1804,6 +1806,8 @@ public class JobSchedulerService extends com.android.server.SystemService
                controller.onSystemServicesReady();
            }

            mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);

            mAppStateTracker = (AppStateTrackerImpl) Objects.requireNonNull(
                    LocalServices.getService(AppStateTracker.class));

@@ -3409,6 +3413,21 @@ public class JobSchedulerService extends com.android.server.SystemService
            }
        }

        @Override
        public boolean hasRunLongJobsPermission(@NonNull String packageName,
                @UserIdInt int userId) {
            final int uid = mLocalPM.getPackageUid(packageName, 0, userId);
            final int callingUid = Binder.getCallingUid();
            if (callingUid != uid && !UserHandle.isCore(callingUid)) {
                throw new SecurityException("Uid " + callingUid
                        + " cannot query canRunLongJobs for package " + packageName);
            }

            final int mode = mAppOps.checkOpNoThrow(AppOpsManager.OP_RUN_LONG_JOBS, uid,
                    packageName);
            return mode == AppOpsManager.MODE_ALLOWED || mode == AppOpsManager.MODE_DEFAULT;
        }

        /**
         * "dumpsys" infrastructure
         */
+1 −0
Original line number Diff line number Diff line
@@ -35818,6 +35818,7 @@ package android.provider {
    field public static final String ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS = "android.settings.MANAGE_ALL_SIM_PROFILES_SETTINGS";
    field public static final String ACTION_MANAGE_APPLICATIONS_SETTINGS = "android.settings.MANAGE_APPLICATIONS_SETTINGS";
    field public static final String ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION = "android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION";
    field public static final String ACTION_MANAGE_APP_LONG_JOBS = "android.settings.MANAGE_APP_LONG_JOBS";
    field public static final String ACTION_MANAGE_DEFAULT_APPS_SETTINGS = "android.settings.MANAGE_DEFAULT_APPS_SETTINGS";
    field public static final String ACTION_MANAGE_OVERLAY_PERMISSION = "android.settings.action.MANAGE_OVERLAY_PERMISSION";
    field public static final String ACTION_MANAGE_SUPERVISOR_RESTRICTED_SETTING = "android.settings.MANAGE_SUPERVISOR_RESTRICTED_SETTING";
Loading