Index: components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java |
diff --git a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java |
index d7570fca637dd1365ba0b07f4f7fea13f1c0f01c..a8b76b74702e6f2f3e3d0a417b64800603c67800 100644 |
--- a/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java |
+++ b/components/background_task_scheduler/android/java/src/org/chromium/components/background_task_scheduler/BackgroundTaskScheduler.java |
@@ -92,6 +92,40 @@ public class BackgroundTaskScheduler { |
mSchedulerDelegate.cancel(context, taskId); |
} |
+ /** |
+ * Checks whether OS was upgraded and triggers rescheduling if it is necessary. |
+ * Rescheduling is necessary if type of background task scheduler delegate is different for a |
+ * new version of the OS. |
+ * |
+ * @param context the current context. |
+ */ |
+ public void checkForOSUpgrade(Context context) { |
+ int oldSdkInt = BackgroundTaskSchedulerPrefs.getLastSdkVersion(); |
+ int newSdkInt = Build.VERSION.SDK_INT; |
+ // No OS upgrade detected. |
+ if (oldSdkInt == newSdkInt) return; |
+ |
+ // Save the current SDK version to preferences. |
+ BackgroundTaskSchedulerPrefs.setLastSdkVersion(newSdkInt); |
+ |
+ // OS upgrade detected within the same delegate type. No is upgrade necessary. |
+ if ((oldSdkInt < Build.VERSION_CODES.M && newSdkInt < Build.VERSION_CODES.M) |
nyquist
2017/04/18 22:41:08
Do we want to extract the conditional out to somet
fgorski
2017/04/20 22:36:07
Done.
|
+ || (oldSdkInt >= Build.VERSION_CODES.M && newSdkInt >= Build.VERSION_CODES.M)) { |
nyquist
2017/04/18 22:41:08
Maybe stupid question, but if oldSdkInt was someho
fgorski
2017/04/20 22:36:07
I proposed some changes that work, but I am not ve
nyquist
2017/04/25 20:43:56
Yeah, I'm not sure if that is necessary. It feels
|
+ return; |
+ } |
+ |
+ // Explicitly invoke create old delegate type to cancel all scheduled tasks. |
nyquist
2017/04/18 22:41:08
Something seems to be off with this sentence: "inv
fgorski
2017/04/20 22:36:07
Done.
|
+ // All preference entries are kept until reschedule call, which removes then then. |
+ BackgroundTaskSchedulerDelegate oldDelegate = |
+ new BackgroundTaskSchedulerGcmNetworkManager(); |
+ Set<Integer> scheduledTaskIds = BackgroundTaskSchedulerPrefs.getScheduledTaskIds(); |
+ for (int taskId : scheduledTaskIds) { |
+ oldDelegate.cancel(context, taskId); |
+ } |
+ |
+ reschedule(context); |
+ } |
+ |
public void reschedule(Context context) { |
Set<String> scheduledTasksClassNames = BackgroundTaskSchedulerPrefs.getScheduledTasks(); |
BackgroundTaskSchedulerPrefs.removeAllTasks(); |