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<>(