Fix bug in NetworkTimeUpdateService
Reset try again counter after a successful NTP refresh
Reset alarm to run at exactly mPollingIntervalMs after the last
NTP update.
Bug: b/217357882
Test: Existing unit tests still pass.
Change-Id: Ibee93ab305f5bcaa149007c15d12c583227678b9
diff --git a/services/core/java/com/android/server/NetworkTimeUpdateService.java b/services/core/java/com/android/server/NetworkTimeUpdateService.java
index a0f239d..fcde533 100644
--- a/services/core/java/com/android/server/NetworkTimeUpdateService.java
+++ b/services/core/java/com/android/server/NetworkTimeUpdateService.java
@@ -171,7 +171,9 @@
>= mPollingIntervalMs) {
if (DBG) Log.d(TAG, "Stale NTP fix; forcing refresh");
boolean isSuccessful = mTime.forceRefresh();
- if (!isSuccessful) {
+ if (isSuccessful) {
+ mTryAgainCounter = 0;
+ } else {
String logMsg = "forceRefresh() returned false: cachedNtpResult=" + cachedNtpResult
+ ", currentElapsedRealtimeMillis=" + currentElapsedRealtimeMillis;
@@ -188,7 +190,8 @@
&& cachedNtpResult.getAgeMillis(currentElapsedRealtimeMillis)
< mPollingIntervalMs) {
// Obtained fresh fix; schedule next normal update
- resetAlarm(mPollingIntervalMs);
+ resetAlarm(mPollingIntervalMs
+ - cachedNtpResult.getAgeMillis(currentElapsedRealtimeMillis));
// Suggest the time to the time detector. It may choose use it to set the system clock.
TimestampedValue<Long> timeSignal = new TimestampedValue<>(