/* * Copyright (C) 2016 Benzo Rom * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.nitrogen.settings.fragments; import android.app.ActivityManager; import android.app.AlertDialog; import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Bundle; import android.provider.Settings; import android.support.v7.preference.ListPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceCategory; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.preference.SwitchPreference; import android.text.format.DateFormat; import android.view.View; import android.widget.EditText; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import java.util.Date; public class ClockDate extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener { private static final String STATUS_BAR_CLOCK_STYLE = "status_bar_clock"; private static final String STATUS_BAR_AM_PM = "status_bar_am_pm"; private static final String STATUS_BAR_CLOCK_DATE_DISPLAY = "clock_date_display"; private static final String STATUS_BAR_CLOCK_DATE_STYLE = "clock_date_style"; private static final String STATUS_BAR_CLOCK_DATE_FORMAT = "clock_date_format"; private static final String PREF_CLOCK_DATE_POSITION = "clock_date_position"; public static final int CLOCK_DATE_STYLE_LOWERCASE = 1; public static final int CLOCK_DATE_STYLE_UPPERCASE = 2; private static final int CUSTOM_CLOCK_DATE_FORMAT_INDEX = 18; private ListPreference mStatusBarClock; private ListPreference mStatusBarAmPm; private ListPreference mClockDateDisplay; private ListPreference mClockDateStyle; private ListPreference mClockDateFormat; private ListPreference mClockDatePosition; @Override protected int getMetricsCategory() { return MetricsEvent.NITROGEN_SETTINGS; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.clock_date_settings); ContentResolver resolver = getActivity().getContentResolver(); mStatusBarClock = (ListPreference) findPreference(STATUS_BAR_CLOCK_STYLE); mStatusBarAmPm = (ListPreference) findPreference(STATUS_BAR_AM_PM); mClockDateDisplay = (ListPreference) findPreference(STATUS_BAR_CLOCK_DATE_DISPLAY); mClockDateStyle = (ListPreference) findPreference(STATUS_BAR_CLOCK_DATE_STYLE); int clockStyle = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_CLOCK, 1); mStatusBarClock.setValue(String.valueOf(clockStyle)); mStatusBarClock.setSummary(mStatusBarClock.getEntry()); mStatusBarClock.setOnPreferenceChangeListener(this); if (DateFormat.is24HourFormat(getActivity())) { mStatusBarAmPm.setEnabled(false); mStatusBarAmPm.setSummary(R.string.status_bar_am_pm_info); } else { int statusBarAmPm = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_AM_PM, 2); mStatusBarAmPm.setValue(String.valueOf(statusBarAmPm)); mStatusBarAmPm.setSummary(mStatusBarAmPm.getEntry()); mStatusBarAmPm.setOnPreferenceChangeListener(this); } int clockDateDisplay = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_CLOCK_DATE_DISPLAY, 0); mClockDateDisplay.setValue(String.valueOf(clockDateDisplay)); mClockDateDisplay.setSummary(mClockDateDisplay.getEntry()); mClockDateDisplay.setOnPreferenceChangeListener(this); int clockDateStyle = Settings.System.getInt(resolver, Settings.System.STATUS_BAR_CLOCK_DATE_STYLE, 0); mClockDateStyle.setValue(String.valueOf(clockDateStyle)); mClockDateStyle.setSummary(mClockDateStyle.getEntry()); mClockDateStyle.setOnPreferenceChangeListener(this); mClockDateFormat = (ListPreference) findPreference(STATUS_BAR_CLOCK_DATE_FORMAT); mClockDateFormat.setOnPreferenceChangeListener(this); if (mClockDateFormat.getValue() == null) { mClockDateFormat.setValue("EEE"); } mClockDatePosition = (ListPreference) findPreference(PREF_CLOCK_DATE_POSITION); mClockDatePosition.setOnPreferenceChangeListener(this); mClockDatePosition.setValue(Integer.toString(Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_POSITION, 0))); mClockDatePosition.setSummary(mClockDatePosition.getEntry()); parseClockDateFormats(); } @Override public void onResume() { super.onResume(); Configuration config = getResources().getConfiguration(); if (config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { mStatusBarClock.setEntries(getActivity().getResources().getStringArray( R.array.status_bar_clock_style_entries_rtl)); mStatusBarClock.setSummary(mStatusBarClock.getEntry()); } } public boolean onPreferenceChange(Preference preference, Object newValue) { AlertDialog dialog; ContentResolver resolver = getActivity().getContentResolver(); if (preference == mStatusBarClock) { int clockStyle = Integer.parseInt((String) newValue); int index = mStatusBarClock.findIndexOfValue((String) newValue); Settings.System.putInt( resolver, Settings.System.STATUS_BAR_CLOCK, clockStyle); mStatusBarClock.setSummary(mStatusBarClock.getEntries()[index]); if (clockStyle == 0) { mClockDateDisplay.setEnabled(false); } else { mClockDateDisplay.setEnabled(true); } return true; } else if (preference == mStatusBarAmPm) { int statusBarAmPm = Integer.valueOf((String) newValue); int index = mStatusBarAmPm.findIndexOfValue((String) newValue); Settings.System.putInt( resolver, Settings.System.STATUS_BAR_AM_PM, statusBarAmPm); mStatusBarAmPm.setSummary(mStatusBarAmPm.getEntries()[index]); return true; } else if (preference == mClockDateDisplay) { int clockDateDisplay = Integer.valueOf((String) newValue); int index = mClockDateDisplay.findIndexOfValue((String) newValue); Settings.System.putInt(resolver, Settings.System.STATUS_BAR_CLOCK_DATE_DISPLAY, clockDateDisplay); mClockDateDisplay.setSummary(mClockDateDisplay.getEntries()[index]); if (clockDateDisplay == 0) { mClockDateStyle.setEnabled(false); mClockDateFormat.setEnabled(false); } else { mClockDateStyle.setEnabled(true); mClockDateFormat.setEnabled(true); } return true; } else if (preference == mClockDateStyle) { int clockDateStyle = Integer.valueOf((String) newValue); int index = mClockDateStyle.findIndexOfValue((String) newValue); Settings.System.putInt(resolver, Settings.System.STATUS_BAR_CLOCK_DATE_STYLE, clockDateStyle); mClockDateStyle.setSummary(mClockDateStyle.getEntries()[index]); parseClockDateFormats(); return true; } else if (preference == mClockDateFormat) { int index = mClockDateFormat.findIndexOfValue((String) newValue); if (index == CUSTOM_CLOCK_DATE_FORMAT_INDEX) { AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); alert.setTitle(R.string.clock_date_string_edittext_title); alert.setMessage(R.string.clock_date_string_edittext_summary); final EditText input = new EditText(getActivity()); String oldText = Settings.System.getString( getActivity().getContentResolver(), Settings.System.STATUS_BAR_CLOCK_DATE_FORMAT); if (oldText != null) { input.setText(oldText); } alert.setView(input); alert.setPositiveButton(R.string.menu_save, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int whichButton) { String value = input.getText().toString(); if (value.equals("")) { return; } Settings.System.putString(getActivity().getContentResolver(), Settings.System.STATUS_BAR_CLOCK_DATE_FORMAT, value); return; } }); alert.setNegativeButton(R.string.menu_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int which) { return; } }); dialog = alert.create(); dialog.show(); } else { if ((String) newValue != null) { Settings.System.putString(getActivity().getContentResolver(), Settings.System.STATUS_BAR_CLOCK_DATE_FORMAT, (String) newValue); } } return true; } else if (preference == mClockDatePosition) { int val = Integer.parseInt((String) newValue); int index = mClockDatePosition.findIndexOfValue((String) newValue); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_POSITION, val); mClockDatePosition.setSummary(mClockDatePosition.getEntries()[index]); parseClockDateFormats(); return true; } return false; } private void parseClockDateFormats() { // Parse and repopulate mClockDateFormats's entries based on current date. String[] dateEntries = getResources().getStringArray(R.array.clock_date_format_entries_values); CharSequence parsedDateEntries[]; parsedDateEntries = new String[dateEntries.length]; Date now = new Date(); int lastEntry = dateEntries.length - 1; int dateFormat = Settings.System.getInt(getActivity() .getContentResolver(), Settings.System.STATUS_BAR_CLOCK_DATE_STYLE, 0); for (int i = 0; i < dateEntries.length; i++) { if (i == lastEntry) { parsedDateEntries[i] = dateEntries[i]; } else { String newDate; CharSequence dateString = DateFormat.format(dateEntries[i], now); if (dateFormat == CLOCK_DATE_STYLE_LOWERCASE) { newDate = dateString.toString().toLowerCase(); } else if (dateFormat == CLOCK_DATE_STYLE_UPPERCASE) { newDate = dateString.toString().toUpperCase(); } else { newDate = dateString.toString(); } parsedDateEntries[i] = newDate; } } mClockDateFormat.setEntries(parsedDateEntries); } }