From 444551f0afd46c460ae524ab18b5f4cabcba7dc6 Mon Sep 17 00:00:00 2001 From: Almaz Mingaleev Date: Mon, 23 Nov 2020 18:06:48 +0000 Subject: Initialize mCallback in constructor and make it final. Test: atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/ Change-Id: I62868ad42ec0affe6ca46e5324c5d537239337e8 --- .../server/timedetector/TimeDetectorService.java | 5 +-- .../server/timedetector/TimeDetectorStrategy.java | 40 -------------------- .../TimeDetectorStrategyCallbackImpl.java | 4 +- .../timedetector/TimeDetectorStrategyImpl.java | 44 ++++++++++++++++++++-- .../timedetector/TimeDetectorServiceTest.java | 4 -- .../timedetector/TimeDetectorStrategyImplTest.java | 6 +-- 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 ed6424cb4a30..49a090b86d1d 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 a5fba4e6ba49..97687f7fae81 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 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 88de34027bb9..6ada07707314 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 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. + * + *

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 2eeeb3ebaa2a..fc28167cd20d 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 803b245889e7..1f38b7093f7a 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) { -- cgit v1.2.3-59-g8ed1b