Reschedule work right after system time changed
Test: atest DeviceLockControllerRoboTests
Fix: 285221785
Change-Id: I876fcac2298dc0b3f16b5d6fe124b51ce57fecba
diff --git a/DeviceLockController/src/com/android/devicelockcontroller/schedule/DeviceLockControllerSchedulerImpl.java b/DeviceLockController/src/com/android/devicelockcontroller/schedule/DeviceLockControllerSchedulerImpl.java
index e938487..485d37e 100644
--- a/DeviceLockController/src/com/android/devicelockcontroller/schedule/DeviceLockControllerSchedulerImpl.java
+++ b/DeviceLockController/src/com/android/devicelockcontroller/schedule/DeviceLockControllerSchedulerImpl.java
@@ -137,6 +137,10 @@
UserParameters.setNextCheckInTimeMillis(mContext,
before + delta);
}
+ // We have to reschedule (update) the check-in work, because, otherwise, if device
+ // reboots, WorkManager will reschedule the work based on the changed system clock,
+ // which will result in inaccurate schedule. (see b/285221785)
+ rescheduleRetryCheckInWork();
} else if (currentState == PROVISION_PAUSED) {
long before = UserParameters.getResumeProvisionTimeMillis(mContext);
if (before > 0) {
diff --git a/DeviceLockController/src/com/android/devicelockcontroller/storage/UserParameters.java b/DeviceLockController/src/com/android/devicelockcontroller/storage/UserParameters.java
index f178917..682db4a 100644
--- a/DeviceLockController/src/com/android/devicelockcontroller/storage/UserParameters.java
+++ b/DeviceLockController/src/com/android/devicelockcontroller/storage/UserParameters.java
@@ -208,7 +208,11 @@
if (!Build.isDebuggable()) {
throw new SecurityException("Clear is not allowed in non-debuggable build!");
}
+ // We want to keep the boot time in order to reschedule works/alarms when system clock
+ // changes.
+ long bootTime = UserParameters.getBootTimeMillis(context);
getSharedPreferences(context).edit().clear().commit();
+ UserParameters.setBootTimeMillis(context, bootTime);
}
/**