Loading apex/jobscheduler/service/java/com/android/server/job/GrantedUriPermissions.java +14 −15 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.job; import android.app.IActivityManager; import android.app.UriGrantsManager; import android.content.ClipData; import android.content.ContentProvider; Loading @@ -40,7 +39,7 @@ public final class GrantedUriPermissions { private final IBinder mPermissionOwner; private final ArrayList<Uri> mUris = new ArrayList<>(); private GrantedUriPermissions(IActivityManager am, int grantFlags, int uid, String tag) private GrantedUriPermissions(int grantFlags, int uid, String tag) throws RemoteException { mGrantFlags = grantFlags; mSourceUserId = UserHandle.getUserId(uid); Loading @@ -49,7 +48,7 @@ public final class GrantedUriPermissions { .getService(UriGrantsManagerInternal.class).newUriPermissionOwner("job: " + tag); } public void revoke(IActivityManager am) { public void revoke() { for (int i = mUris.size()-1; i >= 0; i--) { LocalServices.getService(UriGrantsManagerInternal.class).revokeUriPermissionFromOwner( mPermissionOwner, mUris.get(i), mGrantFlags, mSourceUserId); Loading @@ -62,7 +61,7 @@ public final class GrantedUriPermissions { |Intent.FLAG_GRANT_READ_URI_PERMISSION)) != 0; } public static GrantedUriPermissions createFromIntent(IActivityManager am, Intent intent, public static GrantedUriPermissions createFromIntent(Intent intent, int sourceUid, String targetPackage, int targetUserId, String tag) { int grantFlags = intent.getFlags(); if (!checkGrantFlags(grantFlags)) { Loading @@ -73,44 +72,44 @@ public final class GrantedUriPermissions { Uri data = intent.getData(); if (data != null) { perms = grantUri(am, data, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms = grantUri(data, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms); } ClipData clip = intent.getClipData(); if (clip != null) { perms = grantClip(am, clip, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms = grantClip(clip, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms); } return perms; } public static GrantedUriPermissions createFromClip(IActivityManager am, ClipData clip, public static GrantedUriPermissions createFromClip(ClipData clip, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag) { if (!checkGrantFlags(grantFlags)) { return null; } GrantedUriPermissions perms = null; if (clip != null) { perms = grantClip(am, clip, sourceUid, targetPackage, targetUserId, grantFlags, perms = grantClip(clip, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms); } return perms; } private static GrantedUriPermissions grantClip(IActivityManager am, ClipData clip, private static GrantedUriPermissions grantClip(ClipData clip, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag, GrantedUriPermissions curPerms) { final int N = clip.getItemCount(); for (int i = 0; i < N; i++) { curPerms = grantItem(am, clip.getItemAt(i), sourceUid, targetPackage, targetUserId, curPerms = grantItem(clip.getItemAt(i), sourceUid, targetPackage, targetUserId, grantFlags, tag, curPerms); } return curPerms; } private static GrantedUriPermissions grantUri(IActivityManager am, Uri uri, private static GrantedUriPermissions grantUri(Uri uri, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag, GrantedUriPermissions curPerms) { try { Loading @@ -118,7 +117,7 @@ public final class GrantedUriPermissions { UserHandle.getUserId(sourceUid)); uri = ContentProvider.getUriWithoutUserId(uri); if (curPerms == null) { curPerms = new GrantedUriPermissions(am, grantFlags, sourceUid, tag); curPerms = new GrantedUriPermissions(grantFlags, sourceUid, tag); } UriGrantsManager.getService().grantUriPermissionFromOwner(curPerms.mPermissionOwner, sourceUid, targetPackage, uri, grantFlags, sourceUserId, targetUserId); Loading @@ -129,16 +128,16 @@ public final class GrantedUriPermissions { return curPerms; } private static GrantedUriPermissions grantItem(IActivityManager am, ClipData.Item item, private static GrantedUriPermissions grantItem(ClipData.Item item, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag, GrantedUriPermissions curPerms) { if (item.getUri() != null) { curPerms = grantUri(am, item.getUri(), sourceUid, targetPackage, targetUserId, curPerms = grantUri(item.getUri(), sourceUid, targetPackage, targetUserId, grantFlags, tag, curPerms); } Intent intent = item.getIntent(); if (intent != null && intent.getData() != null) { curPerms = grantUri(am, intent.getData(), sourceUid, targetPackage, targetUserId, curPerms = grantUri(intent.getData(), sourceUid, targetPackage, targetUserId, grantFlags, tag, curPerms); } return curPerms; Loading apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +8 −8 Original line number Diff line number Diff line Loading @@ -963,7 +963,7 @@ public class JobSchedulerService extends com.android.server.SystemService // changing. We can just directly enqueue this work in to the job. if (toCancel.getJob().equals(job)) { toCancel.enqueueWorkLocked(ActivityManager.getService(), work); toCancel.enqueueWorkLocked(work); // If any of work item is enqueued when the source is in the foreground, // exempt the entire job. Loading Loading @@ -992,11 +992,11 @@ public class JobSchedulerService extends com.android.server.SystemService } // This may throw a SecurityException. jobStatus.prepareLocked(ActivityManager.getService()); jobStatus.prepareLocked(); if (work != null) { // If work has been supplied, enqueue it into the new job. jobStatus.enqueueWorkLocked(ActivityManager.getService(), work); jobStatus.enqueueWorkLocked(work); } if (toCancel != null) { Loading Loading @@ -1144,7 +1144,7 @@ public class JobSchedulerService extends com.android.server.SystemService */ private void cancelJobImplLocked(JobStatus cancelled, JobStatus incomingJob, String reason) { if (DEBUG) Slog.d(TAG, "CANCEL: " + cancelled.toShortString()); cancelled.unprepareLocked(ActivityManager.getService()); cancelled.unprepareLocked(); stopTrackingJobLocked(cancelled, incomingJob, true /* writeBack */); // Remove from pending queue. if (mPendingJobs.remove(cancelled)) { Loading Loading @@ -1449,7 +1449,7 @@ public class JobSchedulerService extends com.android.server.SystemService private boolean stopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob, boolean removeFromPersisted) { // Deal with any remaining work items in the old job. jobStatus.stopTrackingJobLocked(ActivityManager.getService(), incomingJob); jobStatus.stopTrackingJobLocked(incomingJob); // Remove from store as well as controllers. final boolean removed = mJobs.remove(jobStatus, removeFromPersisted); Loading Loading @@ -1705,7 +1705,7 @@ public class JobSchedulerService extends com.android.server.SystemService if (rescheduledJob != null) { try { rescheduledJob.prepareLocked(ActivityManager.getService()); rescheduledJob.prepareLocked(); } catch (SecurityException e) { Slog.w(TAG, "Unable to regrant job permissions for " + rescheduledJob); } Loading @@ -1713,13 +1713,13 @@ public class JobSchedulerService extends com.android.server.SystemService } else if (jobStatus.getJob().isPeriodic()) { JobStatus rescheduledPeriodic = getRescheduleJobForPeriodic(jobStatus); try { rescheduledPeriodic.prepareLocked(ActivityManager.getService()); rescheduledPeriodic.prepareLocked(); } catch (SecurityException e) { Slog.w(TAG, "Unable to regrant job permissions for " + rescheduledPeriodic); } startTrackingJobLocked(rescheduledPeriodic, jobStatus); } jobStatus.unprepareLocked(ActivityManager.getService()); jobStatus.unprepareLocked(); reportActiveLocked(); mHandler.obtainMessage(MSG_CHECK_JOB_GREEDY).sendToTarget(); } Loading apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +1 −2 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server.job; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.ActivityManager; import android.app.job.IJobCallback; import android.app.job.IJobService; import android.app.job.JobInfo; Loading Loading @@ -389,7 +388,7 @@ public final class JobServiceContext implements ServiceConnection { try { synchronized (mLock) { assertCallerLocked(cb); return mRunningJob.completeWorkLocked(ActivityManager.getService(), workId); return mRunningJob.completeWorkLocked(workId); } } finally { Binder.restoreCallingIdentity(ident); Loading apex/jobscheduler/service/java/com/android/server/job/JobStore.java +2 −6 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import static com.android.server.job.JobSchedulerService.sSystemClock; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.IActivityManager; import android.app.job.JobInfo; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -180,7 +178,6 @@ public final class JobStore { public void getRtcCorrectedJobsLocked(final ArrayList<JobStatus> toAdd, final ArrayList<JobStatus> toRemove) { final long elapsedNow = sElapsedRealtimeClock.millis(); final IActivityManager am = ActivityManager.getService(); // Find the jobs that need to be fixed up, collecting them for post-iteration // replacement with their new versions Loading @@ -192,7 +189,7 @@ public final class JobStore { JobStatus newJob = new JobStatus(job, elapsedRuntimes.first, elapsedRuntimes.second, 0, job.getLastSuccessfulRunTime(), job.getLastFailedRunTime()); newJob.prepareLocked(am); newJob.prepareLocked(); toAdd.add(newJob); toRemove.add(job); } Loading Loading @@ -667,10 +664,9 @@ public final class JobStore { jobs = readJobMapImpl(fis, rtcGood); if (jobs != null) { long now = sElapsedRealtimeClock.millis(); IActivityManager am = ActivityManager.getService(); for (int i=0; i<jobs.size(); i++) { JobStatus js = jobs.get(i); js.prepareLocked(am); js.prepareLocked(); js.enqueueTime = now; this.jobSet.add(js); Loading apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +15 −16 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import static com.android.server.job.JobSchedulerService.ACTIVE_INDEX; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.AppGlobals; import android.app.IActivityManager; import android.app.job.JobInfo; import android.app.job.JobWorkItem; import android.content.ClipData; Loading Loading @@ -528,7 +527,7 @@ public final class JobStatus { /*innerFlags=*/ 0); } public void enqueueWorkLocked(IActivityManager am, JobWorkItem work) { public void enqueueWorkLocked(JobWorkItem work) { if (pendingWork == null) { pendingWork = new ArrayList<>(); } Loading @@ -536,7 +535,7 @@ public final class JobStatus { nextPendingWorkId++; if (work.getIntent() != null && GrantedUriPermissions.checkGrantFlags(work.getIntent().getFlags())) { work.setGrants(GrantedUriPermissions.createFromIntent(am, work.getIntent(), sourceUid, work.setGrants(GrantedUriPermissions.createFromIntent(work.getIntent(), sourceUid, sourcePackageName, sourceUserId, toShortString())); } pendingWork.add(work); Loading Loading @@ -567,20 +566,20 @@ public final class JobStatus { return executingWork != null && executingWork.size() > 0; } private static void ungrantWorkItem(IActivityManager am, JobWorkItem work) { private static void ungrantWorkItem(JobWorkItem work) { if (work.getGrants() != null) { ((GrantedUriPermissions)work.getGrants()).revoke(am); ((GrantedUriPermissions)work.getGrants()).revoke(); } } public boolean completeWorkLocked(IActivityManager am, int workId) { public boolean completeWorkLocked(int workId) { if (executingWork != null) { final int N = executingWork.size(); for (int i = 0; i < N; i++) { JobWorkItem work = executingWork.get(i); if (work.getWorkId() == workId) { executingWork.remove(i); ungrantWorkItem(am, work); ungrantWorkItem(work); return true; } } Loading @@ -588,16 +587,16 @@ public final class JobStatus { return false; } private static void ungrantWorkList(IActivityManager am, ArrayList<JobWorkItem> list) { private static void ungrantWorkList(ArrayList<JobWorkItem> list) { if (list != null) { final int N = list.size(); for (int i = 0; i < N; i++) { ungrantWorkItem(am, list.get(i)); ungrantWorkItem(list.get(i)); } } } public void stopTrackingJobLocked(IActivityManager am, JobStatus incomingJob) { public void stopTrackingJobLocked(JobStatus incomingJob) { if (incomingJob != null) { // We are replacing with a new job -- transfer the work! We do any executing // work first, since that was originally at the front of the pending work. Loading @@ -615,15 +614,15 @@ public final class JobStatus { incomingJob.updateEstimatedNetworkBytesLocked(); } else { // We are completely stopping the job... need to clean up work. ungrantWorkList(am, pendingWork); ungrantWorkList(pendingWork); pendingWork = null; ungrantWorkList(am, executingWork); ungrantWorkList(executingWork); executingWork = null; } updateEstimatedNetworkBytesLocked(); } public void prepareLocked(IActivityManager am) { public void prepareLocked() { if (prepared) { Slog.wtf(TAG, "Already prepared: " + this); return; Loading @@ -634,12 +633,12 @@ public final class JobStatus { } final ClipData clip = job.getClipData(); if (clip != null) { uriPerms = GrantedUriPermissions.createFromClip(am, clip, sourceUid, sourcePackageName, uriPerms = GrantedUriPermissions.createFromClip(clip, sourceUid, sourcePackageName, sourceUserId, job.getClipGrantFlags(), toShortString()); } } public void unprepareLocked(IActivityManager am) { public void unprepareLocked() { if (!prepared) { Slog.wtf(TAG, "Hasn't been prepared: " + this); if (DEBUG_PREPARE && unpreparedPoint != null) { Loading @@ -652,7 +651,7 @@ public final class JobStatus { unpreparedPoint = new Throwable().fillInStackTrace(); } if (uriPerms != null) { uriPerms.revoke(am); uriPerms.revoke(); uriPerms = null; } } Loading Loading
apex/jobscheduler/service/java/com/android/server/job/GrantedUriPermissions.java +14 −15 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package com.android.server.job; import android.app.IActivityManager; import android.app.UriGrantsManager; import android.content.ClipData; import android.content.ContentProvider; Loading @@ -40,7 +39,7 @@ public final class GrantedUriPermissions { private final IBinder mPermissionOwner; private final ArrayList<Uri> mUris = new ArrayList<>(); private GrantedUriPermissions(IActivityManager am, int grantFlags, int uid, String tag) private GrantedUriPermissions(int grantFlags, int uid, String tag) throws RemoteException { mGrantFlags = grantFlags; mSourceUserId = UserHandle.getUserId(uid); Loading @@ -49,7 +48,7 @@ public final class GrantedUriPermissions { .getService(UriGrantsManagerInternal.class).newUriPermissionOwner("job: " + tag); } public void revoke(IActivityManager am) { public void revoke() { for (int i = mUris.size()-1; i >= 0; i--) { LocalServices.getService(UriGrantsManagerInternal.class).revokeUriPermissionFromOwner( mPermissionOwner, mUris.get(i), mGrantFlags, mSourceUserId); Loading @@ -62,7 +61,7 @@ public final class GrantedUriPermissions { |Intent.FLAG_GRANT_READ_URI_PERMISSION)) != 0; } public static GrantedUriPermissions createFromIntent(IActivityManager am, Intent intent, public static GrantedUriPermissions createFromIntent(Intent intent, int sourceUid, String targetPackage, int targetUserId, String tag) { int grantFlags = intent.getFlags(); if (!checkGrantFlags(grantFlags)) { Loading @@ -73,44 +72,44 @@ public final class GrantedUriPermissions { Uri data = intent.getData(); if (data != null) { perms = grantUri(am, data, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms = grantUri(data, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms); } ClipData clip = intent.getClipData(); if (clip != null) { perms = grantClip(am, clip, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms = grantClip(clip, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms); } return perms; } public static GrantedUriPermissions createFromClip(IActivityManager am, ClipData clip, public static GrantedUriPermissions createFromClip(ClipData clip, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag) { if (!checkGrantFlags(grantFlags)) { return null; } GrantedUriPermissions perms = null; if (clip != null) { perms = grantClip(am, clip, sourceUid, targetPackage, targetUserId, grantFlags, perms = grantClip(clip, sourceUid, targetPackage, targetUserId, grantFlags, tag, perms); } return perms; } private static GrantedUriPermissions grantClip(IActivityManager am, ClipData clip, private static GrantedUriPermissions grantClip(ClipData clip, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag, GrantedUriPermissions curPerms) { final int N = clip.getItemCount(); for (int i = 0; i < N; i++) { curPerms = grantItem(am, clip.getItemAt(i), sourceUid, targetPackage, targetUserId, curPerms = grantItem(clip.getItemAt(i), sourceUid, targetPackage, targetUserId, grantFlags, tag, curPerms); } return curPerms; } private static GrantedUriPermissions grantUri(IActivityManager am, Uri uri, private static GrantedUriPermissions grantUri(Uri uri, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag, GrantedUriPermissions curPerms) { try { Loading @@ -118,7 +117,7 @@ public final class GrantedUriPermissions { UserHandle.getUserId(sourceUid)); uri = ContentProvider.getUriWithoutUserId(uri); if (curPerms == null) { curPerms = new GrantedUriPermissions(am, grantFlags, sourceUid, tag); curPerms = new GrantedUriPermissions(grantFlags, sourceUid, tag); } UriGrantsManager.getService().grantUriPermissionFromOwner(curPerms.mPermissionOwner, sourceUid, targetPackage, uri, grantFlags, sourceUserId, targetUserId); Loading @@ -129,16 +128,16 @@ public final class GrantedUriPermissions { return curPerms; } private static GrantedUriPermissions grantItem(IActivityManager am, ClipData.Item item, private static GrantedUriPermissions grantItem(ClipData.Item item, int sourceUid, String targetPackage, int targetUserId, int grantFlags, String tag, GrantedUriPermissions curPerms) { if (item.getUri() != null) { curPerms = grantUri(am, item.getUri(), sourceUid, targetPackage, targetUserId, curPerms = grantUri(item.getUri(), sourceUid, targetPackage, targetUserId, grantFlags, tag, curPerms); } Intent intent = item.getIntent(); if (intent != null && intent.getData() != null) { curPerms = grantUri(am, intent.getData(), sourceUid, targetPackage, targetUserId, curPerms = grantUri(intent.getData(), sourceUid, targetPackage, targetUserId, grantFlags, tag, curPerms); } return curPerms; Loading
apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +8 −8 Original line number Diff line number Diff line Loading @@ -963,7 +963,7 @@ public class JobSchedulerService extends com.android.server.SystemService // changing. We can just directly enqueue this work in to the job. if (toCancel.getJob().equals(job)) { toCancel.enqueueWorkLocked(ActivityManager.getService(), work); toCancel.enqueueWorkLocked(work); // If any of work item is enqueued when the source is in the foreground, // exempt the entire job. Loading Loading @@ -992,11 +992,11 @@ public class JobSchedulerService extends com.android.server.SystemService } // This may throw a SecurityException. jobStatus.prepareLocked(ActivityManager.getService()); jobStatus.prepareLocked(); if (work != null) { // If work has been supplied, enqueue it into the new job. jobStatus.enqueueWorkLocked(ActivityManager.getService(), work); jobStatus.enqueueWorkLocked(work); } if (toCancel != null) { Loading Loading @@ -1144,7 +1144,7 @@ public class JobSchedulerService extends com.android.server.SystemService */ private void cancelJobImplLocked(JobStatus cancelled, JobStatus incomingJob, String reason) { if (DEBUG) Slog.d(TAG, "CANCEL: " + cancelled.toShortString()); cancelled.unprepareLocked(ActivityManager.getService()); cancelled.unprepareLocked(); stopTrackingJobLocked(cancelled, incomingJob, true /* writeBack */); // Remove from pending queue. if (mPendingJobs.remove(cancelled)) { Loading Loading @@ -1449,7 +1449,7 @@ public class JobSchedulerService extends com.android.server.SystemService private boolean stopTrackingJobLocked(JobStatus jobStatus, JobStatus incomingJob, boolean removeFromPersisted) { // Deal with any remaining work items in the old job. jobStatus.stopTrackingJobLocked(ActivityManager.getService(), incomingJob); jobStatus.stopTrackingJobLocked(incomingJob); // Remove from store as well as controllers. final boolean removed = mJobs.remove(jobStatus, removeFromPersisted); Loading Loading @@ -1705,7 +1705,7 @@ public class JobSchedulerService extends com.android.server.SystemService if (rescheduledJob != null) { try { rescheduledJob.prepareLocked(ActivityManager.getService()); rescheduledJob.prepareLocked(); } catch (SecurityException e) { Slog.w(TAG, "Unable to regrant job permissions for " + rescheduledJob); } Loading @@ -1713,13 +1713,13 @@ public class JobSchedulerService extends com.android.server.SystemService } else if (jobStatus.getJob().isPeriodic()) { JobStatus rescheduledPeriodic = getRescheduleJobForPeriodic(jobStatus); try { rescheduledPeriodic.prepareLocked(ActivityManager.getService()); rescheduledPeriodic.prepareLocked(); } catch (SecurityException e) { Slog.w(TAG, "Unable to regrant job permissions for " + rescheduledPeriodic); } startTrackingJobLocked(rescheduledPeriodic, jobStatus); } jobStatus.unprepareLocked(ActivityManager.getService()); jobStatus.unprepareLocked(); reportActiveLocked(); mHandler.obtainMessage(MSG_CHECK_JOB_GREEDY).sendToTarget(); } Loading
apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +1 −2 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server.job; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.ActivityManager; import android.app.job.IJobCallback; import android.app.job.IJobService; import android.app.job.JobInfo; Loading Loading @@ -389,7 +388,7 @@ public final class JobServiceContext implements ServiceConnection { try { synchronized (mLock) { assertCallerLocked(cb); return mRunningJob.completeWorkLocked(ActivityManager.getService(), workId); return mRunningJob.completeWorkLocked(workId); } } finally { Binder.restoreCallingIdentity(ident); Loading
apex/jobscheduler/service/java/com/android/server/job/JobStore.java +2 −6 Original line number Diff line number Diff line Loading @@ -20,8 +20,6 @@ import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import static com.android.server.job.JobSchedulerService.sSystemClock; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.IActivityManager; import android.app.job.JobInfo; import android.content.ComponentName; import android.content.Context; Loading Loading @@ -180,7 +178,6 @@ public final class JobStore { public void getRtcCorrectedJobsLocked(final ArrayList<JobStatus> toAdd, final ArrayList<JobStatus> toRemove) { final long elapsedNow = sElapsedRealtimeClock.millis(); final IActivityManager am = ActivityManager.getService(); // Find the jobs that need to be fixed up, collecting them for post-iteration // replacement with their new versions Loading @@ -192,7 +189,7 @@ public final class JobStore { JobStatus newJob = new JobStatus(job, elapsedRuntimes.first, elapsedRuntimes.second, 0, job.getLastSuccessfulRunTime(), job.getLastFailedRunTime()); newJob.prepareLocked(am); newJob.prepareLocked(); toAdd.add(newJob); toRemove.add(job); } Loading Loading @@ -667,10 +664,9 @@ public final class JobStore { jobs = readJobMapImpl(fis, rtcGood); if (jobs != null) { long now = sElapsedRealtimeClock.millis(); IActivityManager am = ActivityManager.getService(); for (int i=0; i<jobs.size(); i++) { JobStatus js = jobs.get(i); js.prepareLocked(am); js.prepareLocked(); js.enqueueTime = now; this.jobSet.add(js); Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +15 −16 Original line number Diff line number Diff line Loading @@ -20,7 +20,6 @@ import static com.android.server.job.JobSchedulerService.ACTIVE_INDEX; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.AppGlobals; import android.app.IActivityManager; import android.app.job.JobInfo; import android.app.job.JobWorkItem; import android.content.ClipData; Loading Loading @@ -528,7 +527,7 @@ public final class JobStatus { /*innerFlags=*/ 0); } public void enqueueWorkLocked(IActivityManager am, JobWorkItem work) { public void enqueueWorkLocked(JobWorkItem work) { if (pendingWork == null) { pendingWork = new ArrayList<>(); } Loading @@ -536,7 +535,7 @@ public final class JobStatus { nextPendingWorkId++; if (work.getIntent() != null && GrantedUriPermissions.checkGrantFlags(work.getIntent().getFlags())) { work.setGrants(GrantedUriPermissions.createFromIntent(am, work.getIntent(), sourceUid, work.setGrants(GrantedUriPermissions.createFromIntent(work.getIntent(), sourceUid, sourcePackageName, sourceUserId, toShortString())); } pendingWork.add(work); Loading Loading @@ -567,20 +566,20 @@ public final class JobStatus { return executingWork != null && executingWork.size() > 0; } private static void ungrantWorkItem(IActivityManager am, JobWorkItem work) { private static void ungrantWorkItem(JobWorkItem work) { if (work.getGrants() != null) { ((GrantedUriPermissions)work.getGrants()).revoke(am); ((GrantedUriPermissions)work.getGrants()).revoke(); } } public boolean completeWorkLocked(IActivityManager am, int workId) { public boolean completeWorkLocked(int workId) { if (executingWork != null) { final int N = executingWork.size(); for (int i = 0; i < N; i++) { JobWorkItem work = executingWork.get(i); if (work.getWorkId() == workId) { executingWork.remove(i); ungrantWorkItem(am, work); ungrantWorkItem(work); return true; } } Loading @@ -588,16 +587,16 @@ public final class JobStatus { return false; } private static void ungrantWorkList(IActivityManager am, ArrayList<JobWorkItem> list) { private static void ungrantWorkList(ArrayList<JobWorkItem> list) { if (list != null) { final int N = list.size(); for (int i = 0; i < N; i++) { ungrantWorkItem(am, list.get(i)); ungrantWorkItem(list.get(i)); } } } public void stopTrackingJobLocked(IActivityManager am, JobStatus incomingJob) { public void stopTrackingJobLocked(JobStatus incomingJob) { if (incomingJob != null) { // We are replacing with a new job -- transfer the work! We do any executing // work first, since that was originally at the front of the pending work. Loading @@ -615,15 +614,15 @@ public final class JobStatus { incomingJob.updateEstimatedNetworkBytesLocked(); } else { // We are completely stopping the job... need to clean up work. ungrantWorkList(am, pendingWork); ungrantWorkList(pendingWork); pendingWork = null; ungrantWorkList(am, executingWork); ungrantWorkList(executingWork); executingWork = null; } updateEstimatedNetworkBytesLocked(); } public void prepareLocked(IActivityManager am) { public void prepareLocked() { if (prepared) { Slog.wtf(TAG, "Already prepared: " + this); return; Loading @@ -634,12 +633,12 @@ public final class JobStatus { } final ClipData clip = job.getClipData(); if (clip != null) { uriPerms = GrantedUriPermissions.createFromClip(am, clip, sourceUid, sourcePackageName, uriPerms = GrantedUriPermissions.createFromClip(clip, sourceUid, sourcePackageName, sourceUserId, job.getClipGrantFlags(), toShortString()); } } public void unprepareLocked(IActivityManager am) { public void unprepareLocked() { if (!prepared) { Slog.wtf(TAG, "Hasn't been prepared: " + this); if (DEBUG_PREPARE && unpreparedPoint != null) { Loading @@ -652,7 +651,7 @@ public final class JobStatus { unpreparedPoint = new Throwable().fillInStackTrace(); } if (uriPerms != null) { uriPerms.revoke(am); uriPerms.revoke(); uriPerms = null; } } Loading