Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(350)

Unified Diff: components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java

Issue 2819703002: [Android] Implements OS upgrade check and rescheduling (Closed)
Patch Set: Calling upgrade task from DeferredStartupHandler Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java
diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java
index 1a71d34d43da3b7f25b8f89722f520f36c5d4896..5f93cf804551d03e2c09e3966555190a3ad1daf0 100644
--- a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java
+++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerPrefs.java
@@ -5,6 +5,7 @@
package org.chromium.components.background_task_scheduler;
import android.content.SharedPreferences;
+import android.os.Build;
import org.chromium.base.ContextUtils;
@@ -17,16 +18,73 @@ import java.util.Set;
public class BackgroundTaskSchedulerPrefs {
private static final String TAG = "BTSPrefs";
private static final String KEY_SCHEDULED_TASKS = "bts_scheduled_tasks";
- private static final String KEY_LAST_OS_VERSION = "bts_last_os_version";
- private static final String KEY_LAST_APP_VERSION = "bts_last_app_version";
- private static final String ENTRY_SEPARATOR = ":";
+ private static final String KEY_LAST_SDK_VERSION = "bts_last_sdk_version";
+
+ /**
+ * Class abstracting conversions between a string kept in shared preferences and actual values
+ * held there.
+ */
+ private static class ScheduledTaskPreferenceEntry {
+ private static final String ENTRY_SEPARATOR = ":";
+ private String mBackgroundTaskClass;
+ private int mTaskId;
+
+ /** Creates a scheduled task shared preference entry from task info. */
+ public static ScheduledTaskPreferenceEntry createForTaskInfo(TaskInfo taskInfo) {
+ return new ScheduledTaskPreferenceEntry(
+ taskInfo.getBackgroundTaskClass().getName(), taskInfo.getTaskId());
+ }
+
+ /**
+ * Parses a preference entry from input string.
+ *
+ * @param entry An input string to parse.
+ * @return A parsed entry or null if the input is not valid.
+ */
+ public static ScheduledTaskPreferenceEntry parseEntry(String entry) {
+ String[] entryParts = entry.split(ENTRY_SEPARATOR);
+ if (entryParts.length != 2 || entryParts[0].isEmpty() || entryParts[1].isEmpty()) {
+ return null;
+ }
+ int taskId = 0;
+ try {
+ taskId = Integer.parseInt(entryParts[1]);
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ return new ScheduledTaskPreferenceEntry(entryParts[0], taskId);
+ }
+
+ public ScheduledTaskPreferenceEntry(String className, int taskId) {
+ mBackgroundTaskClass = className;
+ mTaskId = taskId;
+ }
+
+ /**
+ * Converts a task info to a shared preference entry in the format:
+ * BACKGROUND_TASK_CLASS_NAME:TASK_ID.
+ */
+ public String toString() {
+ return mBackgroundTaskClass + ENTRY_SEPARATOR + mTaskId;
+ }
+
+ /** Gets the name of background task class in this entry. */
+ public String getBackgroundTaskClass() {
+ return mBackgroundTaskClass;
+ }
+
+ /** Gets the ID of the task in this entry. */
+ public int getTaskId() {
+ return mTaskId;
+ }
+ }
/** Adds a task to scheduler's preferences, so that it can be rescheduled with OS upgrade. */
public static void addScheduledTask(TaskInfo taskInfo) {
SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
Set<String> scheduledTasks =
prefs.getStringSet(KEY_SCHEDULED_TASKS, new HashSet<String>(1));
- String prefsEntry = toSharedPreferenceEntry(taskInfo);
+ String prefsEntry = ScheduledTaskPreferenceEntry.createForTaskInfo(taskInfo).toString();
if (scheduledTasks.contains(prefsEntry)) return;
// Set returned from getStringSet() should not be modified.
@@ -38,12 +96,12 @@ public class BackgroundTaskSchedulerPrefs {
/** Removes a task from scheduler's preferences. */
public static void removeScheduledTask(int taskId) {
SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
- Set<String> scheduledTasks = prefs.getStringSet(KEY_SCHEDULED_TASKS, new HashSet<String>());
+ Set<String> scheduledTasks = getScheduledTaskEntries(prefs);
String entryToRemove = null;
- String taskSuffix = ENTRY_SEPARATOR + taskId;
for (String entry : scheduledTasks) {
- if (entry.endsWith(taskSuffix)) {
+ ScheduledTaskPreferenceEntry parsed = ScheduledTaskPreferenceEntry.parseEntry(entry);
+ if (parsed != null && parsed.getTaskId() == taskId) {
entryToRemove = entry;
break;
}
@@ -61,36 +119,59 @@ public class BackgroundTaskSchedulerPrefs {
/** Gets a set of scheduled task class names. */
public static Set<String> getScheduledTasks() {
SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
- Set<String> prefsEntries = prefs.getStringSet(KEY_SCHEDULED_TASKS, new HashSet<String>(1));
- Set<String> scheduledTasksClassNames = new HashSet<>(prefsEntries.size());
- for (String entry : prefsEntries) {
- String[] entryParts = entry.split(ENTRY_SEPARATOR);
- if (entryParts.length != 2 || entryParts[0] == null || entryParts[0].isEmpty()) {
- continue;
+ Set<String> scheduledTask = getScheduledTaskEntries(prefs);
+ Set<String> scheduledTasksClassNames = new HashSet<>(scheduledTask.size());
+ for (String entry : scheduledTask) {
+ ScheduledTaskPreferenceEntry parsed = ScheduledTaskPreferenceEntry.parseEntry(entry);
+ if (parsed != null) {
+ scheduledTasksClassNames.add(parsed.getBackgroundTaskClass());
}
- scheduledTasksClassNames.add(entryParts[0]);
}
return scheduledTasksClassNames;
}
+ /** Gets a set of scheduled task IDs. */
+ public static Set<Integer> getScheduledTaskIds() {
+ SharedPreferences prefs = ContextUtils.getAppSharedPreferences();
+ Set<String> scheduledTasks = getScheduledTaskEntries(prefs);
+ Set<Integer> scheduledTaskIds = new HashSet<>(scheduledTasks.size());
+ for (String entry : scheduledTasks) {
+ ScheduledTaskPreferenceEntry parsed = ScheduledTaskPreferenceEntry.parseEntry(entry);
+ if (parsed != null) {
+ scheduledTaskIds.add(parsed.getTaskId());
+ }
+ }
+ return scheduledTaskIds;
+ }
+
/** Removes all scheduled tasks from shared preferences store. */
public static void removeAllTasks() {
ContextUtils.getAppSharedPreferences().edit().remove(KEY_SCHEDULED_TASKS).apply();
}
+ /** Gets the last SDK version on which this instance ran. Defaults to current SDK version. */
+ public static int getLastSdkVersion() {
+ return ContextUtils.getAppSharedPreferences().getInt(
+ KEY_LAST_SDK_VERSION, Build.VERSION.SDK_INT);
+ }
+
+ /** Gets the last SDK version on which this instance ran. */
+ public static void setLastSdkVersion(int sdkVersion) {
+ ContextUtils.getAppSharedPreferences()
+ .edit()
+ .putInt(KEY_LAST_SDK_VERSION, sdkVersion)
+ .apply();
+ }
+
private static void updateScheduledTasks(SharedPreferences prefs, Set<String> tasks) {
SharedPreferences.Editor editor = prefs.edit();
editor.putStringSet(KEY_SCHEDULED_TASKS, tasks);
editor.apply();
}
- /**
- * Converts a task info to a shared preference entry in the format:
- * BACKGROUND_TASK_CLASS_NAME:TASK_ID.
- * Task ID is necessary to be able to remove the entries from the shared preferences.
- */
- private static String toSharedPreferenceEntry(TaskInfo taskInfo) {
- return taskInfo.getBackgroundTaskClass().getName() + ENTRY_SEPARATOR + taskInfo.getTaskId();
+ /** Gets the entries for scheduled tasks from shared preferences. */
+ private static Set<String> getScheduledTaskEntries(SharedPreferences prefs) {
+ return prefs.getStringSet(KEY_SCHEDULED_TASKS, new HashSet<String>(1));
}
}

Powered by Google App Engine
This is Rietveld 408576698