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);
     }
 
     /**