1.找到setting 中的 android:key="auto_zone" 控件 对应控制器AutoTimeZonePreferenceController
路径 : packages\apps\Settings\res\xml\date_time_prefs.xml packages\apps\Settings\src\com\android\settings\datetime\AutoTimeZonePreferenceController.java
<com.android.settingslib.RestrictedSwitchPreference
android:key="auto_zone"
android:title="@string/zone_auto_title"
settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.AutoTimeZonePreferenceController" />
在AutoTimeZonePreferenceController中可以看到isChecked()
TimeZoneConfiguration config = mTimeManager.getTimeZoneCapabilitiesAndConfig().getConfiguration();
config.isAutoDetectionEnabled();
setChecked()
TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setAutoDetectionEnabled(isChecked) .build();
mTimeManager.updateTimeZoneConfiguration(configuration);
相关源码路径:
frameworks\base\core\java\android\app\time\TimeZoneConfiguration.java
frameworks\base\core\java\android\app\time\TimeManager.java
frameworks\base\services\core\java\com\android\server\timezonedetector\TimeZoneDetectorService.java
frameworks\base\services\core\java\com\android\server\timezonedetector\TimeZoneDetectorStrategy.java
frameworks\base\services\core\java\com\android\server\timezonedetector\TimeZoneDetectorStrategyImpl.java
frameworks\base\services\core\java\com\android\server\timedetector\ServiceConfigAccessor.java
frameworks\base\services\core\java\com\android\server\timedetector\ServiceConfigAccessor.java
frameworks\base\services\core\java\com\android\server\timedetector\ServiceConfigAccessorImpl.java
frameworks\base\core\java\android\app\time\TimeZoneCapabilities.java
2.从TimeManager的updateTimeZoneConfiguration方法入手:
mITimeZoneDetectorService.updateConfiguration(configuration);
- - - >
mTimeZoneDetectorStrategy.updateConfiguration( resolvedUserId, configuration, bypassUserPolicyChecks);
其中 mTimeZoneDetectorStrategy 是一个接口,由TimeZoneDetectorStrategyImpl具体实现
- - - >
mServiceConfigAccessor.updateConfiguration( userId, configuration, bypassUserPolicyChecks);
其中 mServiceConfigAccessor是一个接口,由ServiceConfigAccessorImpl具体实现
- - - >
TimeZoneCapabilities.tryApplyConfigChanges(oldConfiguration, requestedConfigurationUpdates); storeConfiguration(userId, requestedConfigurationUpdates, newConfiguration);
- - - >
setAutoDetectionEnabledIfRequired(autoDetectionEnabled);
- - - >
最终由这个值来控制是否开启
Settings.Global.putInt(mCr, Settings.Global.AUTO_TIME_ZONE, enabled ? 1 : 0);
3.设置默认值,设置def_auto_time_zone该值即可
源码路径:
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
loadBooleanSetting(stmt, Settings.Global.AUTO_TIME_ZONE, R.bool.def_auto_time_zone);