diff options
9 files changed, 154 insertions, 145 deletions
diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyCallbackImpl.java b/services/core/java/com/android/server/timedetector/EnvironmentImpl.java index 4f3f9dce8adb..5cd171839996 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyCallbackImpl.java +++ b/services/core/java/com/android/server/timedetector/EnvironmentImpl.java @@ -25,7 +25,6 @@ import android.app.AlarmManager; import android.content.ContentResolver; import android.content.Context; import android.os.Build; -import android.os.Environment; import android.os.PowerManager; import android.os.SystemClock; import android.os.SystemProperties; @@ -39,11 +38,11 @@ import java.time.Instant; import java.util.Objects; /** - * The real implementation of {@link TimeDetectorStrategyImpl.Callback} used on device. + * The real implementation of {@link TimeDetectorStrategyImpl.Environment} used on device. */ -public final class TimeDetectorStrategyCallbackImpl implements TimeDetectorStrategyImpl.Callback { +public final class EnvironmentImpl implements TimeDetectorStrategyImpl.Environment { - private final static String TAG = "timedetector.TimeDetectorStrategyCallbackImpl"; + private static final String TAG = TimeDetectorService.TAG; private static final int SYSTEM_CLOCK_UPDATE_THRESHOLD_MILLIS_DEFAULT = 2 * 1000; @@ -52,7 +51,7 @@ public final class TimeDetectorStrategyCallbackImpl implements TimeDetectorStrat * incorrect for sure. */ private static final Instant TIME_LOWER_BOUND = Instant.ofEpochMilli( - Long.max(Environment.getRootDirectory().lastModified(), Build.TIME)); + Long.max(android.os.Environment.getRootDirectory().lastModified(), Build.TIME)); /** * By default telephony and network only suggestions are accepted and telephony takes @@ -74,7 +73,7 @@ public final class TimeDetectorStrategyCallbackImpl implements TimeDetectorStrat @NonNull private final AlarmManager mAlarmManager; @NonNull private final int[] mOriginPriorities; - public TimeDetectorStrategyCallbackImpl(@NonNull Context context) { + public EnvironmentImpl(@NonNull Context context) { mContext = Objects.requireNonNull(context); mContentResolver = Objects.requireNonNull(context.getContentResolver()); diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorService.java b/services/core/java/com/android/server/timedetector/TimeDetectorService.java index 71b1a49f0d10..bbbd19f7a49e 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorService.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorService.java @@ -50,7 +50,7 @@ import java.util.Objects; * implementation to deal with the logic around time detection. */ public final class TimeDetectorService extends ITimeDetectorService.Stub { - private static final String TAG = "TimeDetectorService"; + static final String TAG = "time_detector"; public static class Lifecycle extends SystemService { @@ -73,8 +73,8 @@ public final class TimeDetectorService extends ITimeDetectorService.Stub { @NonNull private final TimeDetectorStrategy mTimeDetectorStrategy; private static TimeDetectorService create(@NonNull Context context) { - TimeDetectorStrategyImpl.Callback callback = new TimeDetectorStrategyCallbackImpl(context); - TimeDetectorStrategy timeDetectorStrategy = new TimeDetectorStrategyImpl(callback); + TimeDetectorStrategyImpl.Environment environment = new EnvironmentImpl(context); + TimeDetectorStrategy timeDetectorStrategy = new TimeDetectorStrategyImpl(environment); Handler handler = FgThread.getHandler(); TimeDetectorService timeDetectorService = diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java index 2fbeb7535ab5..7cd4184f2bc9 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java @@ -40,6 +40,7 @@ import com.android.server.timezonedetector.ReferenceWithHistory; import java.time.Instant; import java.util.Arrays; +import java.util.Objects; /** * An implementation of {@link TimeDetectorStrategy} that passes telephony and manual suggestions to @@ -51,7 +52,7 @@ import java.util.Arrays; public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { private static final boolean DBG = false; - private static final String LOG_TAG = "SimpleTimeDetectorStrategy"; + private static final String LOG_TAG = TimeDetectorService.TAG; /** A score value used to indicate "no score", either due to validation failure or age. */ private static final int TELEPHONY_INVALID_SCORE = -1; @@ -88,7 +89,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { private final LocalLog mTimeChangesLog = new LocalLog(30, false /* useLocalTimestamps */); @NonNull - private final Callback mCallback; + private final Environment mEnvironment; // 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 @@ -127,7 +128,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { * moved to {@link TimeDetectorStrategy}. There are similar issues with * {@link #systemClockMillis()} while any process can modify the system clock. */ - public interface Callback { + public interface Environment { /** * The absolute threshold below which the system clock need not be updated. i.e. if setting @@ -170,8 +171,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { void releaseWakeLock(); } - TimeDetectorStrategyImpl(@NonNull Callback callback) { - mCallback = callback; + TimeDetectorStrategyImpl(@NonNull Environment environment) { + mEnvironment = Objects.requireNonNull(environment); } @Override @@ -267,7 +268,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { @Override public synchronized void handleAutoTimeConfigChanged() { - boolean enabled = mCallback.isAutoTimeDetectionEnabled(); + boolean enabled = mEnvironment.isAutoTimeDetectionEnabled(); // When automatic time detection is enabled we update the system clock instantly if we can. // Conversely, when automatic time detection is disabled we leave the clock as it is. if (enabled) { @@ -286,20 +287,20 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { ipw.increaseIndent(); // level 1 ipw.println("mLastAutoSystemClockTimeSet=" + mLastAutoSystemClockTimeSet); - ipw.println("mCallback.isAutoTimeDetectionEnabled()=" - + mCallback.isAutoTimeDetectionEnabled()); - ipw.println("mCallback.elapsedRealtimeMillis()=" + mCallback.elapsedRealtimeMillis()); - ipw.println("mCallback.systemClockMillis()=" + mCallback.systemClockMillis()); - ipw.println("mCallback.systemClockUpdateThresholdMillis()=" - + mCallback.systemClockUpdateThresholdMillis()); - ipw.printf("mCallback.autoTimeLowerBound()=%s(%s)\n", - mCallback.autoTimeLowerBound(), - mCallback.autoTimeLowerBound().toEpochMilli()); + ipw.println("mEnvironment.isAutoTimeDetectionEnabled()=" + + mEnvironment.isAutoTimeDetectionEnabled()); + ipw.println("mEnvironment.elapsedRealtimeMillis()=" + mEnvironment.elapsedRealtimeMillis()); + ipw.println("mEnvironment.systemClockMillis()=" + mEnvironment.systemClockMillis()); + ipw.println("mEnvironment.systemClockUpdateThresholdMillis()=" + + mEnvironment.systemClockUpdateThresholdMillis()); + ipw.printf("mEnvironment.autoTimeLowerBound()=%s(%s)\n", + mEnvironment.autoTimeLowerBound(), + mEnvironment.autoTimeLowerBound().toEpochMilli()); String priorities = - Arrays.stream(mCallback.autoOriginPriorities()) + Arrays.stream(mEnvironment.autoOriginPriorities()) .mapToObj(TimeDetectorStrategy::originToString) .collect(joining(",", "[", "]")); - ipw.println("mCallback.autoOriginPriorities()=" + priorities); + ipw.println("mEnvironment.autoOriginPriorities()=" + priorities); ipw.println("Time change log:"); ipw.increaseIndent(); // level 2 @@ -372,7 +373,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } // We can validate the suggestion against the reference time clock. - long elapsedRealtimeMillis = mCallback.elapsedRealtimeMillis(); + long elapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis(); if (elapsedRealtimeMillis < newUtcTime.getReferenceTimeMillis()) { // elapsedRealtime clock went backwards? Slog.w(LOG_TAG, "New reference time is in the future? Ignoring." @@ -391,7 +392,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { private boolean validateSuggestionAgainstLowerBound( @NonNull TimestampedValue<Long> newUtcTime, @NonNull Object suggestion) { - Instant lowerBound = mCallback.autoTimeLowerBound(); + Instant lowerBound = mEnvironment.autoTimeLowerBound(); // Suggestion is definitely wrong if it comes before lower time bound. if (lowerBound.isAfter(Instant.ofEpochMilli(newUtcTime.getValue()))) { @@ -405,13 +406,13 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { @GuardedBy("this") private void doAutoTimeDetection(@NonNull String detectionReason) { - if (!mCallback.isAutoTimeDetectionEnabled()) { + if (!mEnvironment.isAutoTimeDetectionEnabled()) { // Avoid doing unnecessary work with this (race-prone) check. return; } // Try the different origins one at a time. - int[] originPriorities = mCallback.autoOriginPriorities(); + int[] originPriorities = mEnvironment.autoOriginPriorities(); for (int origin : originPriorities) { TimestampedValue<Long> newUtcTime = null; String cause = null; @@ -470,7 +471,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { @GuardedBy("this") @Nullable private TelephonyTimeSuggestion findBestTelephonySuggestion() { - long elapsedRealtimeMillis = mCallback.elapsedRealtimeMillis(); + long elapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis(); // Telephony time suggestions are assumed to be derived from NITZ or NITZ-like signals. // These have a number of limitations: @@ -579,7 +580,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } TimestampedValue<Long> utcTime = networkSuggestion.getUtcTime(); - long elapsedRealTimeMillis = mCallback.elapsedRealtimeMillis(); + long elapsedRealTimeMillis = mEnvironment.elapsedRealtimeMillis(); if (!validateSuggestionUtcTime(elapsedRealTimeMillis, utcTime)) { // The latest suggestion is not valid, usually due to its age. return null; @@ -599,7 +600,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } TimestampedValue<Long> utcTime = gnssTimeSuggestion.getUtcTime(); - long elapsedRealTimeMillis = mCallback.elapsedRealtimeMillis(); + long elapsedRealTimeMillis = mEnvironment.elapsedRealtimeMillis(); if (!validateSuggestionUtcTime(elapsedRealTimeMillis, utcTime)) { // The latest suggestion is not valid, usually due to its age. return null; @@ -619,7 +620,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } TimestampedValue<Long> utcTime = externalTimeSuggestion.getUtcTime(); - long elapsedRealTimeMillis = mCallback.elapsedRealtimeMillis(); + long elapsedRealTimeMillis = mEnvironment.elapsedRealtimeMillis(); if (!validateSuggestionUtcTime(elapsedRealTimeMillis, utcTime)) { // The latest suggestion is not valid, usually due to its age. return null; @@ -634,7 +635,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { boolean isOriginAutomatic = isOriginAutomatic(origin); if (isOriginAutomatic) { - if (!mCallback.isAutoTimeDetectionEnabled()) { + if (!mEnvironment.isAutoTimeDetectionEnabled()) { if (DBG) { Slog.d(LOG_TAG, "Auto time detection is not enabled." + " origin=" + originToString(origin) @@ -644,7 +645,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { return false; } } else { - if (mCallback.isAutoTimeDetectionEnabled()) { + if (mEnvironment.isAutoTimeDetectionEnabled()) { if (DBG) { Slog.d(LOG_TAG, "Auto time detection is enabled." + " origin=" + originToString(origin) @@ -655,11 +656,11 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } } - mCallback.acquireWakeLock(); + mEnvironment.acquireWakeLock(); try { return setSystemClockUnderWakeLock(origin, time, cause); } finally { - mCallback.releaseWakeLock(); + mEnvironment.releaseWakeLock(); } } @@ -671,9 +672,9 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { private boolean setSystemClockUnderWakeLock( @Origin int origin, @NonNull TimestampedValue<Long> newTime, @NonNull String cause) { - long elapsedRealtimeMillis = mCallback.elapsedRealtimeMillis(); + long elapsedRealtimeMillis = mEnvironment.elapsedRealtimeMillis(); boolean isOriginAutomatic = isOriginAutomatic(origin); - long actualSystemClockMillis = mCallback.systemClockMillis(); + long actualSystemClockMillis = mEnvironment.systemClockMillis(); if (isOriginAutomatic) { // CLOCK_PARANOIA : Check to see if this class owns the clock or if something else // may be setting the clock. @@ -701,7 +702,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { // Check if the new signal would make sufficient difference to the system clock. If it's // below the threshold then ignore it. long absTimeDifference = Math.abs(newSystemClockMillis - actualSystemClockMillis); - long systemClockUpdateThreshold = mCallback.systemClockUpdateThresholdMillis(); + long systemClockUpdateThreshold = mEnvironment.systemClockUpdateThresholdMillis(); if (absTimeDifference < systemClockUpdateThreshold) { if (DBG) { Slog.d(LOG_TAG, "Not setting system clock. New time and" @@ -715,7 +716,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { return true; } - mCallback.setSystemClock(newSystemClockMillis); + mEnvironment.setSystemClock(newSystemClockMillis); String logMsg = "Set system clock using time=" + newTime + " cause=" + cause + " elapsedRealtimeMillis=" + elapsedRealtimeMillis diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorCallbackImpl.java b/services/core/java/com/android/server/timezonedetector/EnvironmentImpl.java index 1357608ef9d4..3340792fe5e0 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorCallbackImpl.java +++ b/services/core/java/com/android/server/timezonedetector/EnvironmentImpl.java @@ -44,30 +44,30 @@ import com.android.server.LocalServices; import java.util.Objects; /** - * The real implementation of {@link TimeZoneDetectorStrategyImpl.Callback}. + * The real implementation of {@link TimeZoneDetectorStrategyImpl.Environment}. */ -public final class TimeZoneDetectorCallbackImpl implements TimeZoneDetectorStrategyImpl.Callback { +public final class EnvironmentImpl implements TimeZoneDetectorStrategyImpl.Environment { - private static final String LOG_TAG = "TimeZoneDetectorCallbackImpl"; + private static final String LOG_TAG = TimeZoneDetectorService.TAG; private static final String TIMEZONE_PROPERTY = "persist.sys.timezone"; @NonNull private final Context mContext; @NonNull private final Handler mHandler; @NonNull private final ContentResolver mCr; @NonNull private final UserManager mUserManager; - @NonNull private final boolean mGeoDetectionFeatureEnabled; + @NonNull private final boolean mGeoDetectionSupported; @NonNull private final LocationManager mLocationManager; // @NonNull after setConfigChangeListener() is called. private ConfigurationChangeListener mConfigChangeListener; - TimeZoneDetectorCallbackImpl(@NonNull Context context, @NonNull Handler handler, - boolean geoDetectionFeatureEnabled) { + EnvironmentImpl(@NonNull Context context, @NonNull Handler handler, + boolean geoDetectionSupported) { mContext = Objects.requireNonNull(context); mHandler = Objects.requireNonNull(handler); mCr = context.getContentResolver(); mUserManager = context.getSystemService(UserManager.class); mLocationManager = context.getSystemService(LocationManager.class); - mGeoDetectionFeatureEnabled = geoDetectionFeatureEnabled; + mGeoDetectionSupported = geoDetectionSupported; // Wire up the change listener. All invocations are performed on the mHandler thread. @@ -191,7 +191,7 @@ public final class TimeZoneDetectorCallbackImpl implements TimeZoneDetectorStrat } private boolean isGeoDetectionSupported() { - return mGeoDetectionFeatureEnabled; + return mGeoDetectionSupported; } private boolean isAutoDetectionEnabled() { diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java index 2ead3bedab0f..bd71ddf67094 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java +++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java @@ -59,7 +59,7 @@ import java.util.Objects; public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub implements IBinder.DeathRecipient { - private static final String TAG = "TimeZoneDetectorService"; + static final String TAG = "time_zone_detector"; /** * A "feature switch" for location-based time zone detection. If this is {@code false}. It is @@ -67,19 +67,19 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub * is important. */ @Nullable - private static Boolean sGeoLocationTimeZoneDetectionEnabled; + private static Boolean sGeoLocationTimeZoneDetectionSupported; /** Returns {@code true} if the location-based time zone detection feature is enabled. */ - public static boolean isGeoLocationTimeZoneDetectionEnabled(Context context) { - if (sGeoLocationTimeZoneDetectionEnabled == null) { + public static boolean isGeoLocationTimeZoneDetectionSupported(Context context) { + if (sGeoLocationTimeZoneDetectionSupported == null) { // The config value is expected to be the main switch. Platform developers can also // enable the feature using a persistent system property. - sGeoLocationTimeZoneDetectionEnabled = context.getResources().getBoolean( + sGeoLocationTimeZoneDetectionSupported = context.getResources().getBoolean( com.android.internal.R.bool.config_enableGeolocationTimeZoneDetection) || SystemProperties.getBoolean( "persist.sys.location_time_zone_detection_feature_enabled", false); } - return sGeoLocationTimeZoneDetectionEnabled; + return sGeoLocationTimeZoneDetectionSupported; } /** @@ -98,11 +98,11 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub Context context = getContext(); Handler handler = FgThread.getHandler(); - boolean geolocationTimeZoneDetectionEnabled = - isGeoLocationTimeZoneDetectionEnabled(context); + boolean geolocationTimeZoneDetectionSupported = + isGeoLocationTimeZoneDetectionSupported(context); TimeZoneDetectorStrategy timeZoneDetectorStrategy = TimeZoneDetectorStrategyImpl.create( - context, handler, geolocationTimeZoneDetectionEnabled); + context, handler, geolocationTimeZoneDetectionSupported); // Create and publish the local service for use by internal callers. TimeZoneDetectorInternal internal = @@ -330,7 +330,7 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub boolean isGeoTimeZoneDetectionSupported() { enforceManageTimeZoneDetectorPermission(); - return isGeoLocationTimeZoneDetectionEnabled(mContext); + return isGeoLocationTimeZoneDetectionSupported(mContext); } @Override diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java index 781668bebbc9..cac1a6d29829 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java +++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java @@ -59,7 +59,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat * conditions. */ @VisibleForTesting - public interface Callback { + public interface Environment { /** * Sets a {@link ConfigurationChangeListener} that will be invoked when there are any @@ -97,7 +97,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat void storeConfiguration(@UserIdInt int userId, TimeZoneConfiguration newConfiguration); } - private static final String LOG_TAG = "TimeZoneDetectorStrategy"; + private static final String LOG_TAG = TimeZoneDetectorService.TAG; private static final boolean DBG = false; /** @@ -164,7 +164,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat private static final int KEEP_SUGGESTION_HISTORY_SIZE = 10; @NonNull - private final Callback mCallback; + private final Environment mEnvironment; @GuardedBy("this") @NonNull @@ -203,17 +203,17 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat */ public static TimeZoneDetectorStrategyImpl create( @NonNull Context context, @NonNull Handler handler, - boolean geolocationTimeZoneDetectionEnabled) { + boolean geolocationTimeZoneDetectionSupported) { - TimeZoneDetectorCallbackImpl callback = new TimeZoneDetectorCallbackImpl( - context, handler, geolocationTimeZoneDetectionEnabled); - return new TimeZoneDetectorStrategyImpl(callback); + EnvironmentImpl environment = new EnvironmentImpl( + context, handler, geolocationTimeZoneDetectionSupported); + return new TimeZoneDetectorStrategyImpl(environment); } @VisibleForTesting - public TimeZoneDetectorStrategyImpl(@NonNull Callback callback) { - mCallback = Objects.requireNonNull(callback); - mCallback.setConfigChangeListener(this::handleConfigChanged); + public TimeZoneDetectorStrategyImpl(@NonNull Environment environment) { + mEnvironment = Objects.requireNonNull(environment); + mEnvironment.setConfigChangeListener(this::handleConfigChanged); } /** @@ -230,13 +230,13 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat @Override @NonNull public ConfigurationInternal getConfigurationInternal(@UserIdInt int userId) { - return mCallback.getConfigurationInternal(userId); + return mEnvironment.getConfigurationInternal(userId); } @Override @NonNull public synchronized ConfigurationInternal getCurrentUserConfigurationInternal() { - int currentUserId = mCallback.getCurrentUserId(); + int currentUserId = mEnvironment.getCurrentUserId(); return getConfigurationInternal(currentUserId); } @@ -257,9 +257,9 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat return false; } - // Store the configuration / notify as needed. This will cause the mCallback to invoke + // Store the configuration / notify as needed. This will cause the mEnvironment to invoke // handleConfigChanged() asynchronously. - mCallback.storeConfiguration(userId, newConfiguration); + mEnvironment.storeConfiguration(userId, newConfiguration); String logMsg = "Configuration changed:" + " oldConfiguration=" + oldConfiguration @@ -275,8 +275,9 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat public synchronized void suggestGeolocationTimeZone( @NonNull GeolocationTimeZoneSuggestion suggestion) { - int currentUserId = mCallback.getCurrentUserId(); - ConfigurationInternal currentUserConfig = mCallback.getConfigurationInternal(currentUserId); + int currentUserId = mEnvironment.getCurrentUserId(); + ConfigurationInternal currentUserConfig = + mEnvironment.getConfigurationInternal(currentUserId); if (DBG) { Slog.d(LOG_TAG, "Geolocation suggestion received." + " currentUserConfig=" + currentUserConfig @@ -299,7 +300,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat public synchronized boolean suggestManualTimeZone( @UserIdInt int userId, @NonNull ManualTimeZoneSuggestion suggestion) { - int currentUserId = mCallback.getCurrentUserId(); + int currentUserId = mEnvironment.getCurrentUserId(); if (userId != currentUserId) { Slog.w(LOG_TAG, "Manual suggestion received but user != current user, userId=" + userId + " suggestion=" + suggestion); @@ -332,8 +333,9 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat public synchronized void suggestTelephonyTimeZone( @NonNull TelephonyTimeZoneSuggestion suggestion) { - int currentUserId = mCallback.getCurrentUserId(); - ConfigurationInternal currentUserConfig = mCallback.getConfigurationInternal(currentUserId); + int currentUserId = mEnvironment.getCurrentUserId(); + ConfigurationInternal currentUserConfig = + mEnvironment.getConfigurationInternal(currentUserId); if (DBG) { Slog.d(LOG_TAG, "Telephony suggestion received. currentUserConfig=" + currentUserConfig + " newSuggestion=" + suggestion); @@ -423,7 +425,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat String zoneId; // Introduce bias towards the device's current zone when there are multiple zone suggested. - String deviceTimeZone = mCallback.getDeviceTimeZone(); + String deviceTimeZone = mEnvironment.getDeviceTimeZone(); if (zoneIds.contains(deviceTimeZone)) { if (DBG) { Slog.d(LOG_TAG, @@ -486,7 +488,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat @GuardedBy("this") private void setDeviceTimeZoneIfRequired(@NonNull String newZoneId, @NonNull String cause) { - String currentZoneId = mCallback.getDeviceTimeZone(); + String currentZoneId = mEnvironment.getDeviceTimeZone(); // Avoid unnecessary changes / intents. if (newZoneId.equals(currentZoneId)) { @@ -501,7 +503,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat return; } - mCallback.setDeviceTimeZone(newZoneId); + mEnvironment.setDeviceTimeZone(newZoneId); String msg = "Set device time zone." + ", currentZoneId=" + currentZoneId + ", newZoneId=" + newZoneId @@ -572,8 +574,9 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat // This method is called whenever the user changes or the config for any user changes. We // don't know what happened, so we capture the current user's config, check to see if we // need to clear state associated with a previous user, and rerun detection. - int currentUserId = mCallback.getCurrentUserId(); - ConfigurationInternal currentUserConfig = mCallback.getConfigurationInternal(currentUserId); + int currentUserId = mEnvironment.getCurrentUserId(); + ConfigurationInternal currentUserConfig = + mEnvironment.getConfigurationInternal(currentUserId); GeolocationTimeZoneSuggestion latestGeoLocationSuggestion = mLatestGeoLocationSuggestion.get(); @@ -603,14 +606,14 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat ipw.println("TimeZoneDetectorStrategy:"); ipw.increaseIndent(); // level 1 - int currentUserId = mCallback.getCurrentUserId(); - ipw.println("mCallback.getCurrentUserId()=" + currentUserId); - ConfigurationInternal configuration = mCallback.getConfigurationInternal(currentUserId); - ipw.println("mCallback.getConfiguration(currentUserId)=" + configuration); + int currentUserId = mEnvironment.getCurrentUserId(); + ipw.println("mEnvironment.getCurrentUserId()=" + currentUserId); + ConfigurationInternal configuration = mEnvironment.getConfigurationInternal(currentUserId); + ipw.println("mEnvironment.getConfiguration(currentUserId)=" + configuration); ipw.println("[Capabilities=" + configuration.createCapabilitiesAndConfig() + "]"); - ipw.println("mCallback.isDeviceTimeZoneInitialized()=" - + mCallback.isDeviceTimeZoneInitialized()); - ipw.println("mCallback.getDeviceTimeZone()=" + mCallback.getDeviceTimeZone()); + ipw.println("mEnvironment.isDeviceTimeZoneInitialized()=" + + mEnvironment.isDeviceTimeZoneInitialized()); + ipw.println("mEnvironment.getDeviceTimeZone()=" + mEnvironment.getDeviceTimeZone()); ipw.println("Time zone change log:"); ipw.increaseIndent(); // level 2 diff --git a/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneManagerService.java b/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneManagerService.java index 5bee7ee9d4b2..220810f137ad 100644 --- a/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneManagerService.java +++ b/services/core/java/com/android/server/timezonedetector/location/LocationTimeZoneManagerService.java @@ -74,11 +74,17 @@ import java.util.concurrent.atomic.AtomicReference; * mode" where the real binder clients are replaced by {@link * SimulatedLocationTimeZoneProviderProxy}. This means that the real client providers are never * bound (ensuring no real location events will be received) and simulated events / behaviors - * can be injected via the command line. To enter simulation mode for a provider, use - * "{@code adb shell setprop persist.sys.location_tz_simulation_mode.<provider name> 1}" and reboot. - * e.g. "{@code adb shell setprop persist.sys.location_tz_simulation_mode.primary 1}}" - * Then use "{@code adb shell cmd location_time_zone_manager help}" for injection. Set the system - * properties to "0" and reboot to return to exit simulation mode. + * can be injected via the command line. + * + * <p>To enter simulation mode for a provider, use {@code adb shell cmd location_time_zone_manager + * set_provider_mode_override <provider name> simulated} and restart the service with {@code + * adb shell cmd location_time_zone_manager stop} and {@code adb shell cmd + * location_time_zone_manager start}. + * + * <p>e.g. {@code adb shell cmd location_time_zone_manager set_provider_mode_override primary + * simulated}. + * + * <p>See {@code adb shell cmd location_time_zone_manager help}" for more options. */ public class LocationTimeZoneManagerService extends Binder { @@ -96,7 +102,7 @@ public class LocationTimeZoneManagerService extends Binder { @Override public void onStart() { Context context = getContext(); - if (TimeZoneDetectorService.isGeoLocationTimeZoneDetectionEnabled(context)) { + if (TimeZoneDetectorService.isGeoLocationTimeZoneDetectionSupported(context)) { mService = new LocationTimeZoneManagerService(context); // The service currently exposes no LocalService or Binder API, but it extends @@ -110,7 +116,7 @@ public class LocationTimeZoneManagerService extends Binder { @Override public void onBootPhase(int phase) { Context context = getContext(); - if (TimeZoneDetectorService.isGeoLocationTimeZoneDetectionEnabled(context)) { + if (TimeZoneDetectorService.isGeoLocationTimeZoneDetectionSupported(context)) { if (phase == PHASE_SYSTEM_SERVICES_READY) { // The location service must be functioning after this boot phase. mService.onSystemReady(); 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 c59ead987b1c..6dcfb42f7f08 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java @@ -1123,10 +1123,10 @@ public class TimeDetectorStrategyImplTest { } /** - * A fake implementation of TimeDetectorStrategy.Callback. Besides tracking changes and behaving - * like the real thing should, it also asserts preconditions. + * A fake implementation of {@link TimeDetectorStrategyImpl.Environment}. Besides tracking + * changes and behaving like the real thing should, it also asserts preconditions. */ - private static class FakeCallback implements TimeDetectorStrategyImpl.Callback { + private static class FakeEnvironment implements TimeDetectorStrategyImpl.Environment { private boolean mAutoTimeDetectionEnabled; private boolean mWakeLockAcquired; private long mElapsedRealtimeMillis; @@ -1254,41 +1254,41 @@ public class TimeDetectorStrategyImplTest { */ private class Script { - private final FakeCallback mFakeCallback; + private final FakeEnvironment mFakeEnvironment; private final TimeDetectorStrategyImpl mTimeDetectorStrategy; Script() { - mFakeCallback = new FakeCallback(); - mTimeDetectorStrategy = new TimeDetectorStrategyImpl(mFakeCallback); + mFakeEnvironment = new FakeEnvironment(); + mTimeDetectorStrategy = new TimeDetectorStrategyImpl(mFakeEnvironment); } Script pokeAutoTimeDetectionEnabled(boolean enabled) { - mFakeCallback.pokeAutoTimeDetectionEnabled(enabled); + mFakeEnvironment.pokeAutoTimeDetectionEnabled(enabled); return this; } Script pokeFakeClocks(TimestampedValue<Instant> timeInfo) { - mFakeCallback.pokeElapsedRealtimeMillis(timeInfo.getReferenceTimeMillis()); - mFakeCallback.pokeSystemClockMillis(timeInfo.getValue().toEpochMilli()); + mFakeEnvironment.pokeElapsedRealtimeMillis(timeInfo.getReferenceTimeMillis()); + mFakeEnvironment.pokeSystemClockMillis(timeInfo.getValue().toEpochMilli()); return this; } Script pokeThresholds(int systemClockUpdateThreshold) { - mFakeCallback.pokeSystemClockUpdateThreshold(systemClockUpdateThreshold); + mFakeEnvironment.pokeSystemClockUpdateThreshold(systemClockUpdateThreshold); return this; } Script pokeAutoOriginPriorities(@Origin int... autoOriginPriorities) { - mFakeCallback.pokeAutoOriginPriorities(autoOriginPriorities); + mFakeEnvironment.pokeAutoOriginPriorities(autoOriginPriorities); return this; } long peekElapsedRealtimeMillis() { - return mFakeCallback.peekElapsedRealtimeMillis(); + return mFakeEnvironment.peekElapsedRealtimeMillis(); } long peekSystemClockMillis() { - return mFakeCallback.peekSystemClockMillis(); + return mFakeEnvironment.peekSystemClockMillis(); } Script simulateTelephonyTimeSuggestion(TelephonyTimeSuggestion timeSuggestion) { @@ -1324,13 +1324,13 @@ public class TimeDetectorStrategyImplTest { } Script simulateAutoTimeDetectionToggle() { - mFakeCallback.simulateAutoTimeZoneDetectionToggle(); + mFakeEnvironment.simulateAutoTimeZoneDetectionToggle(); mTimeDetectorStrategy.handleAutoTimeConfigChanged(); return this; } Script simulateTimePassing(long clockIncrementMillis) { - mFakeCallback.simulateTimePassing(clockIncrementMillis); + mFakeEnvironment.simulateTimePassing(clockIncrementMillis); return this; } @@ -1342,14 +1342,14 @@ public class TimeDetectorStrategyImplTest { } Script verifySystemClockWasNotSetAndResetCallTracking() { - mFakeCallback.verifySystemClockNotSet(); - mFakeCallback.resetCallTracking(); + mFakeEnvironment.verifySystemClockNotSet(); + mFakeEnvironment.resetCallTracking(); return this; } Script verifySystemClockWasSetAndResetCallTracking(long expectedSystemClockMillis) { - mFakeCallback.verifySystemClockWasSet(expectedSystemClockMillis); - mFakeCallback.resetCallTracking(); + mFakeEnvironment.verifySystemClockWasSet(expectedSystemClockMillis); + mFakeEnvironment.resetCallTracking(); return this; } @@ -1427,7 +1427,7 @@ public class TimeDetectorStrategyImplTest { ManualTimeSuggestion generateManualTimeSuggestion(Instant suggestedTime) { TimestampedValue<Long> utcTime = new TimestampedValue<>( - mFakeCallback.peekElapsedRealtimeMillis(), + mFakeEnvironment.peekElapsedRealtimeMillis(), suggestedTime.toEpochMilli()); return new ManualTimeSuggestion(utcTime); } @@ -1461,7 +1461,7 @@ public class TimeDetectorStrategyImplTest { NetworkTimeSuggestion generateNetworkTimeSuggestion(Instant suggestedTime) { TimestampedValue<Long> utcTime = new TimestampedValue<>( - mFakeCallback.peekElapsedRealtimeMillis(), + mFakeEnvironment.peekElapsedRealtimeMillis(), suggestedTime.toEpochMilli()); return new NetworkTimeSuggestion(utcTime); } @@ -1473,7 +1473,7 @@ public class TimeDetectorStrategyImplTest { GnssTimeSuggestion generateGnssTimeSuggestion(Instant suggestedTime) { TimestampedValue<Long> utcTime = new TimestampedValue<>( - mFakeCallback.peekElapsedRealtimeMillis(), + mFakeEnvironment.peekElapsedRealtimeMillis(), suggestedTime.toEpochMilli()); return new GnssTimeSuggestion(utcTime); } @@ -1485,7 +1485,7 @@ public class TimeDetectorStrategyImplTest { ExternalTimeSuggestion generateExternalTimeSuggestion(Instant suggestedTime) { TimestampedValue<Long> utcTime = new TimestampedValue<>( - mFakeCallback.peekElapsedRealtimeMillis(), + mFakeEnvironment.peekElapsedRealtimeMillis(), suggestedTime.toEpochMilli()); return new ExternalTimeSuggestion(utcTime); } diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java index a6ffd201c16e..c8dba5f40882 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java @@ -167,15 +167,15 @@ public class TimeZoneDetectorStrategyImplTest { createConfig(null, false /* geoDetection */); private TimeZoneDetectorStrategyImpl mTimeZoneDetectorStrategy; - private FakeCallback mFakeCallback; + private FakeEnvironment mFakeEnvironment; private MockConfigChangeListener mMockConfigChangeListener; @Before public void setUp() { - mFakeCallback = new FakeCallback(); + mFakeEnvironment = new FakeEnvironment(); mMockConfigChangeListener = new MockConfigChangeListener(); - mTimeZoneDetectorStrategy = new TimeZoneDetectorStrategyImpl(mFakeCallback); + mTimeZoneDetectorStrategy = new TimeZoneDetectorStrategyImpl(mFakeEnvironment); mTimeZoneDetectorStrategy.addConfigChangeListener(mMockConfigChangeListener); } @@ -183,7 +183,7 @@ public class TimeZoneDetectorStrategyImplTest { public void testGetCurrentUserConfiguration() { new Script().initializeConfig(CONFIG_INT_AUTO_ENABLED_GEO_DISABLED); ConfigurationInternal expectedConfiguration = - mFakeCallback.getConfigurationInternal(USER_ID); + mFakeEnvironment.getConfigurationInternal(USER_ID); assertEquals(expectedConfiguration, mTimeZoneDetectorStrategy.getCurrentUserConfigurationInternal()); } @@ -490,7 +490,7 @@ public class TimeZoneDetectorStrategyImplTest { private void makeSlotIndex1SuggestionAndCheckState(Script script, TelephonyTestCase testCase) { // Give the next suggestion a different zone from the currently set device time zone; - String currentZoneId = mFakeCallback.getDeviceTimeZone(); + String currentZoneId = mFakeEnvironment.getDeviceTimeZone(); String suggestionZoneId = "Europe/London".equals(currentZoneId) ? "Europe/Paris" : "Europe/London"; TelephonyTimeZoneSuggestion zoneSlotIndex1Suggestion = @@ -610,9 +610,9 @@ public class TimeZoneDetectorStrategyImplTest { } /** - * The {@link TimeZoneDetectorStrategyImpl.Callback} is left to detect whether changing the time - * zone is actually necessary. This test proves that the strategy doesn't assume it knows the - * current settings. + * The {@link TimeZoneDetectorStrategyImpl.Environment} is left to detect whether changing the + * time zone is actually necessary. This test proves that the strategy doesn't assume it knows + * the current settings. */ @Test public void testTelephonySuggestionStrategyDoesNotAssumeCurrentSetting_autoTelephony() { @@ -958,7 +958,7 @@ public class TimeZoneDetectorStrategyImplTest { return builder.build(); } - static class FakeCallback implements TimeZoneDetectorStrategyImpl.Callback { + static class FakeEnvironment implements TimeZoneDetectorStrategyImpl.Environment { private final TestState<ConfigurationInternal> mConfigurationInternal = new TestState<>(); private final TestState<String> mTimeZoneId = new TestState<>(); @@ -1051,12 +1051,12 @@ public class TimeZoneDetectorStrategyImplTest { private class Script { Script initializeConfig(ConfigurationInternal configuration) { - mFakeCallback.initializeConfig(configuration); + mFakeEnvironment.initializeConfig(configuration); return this; } Script initializeTimeZoneSetting(String zoneId) { - mFakeCallback.initializeTimeZoneSetting(zoneId); + mFakeEnvironment.initializeTimeZoneSetting(zoneId); return this; } @@ -1084,7 +1084,7 @@ public class TimeZoneDetectorStrategyImplTest { Script simulateManualTimeZoneSuggestion( @UserIdInt int userId, ManualTimeZoneSuggestion manualTimeZoneSuggestion, boolean expectedResult) { - mFakeCallback.assertKnownUser(userId); + mFakeEnvironment.assertKnownUser(userId); boolean actualResult = mTimeZoneDetectorStrategy.suggestManualTimeZone( userId, manualTimeZoneSuggestion); assertEquals(expectedResult, actualResult); @@ -1104,26 +1104,26 @@ public class TimeZoneDetectorStrategyImplTest { * state was last reset. */ Script verifyTimeZoneNotChanged() { - mFakeCallback.assertTimeZoneNotChanged(); + mFakeEnvironment.assertTimeZoneNotChanged(); return this; } /** Verifies the device's time zone has been set and clears change tracking history. */ Script verifyTimeZoneChangedAndReset(String zoneId) { - mFakeCallback.assertTimeZoneChangedTo(zoneId); - mFakeCallback.commitAllChanges(); + mFakeEnvironment.assertTimeZoneChangedTo(zoneId); + mFakeEnvironment.commitAllChanges(); return this; } Script verifyTimeZoneChangedAndReset(ManualTimeZoneSuggestion suggestion) { - mFakeCallback.assertTimeZoneChangedTo(suggestion.getZoneId()); - mFakeCallback.commitAllChanges(); + mFakeEnvironment.assertTimeZoneChangedTo(suggestion.getZoneId()); + mFakeEnvironment.commitAllChanges(); return this; } Script verifyTimeZoneChangedAndReset(TelephonyTimeZoneSuggestion suggestion) { - mFakeCallback.assertTimeZoneChangedTo(suggestion.getZoneId()); - mFakeCallback.commitAllChanges(); + mFakeEnvironment.assertTimeZoneChangedTo(suggestion.getZoneId()); + mFakeEnvironment.commitAllChanges(); return this; } @@ -1131,9 +1131,9 @@ public class TimeZoneDetectorStrategyImplTest { * Verifies that the configuration has been changed to the expected value. */ Script verifyConfigurationChangedAndReset(ConfigurationInternal expected) { - mFakeCallback.mConfigurationInternal.assertHasBeenSet(); - assertEquals(expected, mFakeCallback.mConfigurationInternal.getLatest()); - mFakeCallback.commitAllChanges(); + mFakeEnvironment.mConfigurationInternal.assertHasBeenSet(); + assertEquals(expected, mFakeEnvironment.mConfigurationInternal.getLatest()); + mFakeEnvironment.commitAllChanges(); // Also confirm the listener triggered. mMockConfigChangeListener.verifyOnChangeCalled(); @@ -1146,7 +1146,7 @@ public class TimeZoneDetectorStrategyImplTest { * {@link TimeZoneConfiguration} have been changed. */ Script verifyConfigurationNotChanged() { - mFakeCallback.mConfigurationInternal.assertHasNotBeenSet(); + mFakeEnvironment.mConfigurationInternal.assertHasNotBeenSet(); // Also confirm the listener did not trigger. mMockConfigChangeListener.verifyOnChangeNotCalled(); @@ -1154,7 +1154,7 @@ public class TimeZoneDetectorStrategyImplTest { } Script resetConfigurationTracking() { - mFakeCallback.commitAllChanges(); + mFakeEnvironment.commitAllChanges(); return this; } } |