[SettingsProvider] use JobScheduler.forNamespace to avoid conflicting jobs
Job IDs needs to be unique per UID, but SettingsProvider shares the system UID so there's high chance of job-id collision. Use JobScheduler.forNamespace to avoid it. BUG: 289319662 Test: manual by changing job criteria and observe the job is executed Change-Id: I577732e4f0d5bc13287790a17b59f1a42083feae
This commit is contained in:
@@ -246,6 +246,7 @@ public class SettingsProvider extends ContentProvider {
|
||||
public static final String RESULT_ROWS_DELETED = "result_rows_deleted";
|
||||
public static final String RESULT_SETTINGS_LIST = "result_settings_list";
|
||||
|
||||
public static final String SETTINGS_PROVIDER_JOBS_NS = "SettingsProviderJobsNamespace";
|
||||
// Used for scheduling jobs to make a copy for the settings files
|
||||
public static final int WRITE_FALLBACK_SETTINGS_FILES_JOB_ID = 1;
|
||||
public static final long ONE_DAY_INTERVAL_MILLIS = 24 * 60 * 60 * 1000L;
|
||||
@@ -2762,12 +2763,13 @@ public class SettingsProvider extends ContentProvider {
|
||||
*/
|
||||
public void scheduleWriteFallbackFilesJob() {
|
||||
final Context context = getContext();
|
||||
final JobScheduler jobScheduler =
|
||||
JobScheduler jobScheduler =
|
||||
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
if (jobScheduler == null) {
|
||||
// Might happen: SettingsProvider is created before JobSchedulerService in system server
|
||||
return;
|
||||
}
|
||||
jobScheduler = jobScheduler.forNamespace(SETTINGS_PROVIDER_JOBS_NS);
|
||||
// Check if the job is already scheduled. If so, skip scheduling another one
|
||||
if (jobScheduler.getPendingJob(WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) != null) {
|
||||
return;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.providers.settings;
|
||||
|
||||
import static com.android.providers.settings.SettingsProvider.SETTINGS_PROVIDER_JOBS_NS;
|
||||
import static com.android.providers.settings.SettingsProvider.TABLE_CONFIG;
|
||||
import static com.android.providers.settings.SettingsProvider.TABLE_GLOBAL;
|
||||
import static com.android.providers.settings.SettingsProvider.TABLE_SECURE;
|
||||
@@ -35,7 +36,8 @@ import java.util.List;
|
||||
public class WriteFallbackSettingsFilesJobService extends JobService {
|
||||
@Override
|
||||
public boolean onStartJob(final JobParameters params) {
|
||||
if (params.getJobId() != WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) {
|
||||
if (!SETTINGS_PROVIDER_JOBS_NS.equals(params.getJobNamespace())
|
||||
|| params.getJobId() != WRITE_FALLBACK_SETTINGS_FILES_JOB_ID) {
|
||||
return false;
|
||||
}
|
||||
final List<String> settingsFiles = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user