Android 24時間システムと24時間システム(自動24時間形式と24時間形式の使用)のコードフローの分析

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時間形式を使用するオプションがグレー表示(無効)になります。 )

31件の元の記事を公開 いいね6 10,000人以上の訪問者

おすすめ

転載: blog.csdn.net/u012824529/article/details/96306952