packages / apps / Settings / src / com / android / settings / DateTimeSettings.java
@Override
protected List <AbstractPreferenceController> createPreferenceControllers(Context context){
final List <AbstractPreferenceController> controllers = new ArrayList <>();
最終的なアクティビティアクティビティ= getActivity();
final Intent intent = activity.getIntent();
最終ブール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));
リターンコントローラー;
}
packages / apps / Settings / res / xml / date_time_prefs.xml
<PreferenceCategory
アンドロイド:キー= "time_format_preference_category"
アンドロイド:レイアウト= "@レイアウト/ preference_category_no_label">
<SwitchPreference
アンドロイド:キー= "auto_24hour"
アンドロイド:タイトル= "@文字列/ date_time_24hour_auto"
アンドロイド:summaryOn = "文字列@ / date_time_24hour_auto_summary"
アンドロイド: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
プライベート静的最終文字列KEY_TIME_FORMAT = "24時間";
@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());
最終的なカレンダーは今= Calendar.getInstance();
mDummyDate.setTimeZone(now.getTimeZone());
// 12月31日を使用しているのは、日付形式を示すときに明確であるためです。
// 13:00を使用するので、12/24時間のオプションを示すことができます。
mDummyDate.set(now.get(Calendar.YEAR)、11、31、13、0、0);
最終的な日付dummyDate = mDummyDate.getTime();
preference.setSummary(DateFormat.getTimeFormat(mContext).format(dummyDate));
}
プライベートブールis24Hour(){
return DateFormat.is24HourFormat(mContext);
}
つまり、自動24時間形式オプションがtrueの場合
、現在の地域設定、オプションのデフォルト値(true / false)、および要約表示値(午後1時/午後13時)に従って、24時間形式を使用するオプションがグレー表示(無効)になります。 )