Loading services/core/java/com/android/server/job/JobSchedulerService.java +14 −13 Original line number Diff line number Diff line Loading @@ -520,11 +520,12 @@ public final class JobSchedulerService extends com.android.server.SystemService if (DEBUG) { Slog.d(TAG, "Receieved: " + action); } final String pkgName = getPackageName(intent); final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { // Purge the app's jobs if the whole package was just disabled. When this is // the case the component name will be a bare package name. final String pkgName = getPackageName(intent); final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); if (pkgName != null && pkgUid != -1) { final String[] changedComponents = intent.getStringArrayExtra( Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST); Loading @@ -544,7 +545,8 @@ public final class JobSchedulerService extends com.android.server.SystemService Slog.d(TAG, "Removing jobs for package " + pkgName + " in user " + userId); } cancelJobsForUid(pkgUid, "app package state changed"); cancelJobsForPackageAndUid(pkgName, pkgUid, "app disabled"); } } catch (RemoteException|IllegalArgumentException e) { /* Loading Loading @@ -573,7 +575,7 @@ public final class JobSchedulerService extends com.android.server.SystemService if (DEBUG) { Slog.d(TAG, "Removing jobs for uid: " + uidRemoved); } cancelJobsForUid(uidRemoved, "app uninstalled"); cancelJobsForPackageAndUid(pkgName, uidRemoved, "app uninstalled"); } } else if (Intent.ACTION_USER_REMOVED.equals(action)) { final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0); Loading @@ -584,8 +586,6 @@ public final class JobSchedulerService extends com.android.server.SystemService } else if (Intent.ACTION_QUERY_PACKAGE_RESTART.equals(action)) { // Has this package scheduled any jobs, such that we will take action // if it were to be force-stopped? final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); final String pkgName = intent.getData().getSchemeSpecificPart(); if (pkgUid != -1) { List<JobStatus> jobsForUid; synchronized (mLock) { Loading @@ -604,13 +604,11 @@ public final class JobSchedulerService extends com.android.server.SystemService } } else if (Intent.ACTION_PACKAGE_RESTARTED.equals(action)) { // possible force-stop final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); final String pkgName = intent.getData().getSchemeSpecificPart(); if (pkgUid != -1) { if (DEBUG) { Slog.d(TAG, "Removing jobs for pkg " + pkgName + " at uid " + pkgUid); } cancelJobsForPackageAndUid(pkgName, pkgUid); cancelJobsForPackageAndUid(pkgName, pkgUid, "app force stopped"); } } } Loading Loading @@ -790,13 +788,17 @@ public final class JobSchedulerService extends com.android.server.SystemService } } void cancelJobsForPackageAndUid(String pkgName, int uid) { void cancelJobsForPackageAndUid(String pkgName, int uid, String reason) { if ("android".equals(pkgName)) { Slog.wtfStack(TAG, "Can't cancel all jobs for system package"); return; } synchronized (mLock) { final List<JobStatus> jobsForUid = mJobs.getJobsByUid(uid); for (int i = jobsForUid.size() - 1; i >= 0; i--) { final JobStatus job = jobsForUid.get(i); if (job.getSourcePackageName().equals(pkgName)) { cancelJobImplLocked(job, null, "app force stopped"); cancelJobImplLocked(job, null, reason); } } } Loading @@ -811,8 +813,7 @@ public final class JobSchedulerService extends com.android.server.SystemService */ public void cancelJobsForUid(int uid, String reason) { if (uid == Process.SYSTEM_UID) { // This really shouldn't happen. Slog.wtfStack(TAG, "cancelJobsForUid() called for system uid"); Slog.wtfStack(TAG, "Can't cancel all jobs for system uid"); return; } synchronized (mLock) { Loading Loading
services/core/java/com/android/server/job/JobSchedulerService.java +14 −13 Original line number Diff line number Diff line Loading @@ -520,11 +520,12 @@ public final class JobSchedulerService extends com.android.server.SystemService if (DEBUG) { Slog.d(TAG, "Receieved: " + action); } final String pkgName = getPackageName(intent); final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); if (Intent.ACTION_PACKAGE_CHANGED.equals(action)) { // Purge the app's jobs if the whole package was just disabled. When this is // the case the component name will be a bare package name. final String pkgName = getPackageName(intent); final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); if (pkgName != null && pkgUid != -1) { final String[] changedComponents = intent.getStringArrayExtra( Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST); Loading @@ -544,7 +545,8 @@ public final class JobSchedulerService extends com.android.server.SystemService Slog.d(TAG, "Removing jobs for package " + pkgName + " in user " + userId); } cancelJobsForUid(pkgUid, "app package state changed"); cancelJobsForPackageAndUid(pkgName, pkgUid, "app disabled"); } } catch (RemoteException|IllegalArgumentException e) { /* Loading Loading @@ -573,7 +575,7 @@ public final class JobSchedulerService extends com.android.server.SystemService if (DEBUG) { Slog.d(TAG, "Removing jobs for uid: " + uidRemoved); } cancelJobsForUid(uidRemoved, "app uninstalled"); cancelJobsForPackageAndUid(pkgName, uidRemoved, "app uninstalled"); } } else if (Intent.ACTION_USER_REMOVED.equals(action)) { final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0); Loading @@ -584,8 +586,6 @@ public final class JobSchedulerService extends com.android.server.SystemService } else if (Intent.ACTION_QUERY_PACKAGE_RESTART.equals(action)) { // Has this package scheduled any jobs, such that we will take action // if it were to be force-stopped? final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); final String pkgName = intent.getData().getSchemeSpecificPart(); if (pkgUid != -1) { List<JobStatus> jobsForUid; synchronized (mLock) { Loading @@ -604,13 +604,11 @@ public final class JobSchedulerService extends com.android.server.SystemService } } else if (Intent.ACTION_PACKAGE_RESTARTED.equals(action)) { // possible force-stop final int pkgUid = intent.getIntExtra(Intent.EXTRA_UID, -1); final String pkgName = intent.getData().getSchemeSpecificPart(); if (pkgUid != -1) { if (DEBUG) { Slog.d(TAG, "Removing jobs for pkg " + pkgName + " at uid " + pkgUid); } cancelJobsForPackageAndUid(pkgName, pkgUid); cancelJobsForPackageAndUid(pkgName, pkgUid, "app force stopped"); } } } Loading Loading @@ -790,13 +788,17 @@ public final class JobSchedulerService extends com.android.server.SystemService } } void cancelJobsForPackageAndUid(String pkgName, int uid) { void cancelJobsForPackageAndUid(String pkgName, int uid, String reason) { if ("android".equals(pkgName)) { Slog.wtfStack(TAG, "Can't cancel all jobs for system package"); return; } synchronized (mLock) { final List<JobStatus> jobsForUid = mJobs.getJobsByUid(uid); for (int i = jobsForUid.size() - 1; i >= 0; i--) { final JobStatus job = jobsForUid.get(i); if (job.getSourcePackageName().equals(pkgName)) { cancelJobImplLocked(job, null, "app force stopped"); cancelJobImplLocked(job, null, reason); } } } Loading @@ -811,8 +813,7 @@ public final class JobSchedulerService extends com.android.server.SystemService */ public void cancelJobsForUid(int uid, String reason) { if (uid == Process.SYSTEM_UID) { // This really shouldn't happen. Slog.wtfStack(TAG, "cancelJobsForUid() called for system uid"); Slog.wtfStack(TAG, "Can't cancel all jobs for system uid"); return; } synchronized (mLock) { Loading