Loading services/core/java/com/android/server/timezonedetector/Dumpable.java +0 −14 Original line number Diff line number Diff line Loading @@ -24,18 +24,4 @@ public interface Dumpable { /** Dump internal state. */ void dump(@NonNull IndentingPrintWriter pw, @Nullable String[] args); /** * An interface that can be used expose when one component allows another to be registered so * that it is dumped at the same time. */ interface Container { /** * Registers the supplied {@link Dumpable}. When the implementation is dumped * {@link Dumpable#dump(IndentingPrintWriter, String[])} should be called on the * {@code dumpable}. */ void addDumpable(@NonNull Dumpable dumpable); } } services/core/java/com/android/server/timezonedetector/EnvironmentImpl.java +10 −16 Original line number Diff line number Diff line Loading @@ -72,8 +72,8 @@ final class EnvironmentImpl implements TimeZoneDetectorStrategyImpl.Environment mLocationManager = context.getSystemService(LocationManager.class); mServiceConfigAccessor = Objects.requireNonNull(serviceConfigAccessor); // Wire up the config change listeners. All invocations are performed on the mHandler // thread. // Wire up the config change listeners for anything that could affect the return values from // this object. All listener invocations are performed on the mHandler thread. // Listen for the user changing / the user's location mode changing. IntentFilter filter = new IntentFilter(); Loading @@ -88,25 +88,19 @@ final class EnvironmentImpl implements TimeZoneDetectorStrategyImpl.Environment // Add async callbacks for global settings being changed. ContentResolver contentResolver = mContext.getContentResolver(); contentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.AUTO_TIME_ZONE), true, new ContentObserver(mHandler) { ContentObserver contentObserver = new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { handleConfigChangeOnHandlerThread(); } }); }; contentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.AUTO_TIME_ZONE), true, contentObserver); // Add async callbacks for user scoped location settings being changed. contentResolver.registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.LOCATION_TIME_ZONE_DETECTION_ENABLED), true, new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { handleConfigChangeOnHandlerThread(); } }, UserHandle.USER_ALL); true, contentObserver, UserHandle.USER_ALL); } private void handleConfigChangeOnHandlerThread() { Loading services/core/java/com/android/server/timezonedetector/GeolocationTimeZoneSuggestion.java +5 −6 Original line number Diff line number Diff line Loading @@ -39,12 +39,11 @@ import java.util.StringTokenizer; * <ul> * <li>{@code effectiveFromElapsedMillis}: The time according to the elapsed realtime clock * after which the suggestion should be considered in effect. For example, when a location fix * used to establish the time zone is old, then the suggestion * {@code effectiveFromElapsedMillis} should reflect this and indicates the time zone that was * detected / correct at that time. The time_zone_detector is only expected to use the latest * suggestion it has received, and so later suggestions always counteract previous suggestions. * The inclusion of this information means that the time_zone_detector can take into account * ordering when comparing suggestions from different sources. * used to establish the time zone is old, then the suggestion's {@code * effectiveFromElapsedMillis} should reflect this and indicates the time zone that was * detected / correct at that time. The inclusion of this information means that the * time_zone_detector <em>may</em> take this into account if comparing suggestions or signals * from different sources. * <br />Note: Because the times can be back-dated, time_zone_detector can be sent a sequence of * suggestions where the {@code effectiveFromElapsedMillis} of later suggestions is before * the {@code effectiveFromElapsedMillis} of an earlier one.</li> Loading services/core/java/com/android/server/timezonedetector/ServiceConfigAccessor.java +21 −29 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.annotation.StringDef; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.SystemProperties; import android.util.ArraySet; import com.android.internal.R; Loading Loading @@ -64,11 +63,11 @@ public final class ServiceConfigAccessor { public static final @ProviderMode String PROVIDER_MODE_ENABLED = "enabled"; /** * Device config keys that affect the {@link TimeZoneDetectorService} service and {@link * com.android.server.timezonedetector.location.LocationTimeZoneManagerService}. * Device config keys that can affect {@link * com.android.server.timezonedetector.location.LocationTimeZoneManagerService} behavior. */ private static final Set<String> SERVER_FLAGS_KEYS_TO_WATCH = Collections.unmodifiableSet( new ArraySet<>(new String[] { private static final Set<String> LOCATION_TIME_ZONE_MANAGER_SERVER_FLAGS_KEYS_TO_WATCH = Collections.unmodifiableSet(new ArraySet<>(new String[] { ServerFlags.KEY_LOCATION_TIME_ZONE_DETECTION_FEATURE_SUPPORTED, ServerFlags.KEY_LOCATION_TIME_ZONE_DETECTION_SETTING_ENABLED_DEFAULT, ServerFlags.KEY_LOCATION_TIME_ZONE_DETECTION_SETTING_ENABLED_OVERRIDE, Loading @@ -94,14 +93,6 @@ public final class ServiceConfigAccessor { @NonNull private final Context mContext; /** * An ultimate "feature switch" for location-based time zone detection. If this is * {@code false}, the device cannot support the feature without a config change or a reboot: * This affects what services are started on boot to minimize expense when the feature is not * wanted. */ private final boolean mGeoDetectionFeatureSupportedInConfig; @NonNull private final ServerFlags mServerFlags; /** Loading Loading @@ -148,14 +139,6 @@ public final class ServiceConfigAccessor { private ServiceConfigAccessor(@NonNull Context context) { mContext = Objects.requireNonNull(context); // The config value is expected to be the main feature flag. Platform developers can also // force enable the feature using a persistent system property. Because system properties // can change, this value is cached and only changes on reboot. mGeoDetectionFeatureSupportedInConfig = context.getResources().getBoolean( com.android.internal.R.bool.config_enableGeolocationTimeZoneDetection) || SystemProperties.getBoolean( "persist.sys.location_time_zone_detection_feature_supported", false); mServerFlags = ServerFlags.getInstance(mContext); } Loading @@ -170,14 +153,15 @@ public final class ServiceConfigAccessor { } /** * Adds a listener that will be called when server flags related to this class change. The * callbacks are delivered on the main looper thread. * Adds a listener that will be called when server flags related to location_time_zone_manager * change. The callbacks are delivered on the main looper thread. * * <p>Note: Only for use by long-lived objects. There is deliberately no associated remove * method. */ public void addListener(@NonNull ConfigurationChangeListener listener) { mServerFlags.addListener(listener, SERVER_FLAGS_KEYS_TO_WATCH); public void addLocationTimeZoneManagerConfigListener( @NonNull ConfigurationChangeListener listener) { mServerFlags.addListener(listener, LOCATION_TIME_ZONE_MANAGER_SERVER_FLAGS_KEYS_TO_WATCH); } /** Returns {@code true} if any form of automatic time zone detection is supported. */ Loading @@ -197,11 +181,19 @@ public final class ServiceConfigAccessor { /** * Returns {@code true} if the location-based time zone detection feature can be supported on * this device at all according to config. When {@code false}, implies that various other * location-based settings will be turned off or rendered meaningless. Typically {@link * #isGeoTimeZoneDetectionFeatureSupported()} should be used instead. * location-based services and settings will be turned off or rendered meaningless. * * <p>This is the ultimate "feature switch" for location-based time zone detection. If this is * {@code false}, the device cannot support the feature without a config change or a reboot: * This affects what services are started on boot to minimize expense when the feature is not * wanted. * * Typically {@link #isGeoTimeZoneDetectionFeatureSupported()} should be used except during * boot. */ public boolean isGeoTimeZoneDetectionFeatureSupportedInConfig() { return mGeoDetectionFeatureSupportedInConfig; return mContext.getResources().getBoolean( com.android.internal.R.bool.config_enableGeolocationTimeZoneDetection); } /** Loading @@ -213,7 +205,7 @@ public final class ServiceConfigAccessor { // 1) Be turned on in config. // 2) Not be turned off via a server flag. // 3) There must be at least one location time zone provider enabled / configured. return mGeoDetectionFeatureSupportedInConfig return isGeoTimeZoneDetectionFeatureSupportedInConfig() && isGeoTimeZoneDetectionFeatureSupportedInternal() && atLeastOneProviderIsEnabled(); } Loading services/core/java/com/android/server/timezonedetector/TimeZoneDetectorInternal.java +1 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import android.annotation.NonNull; * <p>The methods on this class can be called from any thread. * @hide */ public interface TimeZoneDetectorInternal extends Dumpable.Container { public interface TimeZoneDetectorInternal { /** Adds a listener that will be invoked when {@link ConfigurationInternal} may have changed. */ void addConfigurationListener(@NonNull ConfigurationChangeListener listener); Loading Loading
services/core/java/com/android/server/timezonedetector/Dumpable.java +0 −14 Original line number Diff line number Diff line Loading @@ -24,18 +24,4 @@ public interface Dumpable { /** Dump internal state. */ void dump(@NonNull IndentingPrintWriter pw, @Nullable String[] args); /** * An interface that can be used expose when one component allows another to be registered so * that it is dumped at the same time. */ interface Container { /** * Registers the supplied {@link Dumpable}. When the implementation is dumped * {@link Dumpable#dump(IndentingPrintWriter, String[])} should be called on the * {@code dumpable}. */ void addDumpable(@NonNull Dumpable dumpable); } }
services/core/java/com/android/server/timezonedetector/EnvironmentImpl.java +10 −16 Original line number Diff line number Diff line Loading @@ -72,8 +72,8 @@ final class EnvironmentImpl implements TimeZoneDetectorStrategyImpl.Environment mLocationManager = context.getSystemService(LocationManager.class); mServiceConfigAccessor = Objects.requireNonNull(serviceConfigAccessor); // Wire up the config change listeners. All invocations are performed on the mHandler // thread. // Wire up the config change listeners for anything that could affect the return values from // this object. All listener invocations are performed on the mHandler thread. // Listen for the user changing / the user's location mode changing. IntentFilter filter = new IntentFilter(); Loading @@ -88,25 +88,19 @@ final class EnvironmentImpl implements TimeZoneDetectorStrategyImpl.Environment // Add async callbacks for global settings being changed. ContentResolver contentResolver = mContext.getContentResolver(); contentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.AUTO_TIME_ZONE), true, new ContentObserver(mHandler) { ContentObserver contentObserver = new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { handleConfigChangeOnHandlerThread(); } }); }; contentResolver.registerContentObserver( Settings.Global.getUriFor(Settings.Global.AUTO_TIME_ZONE), true, contentObserver); // Add async callbacks for user scoped location settings being changed. contentResolver.registerContentObserver( Settings.Secure.getUriFor(Settings.Secure.LOCATION_TIME_ZONE_DETECTION_ENABLED), true, new ContentObserver(mHandler) { @Override public void onChange(boolean selfChange) { handleConfigChangeOnHandlerThread(); } }, UserHandle.USER_ALL); true, contentObserver, UserHandle.USER_ALL); } private void handleConfigChangeOnHandlerThread() { Loading
services/core/java/com/android/server/timezonedetector/GeolocationTimeZoneSuggestion.java +5 −6 Original line number Diff line number Diff line Loading @@ -39,12 +39,11 @@ import java.util.StringTokenizer; * <ul> * <li>{@code effectiveFromElapsedMillis}: The time according to the elapsed realtime clock * after which the suggestion should be considered in effect. For example, when a location fix * used to establish the time zone is old, then the suggestion * {@code effectiveFromElapsedMillis} should reflect this and indicates the time zone that was * detected / correct at that time. The time_zone_detector is only expected to use the latest * suggestion it has received, and so later suggestions always counteract previous suggestions. * The inclusion of this information means that the time_zone_detector can take into account * ordering when comparing suggestions from different sources. * used to establish the time zone is old, then the suggestion's {@code * effectiveFromElapsedMillis} should reflect this and indicates the time zone that was * detected / correct at that time. The inclusion of this information means that the * time_zone_detector <em>may</em> take this into account if comparing suggestions or signals * from different sources. * <br />Note: Because the times can be back-dated, time_zone_detector can be sent a sequence of * suggestions where the {@code effectiveFromElapsedMillis} of later suggestions is before * the {@code effectiveFromElapsedMillis} of an earlier one.</li> Loading
services/core/java/com/android/server/timezonedetector/ServiceConfigAccessor.java +21 −29 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.annotation.StringDef; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Resources; import android.os.SystemProperties; import android.util.ArraySet; import com.android.internal.R; Loading Loading @@ -64,11 +63,11 @@ public final class ServiceConfigAccessor { public static final @ProviderMode String PROVIDER_MODE_ENABLED = "enabled"; /** * Device config keys that affect the {@link TimeZoneDetectorService} service and {@link * com.android.server.timezonedetector.location.LocationTimeZoneManagerService}. * Device config keys that can affect {@link * com.android.server.timezonedetector.location.LocationTimeZoneManagerService} behavior. */ private static final Set<String> SERVER_FLAGS_KEYS_TO_WATCH = Collections.unmodifiableSet( new ArraySet<>(new String[] { private static final Set<String> LOCATION_TIME_ZONE_MANAGER_SERVER_FLAGS_KEYS_TO_WATCH = Collections.unmodifiableSet(new ArraySet<>(new String[] { ServerFlags.KEY_LOCATION_TIME_ZONE_DETECTION_FEATURE_SUPPORTED, ServerFlags.KEY_LOCATION_TIME_ZONE_DETECTION_SETTING_ENABLED_DEFAULT, ServerFlags.KEY_LOCATION_TIME_ZONE_DETECTION_SETTING_ENABLED_OVERRIDE, Loading @@ -94,14 +93,6 @@ public final class ServiceConfigAccessor { @NonNull private final Context mContext; /** * An ultimate "feature switch" for location-based time zone detection. If this is * {@code false}, the device cannot support the feature without a config change or a reboot: * This affects what services are started on boot to minimize expense when the feature is not * wanted. */ private final boolean mGeoDetectionFeatureSupportedInConfig; @NonNull private final ServerFlags mServerFlags; /** Loading Loading @@ -148,14 +139,6 @@ public final class ServiceConfigAccessor { private ServiceConfigAccessor(@NonNull Context context) { mContext = Objects.requireNonNull(context); // The config value is expected to be the main feature flag. Platform developers can also // force enable the feature using a persistent system property. Because system properties // can change, this value is cached and only changes on reboot. mGeoDetectionFeatureSupportedInConfig = context.getResources().getBoolean( com.android.internal.R.bool.config_enableGeolocationTimeZoneDetection) || SystemProperties.getBoolean( "persist.sys.location_time_zone_detection_feature_supported", false); mServerFlags = ServerFlags.getInstance(mContext); } Loading @@ -170,14 +153,15 @@ public final class ServiceConfigAccessor { } /** * Adds a listener that will be called when server flags related to this class change. The * callbacks are delivered on the main looper thread. * Adds a listener that will be called when server flags related to location_time_zone_manager * change. The callbacks are delivered on the main looper thread. * * <p>Note: Only for use by long-lived objects. There is deliberately no associated remove * method. */ public void addListener(@NonNull ConfigurationChangeListener listener) { mServerFlags.addListener(listener, SERVER_FLAGS_KEYS_TO_WATCH); public void addLocationTimeZoneManagerConfigListener( @NonNull ConfigurationChangeListener listener) { mServerFlags.addListener(listener, LOCATION_TIME_ZONE_MANAGER_SERVER_FLAGS_KEYS_TO_WATCH); } /** Returns {@code true} if any form of automatic time zone detection is supported. */ Loading @@ -197,11 +181,19 @@ public final class ServiceConfigAccessor { /** * Returns {@code true} if the location-based time zone detection feature can be supported on * this device at all according to config. When {@code false}, implies that various other * location-based settings will be turned off or rendered meaningless. Typically {@link * #isGeoTimeZoneDetectionFeatureSupported()} should be used instead. * location-based services and settings will be turned off or rendered meaningless. * * <p>This is the ultimate "feature switch" for location-based time zone detection. If this is * {@code false}, the device cannot support the feature without a config change or a reboot: * This affects what services are started on boot to minimize expense when the feature is not * wanted. * * Typically {@link #isGeoTimeZoneDetectionFeatureSupported()} should be used except during * boot. */ public boolean isGeoTimeZoneDetectionFeatureSupportedInConfig() { return mGeoDetectionFeatureSupportedInConfig; return mContext.getResources().getBoolean( com.android.internal.R.bool.config_enableGeolocationTimeZoneDetection); } /** Loading @@ -213,7 +205,7 @@ public final class ServiceConfigAccessor { // 1) Be turned on in config. // 2) Not be turned off via a server flag. // 3) There must be at least one location time zone provider enabled / configured. return mGeoDetectionFeatureSupportedInConfig return isGeoTimeZoneDetectionFeatureSupportedInConfig() && isGeoTimeZoneDetectionFeatureSupportedInternal() && atLeastOneProviderIsEnabled(); } Loading
services/core/java/com/android/server/timezonedetector/TimeZoneDetectorInternal.java +1 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ import android.annotation.NonNull; * <p>The methods on this class can be called from any thread. * @hide */ public interface TimeZoneDetectorInternal extends Dumpable.Container { public interface TimeZoneDetectorInternal { /** Adds a listener that will be invoked when {@link ConfigurationInternal} may have changed. */ void addConfigurationListener(@NonNull ConfigurationChangeListener listener); Loading