diff options
6 files changed, 46 insertions, 57 deletions
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorService.java b/services/core/java/com/android/server/timedetector/TimeDetectorService.java index 59cebf769a4e..789dd5273094 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorService.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorService.java @@ -71,9 +71,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 e943978cfc14..3b2b992c15ba 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 com.android.server.timezonedetector.Dumpable; */ public interface TimeDetectorStrategy extends Dumpable { - /** - * The interface used by the strategy to interact with the surrounding service. - * - * <p>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 19484db149b1..e06fe9276323 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 9c18aadb79ec..7a2680bbe349 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java @@ -98,8 +98,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 @@ -121,8 +121,44 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { private final ReferenceWithHistory<NetworkTimeSuggestion> mLastNetworkSuggestion = new ReferenceWithHistory<>(KEEP_SUGGESTION_HISTORY_SIZE); - @Override - public void initialize(@NonNull Callback callback) { + /** + * The interface used by the strategy to interact with the surrounding service. + * + * <p>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 9f59763cfa58..e101a06feb4e 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java @@ -229,10 +229,6 @@ public class TimeDetectorServiceTest { 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 1d79d0d3b86e..1be074dfa5a3 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) { |