diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorService.java b/services/core/java/com/android/server/timedetector/TimeDetectorService.java index ed6424cb4a305..49a090b86d1db 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorService.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorService.java @@ -64,9 +64,8 @@ public final class TimeDetectorService extends ITimeDetectorService.Stub { @NonNull private final TimeDetectorStrategy mTimeDetectorStrategy; private static TimeDetectorService create(@NonNull Context context) { - TimeDetectorStrategy timeDetectorStrategy = new TimeDetectorStrategyImpl(); - TimeDetectorStrategyCallbackImpl callback = new TimeDetectorStrategyCallbackImpl(context); - timeDetectorStrategy.initialize(callback); + TimeDetectorStrategyImpl.Callback callback = new TimeDetectorStrategyCallbackImpl(context); + TimeDetectorStrategy timeDetectorStrategy = new TimeDetectorStrategyImpl(callback); Handler handler = FgThread.getHandler(); TimeDetectorService timeDetectorService = diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java index a5fba4e6ba497..97687f7fae816 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java @@ -37,46 +37,6 @@ import java.io.PrintWriter; */ public interface TimeDetectorStrategy { - /** - * The interface used by the strategy to interact with the surrounding service. - * - *
Note: Because the system properties-derived value {@link #isAutoTimeDetectionEnabled()}
- * can be modified independently and from different threads (and processes!). its use is prone
- * to race conditions. That will be true until the responsibility for setting their values is
- * moved to {@link TimeDetectorStrategy}. There are similar issues with
- * {@link #systemClockMillis()} while any process can modify the system clock.
- */
- interface Callback {
-
- /**
- * The absolute threshold below which the system clock need not be updated. i.e. if setting
- * the system clock would adjust it by less than this (either backwards or forwards) then it
- * need not be set.
- */
- int systemClockUpdateThresholdMillis();
-
- /** Returns true if automatic time detection is enabled. */
- boolean isAutoTimeDetectionEnabled();
-
- /** Acquire a suitable wake lock. Must be followed by {@link #releaseWakeLock()} */
- void acquireWakeLock();
-
- /** Returns the elapsedRealtimeMillis clock value. */
- long elapsedRealtimeMillis();
-
- /** Returns the system clock value. */
- long systemClockMillis();
-
- /** Sets the device system clock. The WakeLock must be held. */
- void setSystemClock(long newTimeMillis);
-
- /** Release the wake lock acquired by a call to {@link #acquireWakeLock()}. */
- void releaseWakeLock();
- }
-
- /** Initialize the strategy. */
- void initialize(@NonNull Callback callback);
-
/** Process the suggested time from telephony sources. */
void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion timeSuggestion);
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyCallbackImpl.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyCallbackImpl.java
index 19484db149b16..e06fe92763231 100644
--- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyCallbackImpl.java
+++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyCallbackImpl.java
@@ -29,9 +29,9 @@ import android.util.Slog;
import java.util.Objects;
/**
- * The real implementation of {@link TimeDetectorStrategy.Callback} used on device.
+ * The real implementation of {@link TimeDetectorStrategyImpl.Callback} used on device.
*/
-public final class TimeDetectorStrategyCallbackImpl implements TimeDetectorStrategy.Callback {
+public final class TimeDetectorStrategyCallbackImpl implements TimeDetectorStrategyImpl.Callback {
private final static String TAG = "timedetector.TimeDetectorStrategyCallbackImpl";
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
index 88de34027bb96..6ada077073144 100644
--- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
+++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java
@@ -99,8 +99,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
@NonNull
private final LocalLog mTimeChangesLog = new LocalLog(30, false /* useLocalTimestamps */);
- // @NonNull after initialize()
- private Callback mCallback;
+ @NonNull
+ private final Callback mCallback;
// Used to store the last time the system clock state was set automatically. It is used to
// detect (and log) issues with the realtime clock or whether the clock is being set without
@@ -122,8 +122,44 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy {
private final ReferenceWithHistory Note: Because the system properties-derived value {@link #isAutoTimeDetectionEnabled()}
+ * can be modified independently and from different threads (and processes!), its use is prone
+ * to race conditions. That will be true until the responsibility for setting their values is
+ * moved to {@link TimeDetectorStrategy}. There are similar issues with
+ * {@link #systemClockMillis()} while any process can modify the system clock.
+ */
+ public interface Callback {
+
+ /**
+ * The absolute threshold below which the system clock need not be updated. i.e. if setting
+ * the system clock would adjust it by less than this (either backwards or forwards) then it
+ * need not be set.
+ */
+ int systemClockUpdateThresholdMillis();
+
+ /** Returns true if automatic time detection is enabled. */
+ boolean isAutoTimeDetectionEnabled();
+
+ /** Acquire a suitable wake lock. Must be followed by {@link #releaseWakeLock()} */
+ void acquireWakeLock();
+
+ /** Returns the elapsedRealtimeMillis clock value. */
+ long elapsedRealtimeMillis();
+
+ /** Returns the system clock value. */
+ long systemClockMillis();
+
+ /** Sets the device system clock. The WakeLock must be held. */
+ void setSystemClock(long newTimeMillis);
+
+ /** Release the wake lock acquired by a call to {@link #acquireWakeLock()}. */
+ void releaseWakeLock();
+ }
+
+ TimeDetectorStrategyImpl(@NonNull Callback callback) {
mCallback = callback;
}
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java
index 2eeeb3ebaa2ab..fc28167cd20d3 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java
@@ -226,10 +226,6 @@ public class TimeDetectorServiceTest {
private boolean mHandleAutoTimeDetectionChangedCalled;
private boolean mDumpCalled;
- @Override
- public void initialize(Callback ignored) {
- }
-
@Override
public void suggestTelephonyTime(TelephonyTimeSuggestion timeSuggestion) {
mLastTelephonySuggestion = timeSuggestion;
diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java
index 803b245889e7e..1f38b7093f7a5 100644
--- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java
+++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java
@@ -616,7 +616,7 @@ public class TimeDetectorStrategyImplTest {
* A fake implementation of TimeDetectorStrategy.Callback. Besides tracking changes and behaving
* like the real thing should, it also asserts preconditions.
*/
- private static class FakeCallback implements TimeDetectorStrategy.Callback {
+ private static class FakeCallback implements TimeDetectorStrategyImpl.Callback {
private boolean mAutoTimeDetectionEnabled;
private boolean mWakeLockAcquired;
private long mElapsedRealtimeMillis;
@@ -731,9 +731,7 @@ public class TimeDetectorStrategyImplTest {
Script() {
mFakeCallback = new FakeCallback();
- mTimeDetectorStrategy = new TimeDetectorStrategyImpl();
- mTimeDetectorStrategy.initialize(mFakeCallback);
-
+ mTimeDetectorStrategy = new TimeDetectorStrategyImpl(mFakeCallback);
}
Script pokeAutoTimeDetectionEnabled(boolean enabled) {