packages/apps/Settings/src/com/android/settings/DateTimeSettings.java
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final Activity activity = getActivity();
final Intent intent = activity.getIntent();
final boolean isFromSUW = intent.getBooleanExtra(EXTRA_IS_FROM_SUW, false);
final AutoTimeZonePreferenceController autoTimeZonePreferenceController =
new AutoTimeZonePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, isFromSUW);
final AutoTimePreferenceController autoTimePreferenceController =
new AutoTimePreferenceController(
activity, this /* UpdateTimeAndDateCallback */);
final AutoTimeFormatPreferenceController autoTimeFormatPreferenceController =
new AutoTimeFormatPreferenceController(
activity, this /* UpdateTimeAndDateCallback */);
controllers.add(autoTimeZonePreferenceController);
controllers.add(autoTimePreferenceController);
controllers.add(autoTimeFormatPreferenceController);
controllers.add(new TimeFormatPreferenceController(
activity, this /* UpdateTimeAndDateCallback */, isFromSUW));
controllers.add(new TimeZonePreferenceController(
activity, autoTimeZonePreferenceController));
controllers.add(new TimePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
controllers.add(new DatePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
return controllers;
}
packages/apps/Settings/res/xml/date_time_prefs.xml
<PreferenceCategory
android:key="time_format_preference_category"
android:layout="@layout/preference_category_no_label">
<SwitchPreference
android:key="auto_24hour"
android:title="@string/date_time_24hour_auto"
android:summaryOn="@string/date_time_24hour_auto_summary"
android:summaryOff="@string/date_time_24hour_auto_summary" />
<SwitchPreference
android:key="24 hour"
android:title="@string/date_time_24hour" />
</PreferenceCategory>
</PreferenceScreen>
packages/apps/Settings/src/com/android/settings/datetime/AutoTimeFormatPreferenceController.java
public class AutoTimeFormatPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin {
private static final String KEY_AUTO_24_HOUR = "auto_24hour";
public AutoTimeFormatPreferenceController(Context context, UpdateTimeAndDateCallback callback) {
super(context);
}
@Override
public boolean isAvailable() {
return true;
}
@Override
public String getPreferenceKey() {
return KEY_AUTO_24_HOUR;
}
@Override
public void updateState(Preference preference) {
if (!(preference instanceof SwitchPreference)) {
return;
}
((SwitchPreference) preference).setChecked(isAutoTimeFormatSelection(mContext));
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!(preference instanceof TwoStatePreference)
|| !TextUtils.equals(KEY_AUTO_24_HOUR, preference.getKey())) {
return false;
}
boolean auto24HourEnabled = ((SwitchPreference) preference).isChecked();
Boolean is24Hour;
if (auto24HourEnabled) {
is24Hour = null;
} else {
is24Hour = is24HourLocale(mContext.getResources().getConfiguration().locale);
}
TimeFormatPreferenceController.update24HourFormat(mContext, is24Hour);
return true;
}
boolean is24HourLocale(Locale locale) {
return DateFormat.is24HourLocale(locale);
}
/**
* Returns if the system is currently configured to pick the time format automatically based on
* the locale.
*/
static boolean isAutoTimeFormatSelection(Context context) {
return Settings.System.getString(context.getContentResolver(), System.TIME_12_24) == null;
}
}
frameworks/base/core/java/android/provider/Settings.java
/**
* Display times as 12 or 24 hours
* 12
* 24
*/
public static final String TIME_12_24 = "time_12_24";
/** @hide */
public static final Validator TIME_12_24_VALIDATOR =
new SettingsValidators.DiscreteValueValidator(new String[] {"12", "24", null});
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
private void loadSystemSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
+ " VALUES(?,?);");
loadSetting(stmt, Settings.System.TIME_12_24, 24);
}
而在
packages/apps/Settings/src/com/android/settings/datetime/TimeFormatPreferenceController.java
private static final String KEY_TIME_FORMAT = "24 hour";
@Override
public String getPreferenceKey() {
return KEY_TIME_FORMAT;
}
@Override
public void updateState(Preference preference) {
if (!(preference instanceof TwoStatePreference)) {
return;
}
preference.setEnabled(
!AutoTimeFormatPreferenceController.isAutoTimeFormatSelection(mContext));
((TwoStatePreference) preference).setChecked(is24Hour());
final Calendar now = Calendar.getInstance();
mDummyDate.setTimeZone(now.getTimeZone());
// We use December 31st because it's unambiguous when demonstrating the date format.
// We use 13:00 so we can demonstrate the 12/24 hour options.
mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0);
final Date dummyDate = mDummyDate.getTime();
preference.setSummary(DateFormat.getTimeFormat(mContext).format(dummyDate));
}
private boolean is24Hour() {
return DateFormat.is24HourFormat(mContext);
}
即如果Automatic 24-hour format选项为true.
则Use 24-hour format选项置灰(disable), 根据当前地区设置, 该选项默认值(true/false)和summary显示值(下午1点/13:00)