Merge "[2/2] OmniGears: Clock tweaks" into android-4.4
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index dd68836..b0f28a2 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -315,4 +315,71 @@
<item>2</item>
</string-array>
+ <!--- Clock -->
+ <string-array name="clock_style_entries" translatable="false">
+ <item>@string/right_clock</item>
+ <item>@string/center_clock</item>
+ </string-array>
+
+ <string-array name="clock_style_values" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ </string-array>
+
+ <string-array name="entries_status_bar_am_pm">
+ <item>@string/am_pm_clock_none</item>
+ <item>@string/am_pm_clock_small</item>
+ <item>@string/am_pm_clock_normal</item>
+ </string-array>
+
+ <string-array name="values_status_bar_am_pm" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ </string-array>
+
+ <string-array name="clock_date_display_entries">
+ <item>@string/clock_date_display_none</item>
+ <item>@string/clock_date_display_small</item>
+ <item>@string/clock_date_display_normal</item>
+ </string-array>
+
+ <string-array name="clock_date_display_values" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ </string-array>
+
+ <string-array name="clock_date_style_entries">
+ <item>@string/clock_date_style_normal</item>
+ <item>@string/clock_date_style_lowercase</item>
+ <item>@string/clock_date_style_uppercase</item>
+ </string-array>
+
+ <string-array name="clock_date_style_values" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ </string-array>
+
+ <string-array name="clock_date_format_entries_values">
+ <item>dd/MM/yy</item>
+ <item>MM/dd/yy</item>
+ <item>yyyy-MM-dd</item>
+ <item>yyyy-dd-MM</item>
+ <item>dd-MM-yyyy</item>
+ <item>MM-dd-yyyy</item>
+ <item>MMM dd</item>
+ <item>MMM dd, yyyy</item>
+ <item>MMMM dd, yyyy</item>
+ <item>EEE</item>
+ <item>EEE dd</item>
+ <item>EEE dd/MM</item>
+ <item>EEE MM/dd</item>
+ <item>EEE dd MMM</item>
+ <item>EEE MMM dd</item>
+ <item>EEE MMMM dd</item>
+ <item>EEEE dd/MM</item>
+ <item>EEEE MM/dd</item>
+ </string-array>
</resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 26ba144..5273838 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -442,4 +442,34 @@
<string name="force_show_overflow_menu_title">Show overflow menu</string>
<string name="force_show_overflow_menu_summary">Force show the three-dot overflow menu in applications. Require restart of application</string>
+
+ <!-- Clock -->
+ <string name="status_bar_clock">Clock and date</string>
+ <string name="status_bar_clock_title">Clock and date style</string>
+ <string name="clock_title_enable">Alignment</string>
+ <string name="clock_enabled">Enabled</string>
+ <string name="clock_disabled">Disabled</string>
+ <string name="clock_color_title">Color</string>
+ <string name="status_bar_clock_style_reset">Reset color</string>
+ <string name="status_bar_show_clock_title">Show clock and date</string>
+ <string name="status_bar_am_pm_title">AM/PM</string>
+ <string name="status_bar_am_pm_info">24-hour clock is enabled</string>
+ <string name="enable_clock_weekday">Day of the week</string>
+ <string name="enable_clock_weekday_summary">Abbreviated day of the week before the time</string>
+ <string name="right_clock">Right clock</string>
+ <string name="center_clock">Center clock</string>
+ <string name="dont_show">Don\'t show</string>
+ <string name="clock_date_display">Date</string>
+ <string name="clock_date_display_summary">Display custom date before the clock</string>
+ <string name="clock_date_style">Date style</string>
+ <string name="clock_date_format">Date format</string>
+ <string name="am_pm_clock_normal">Normal font size</string>
+ <string name="am_pm_clock_small">Small font size</string>
+ <string name="am_pm_clock_none">Don\'t show</string>
+ <string name="clock_date_display_none">Don\'t show</string>
+ <string name="clock_date_display_small">Small font size</string>
+ <string name="clock_date_display_normal">Normal font size</string>
+ <string name="clock_date_style_normal">Normal</string>
+ <string name="clock_date_style_lowercase">Lowercase</string>
+ <string name="clock_date_style_uppercase">Uppercase</string>
</resources>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 60ae2a6..9b1d78c 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -71,6 +71,11 @@
android:summary="@string/qs_configurable_summary"
android:persistent="false"/>
+ <PreferenceScreen
+ android:fragment="org.omnirom.omnigears.slim.StatusBarClockStyle"
+ android:key="clock_style_pref"
+ android:title="@string/status_bar_clock" />
+
</PreferenceCategory>
<!-- Navigation bar -->
diff --git a/res/xml/status_bar_clock_style.xml b/res/xml/status_bar_clock_style.xml
new file mode 100644
index 0000000..28f9062
--- /dev/null
+++ b/res/xml/status_bar_clock_style.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2013 SlimRoms Project
+
+ 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.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/status_bar_clock_title">
+
+ <CheckBoxPreference
+ android:key="status_bar_show_clock"
+ android:title="@string/status_bar_show_clock_title"
+ android:defaultValue="true"
+ android:persistent="false"/>
+
+ <ListPreference
+ android:key="clock_style"
+ android:entries="@array/clock_style_entries"
+ android:entryValues="@array/clock_style_values"
+ android:title="@string/clock_title_enable"
+ android:dependency="status_bar_show_clock"
+ android:persistent="false"/>
+
+ <ListPreference
+ android:key="status_bar_am_pm"
+ android:dialogTitle="@string/status_bar_am_pm_title"
+ android:title="@string/status_bar_am_pm_title"
+ android:entries="@array/entries_status_bar_am_pm"
+ android:entryValues="@array/values_status_bar_am_pm"
+ android:dependency="status_bar_show_clock"
+ android:persistent="false"/>
+
+ <ListPreference
+ android:key="clock_date_display"
+ android:title="@string/clock_date_display"
+ android:summary="@string/clock_date_display_summary"
+ android:entries="@array/clock_date_display_entries"
+ android:entryValues="@array/clock_date_display_values"
+ android:dependency="status_bar_show_clock"
+ android:persistent="false"/>
+
+ <ListPreference
+ android:key="clock_date_style"
+ android:title="@string/clock_date_style"
+ android:entries="@array/clock_date_style_entries"
+ android:entryValues="@array/clock_date_style_values"
+ android:dependency="status_bar_show_clock"
+ android:persistent="false"/>
+
+ <ListPreference
+ android:key="clock_date_format"
+ android:title="@string/clock_date_format"
+ android:entries="@array/clock_date_format_entries_values"
+ android:entryValues="@array/clock_date_format_entries_values"
+ android:dependency="status_bar_show_clock"
+ android:persistent="false"/>
+
+</PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/slim/StatusBarClockStyle.java b/src/org/omnirom/omnigears/slim/StatusBarClockStyle.java
new file mode 100644
index 0000000..73fa586
--- /dev/null
+++ b/src/org/omnirom/omnigears/slim/StatusBarClockStyle.java
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2013 Slimroms Project
+ *
+ * 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 org.omnirom.omnigears.slim;
+
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.text.format.DateFormat;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import java.util.Date;
+
+import org.omnirom.omnigears.interfacesettings.BarsSettings;
+
+public class StatusBarClockStyle extends SettingsPreferenceFragment
+ implements OnPreferenceChangeListener {
+
+ private static final String TAG = "StatusBarClockStyle";
+
+ private static final String PREF_ENABLE = "clock_style";
+ private static final String PREF_AM_PM_STYLE = "status_bar_am_pm";
+ private static final String PREF_CLOCK_DATE_DISPLAY = "clock_date_display";
+ private static final String PREF_CLOCK_DATE_STYLE = "clock_date_style";
+ private static final String PREF_CLOCK_DATE_FORMAT = "clock_date_format";
+ private static final String STATUS_BAR_CLOCK = "status_bar_show_clock";
+
+ public static final int CLOCK_DATE_STYLE_LOWERCASE = 1;
+ public static final int CLOCK_DATE_STYLE_UPPERCASE = 2;
+
+ private ListPreference mClockStyle;
+ private ListPreference mClockAmPmStyle;
+ private ListPreference mClockDateDisplay;
+ private ListPreference mClockDateStyle;
+ private ListPreference mClockDateFormat;
+ private CheckBoxPreference mStatusBarClock;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ createCustomView();
+ }
+
+ private PreferenceScreen createCustomView() {
+ addPreferencesFromResource(R.xml.status_bar_clock_style);
+ PreferenceScreen prefSet = getPreferenceScreen();
+
+ mClockStyle = (ListPreference) findPreference(PREF_ENABLE);
+ mClockStyle.setOnPreferenceChangeListener(this);
+ mClockStyle.setValue(Integer.toString(Settings.System.getInt(getActivity()
+ .getContentResolver(), Settings.System.STATUSBAR_CLOCK_STYLE,
+ 0)));
+ mClockStyle.setSummary(mClockStyle.getEntry());
+
+ mClockAmPmStyle = (ListPreference) prefSet.findPreference(PREF_AM_PM_STYLE);
+ mClockAmPmStyle.setOnPreferenceChangeListener(this);
+ mClockAmPmStyle.setValue(Integer.toString(Settings.System.getInt(getActivity()
+ .getContentResolver(), Settings.System.STATUSBAR_CLOCK_AM_PM_STYLE,
+ 0)));
+ boolean is24hour = DateFormat.is24HourFormat(getActivity());
+ if (is24hour) {
+ mClockAmPmStyle.setSummary(R.string.status_bar_am_pm_info);
+ } else {
+ mClockAmPmStyle.setSummary(mClockAmPmStyle.getEntry());
+ }
+ mClockAmPmStyle.setEnabled(!is24hour);
+
+ mClockDateDisplay = (ListPreference) findPreference(PREF_CLOCK_DATE_DISPLAY);
+ mClockDateDisplay.setOnPreferenceChangeListener(this);
+ mClockDateDisplay.setValue(Integer.toString(Settings.System.getInt(getActivity()
+ .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY,
+ 0)));
+ mClockDateDisplay.setSummary(mClockDateDisplay.getEntry());
+
+ mClockDateStyle = (ListPreference) findPreference(PREF_CLOCK_DATE_STYLE);
+ mClockDateStyle.setOnPreferenceChangeListener(this);
+ mClockDateStyle.setValue(Integer.toString(Settings.System.getInt(getActivity()
+ .getContentResolver(), Settings.System.STATUSBAR_CLOCK_DATE_STYLE,
+ 2)));
+ mClockDateStyle.setSummary(mClockDateStyle.getEntry());
+
+ mClockDateFormat = (ListPreference) findPreference(PREF_CLOCK_DATE_FORMAT);
+
+ mClockDateFormat.setOnPreferenceChangeListener(this);
+ String clockDateFormat = Settings.System.getString(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_DATE_FORMAT);
+ if (clockDateFormat == null) {
+ mClockDateFormat.setValue("EEE");
+ } else {
+ mClockDateFormat.setValue(clockDateFormat);
+ }
+ parseClockDateFormats();
+ mClockDateFormat.setSummary(mClockDateFormat.getEntry());
+
+ mStatusBarClock = (CheckBoxPreference) prefSet.findPreference(STATUS_BAR_CLOCK);
+ mStatusBarClock.setChecked((Settings.System.getInt(
+ getActivity().getApplicationContext().getContentResolver(),
+ Settings.System.STATUS_BAR_CLOCK, 1) == 1));
+ mStatusBarClock.setOnPreferenceChangeListener(this);
+
+ try {
+ if (Settings.System.getInt(getActivity().getApplicationContext().getContentResolver(),
+ Settings.System.TIME_12_24) == 24) {
+ mClockAmPmStyle.setEnabled(false);
+ mClockAmPmStyle.setSummary(R.string.status_bar_am_pm_info);
+ }
+ } catch (SettingNotFoundException e ) {
+ }
+
+ boolean mClockDateToggle = Settings.System.getInt(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY, 0) != 0;
+ if (!mClockDateToggle) {
+ mClockDateStyle.setEnabled(false);
+ mClockDateFormat.setEnabled(false);
+ }
+
+ return prefSet;
+ }
+
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (preference == mClockAmPmStyle) {
+ int val = Integer.parseInt((String) newValue);
+ int index = mClockAmPmStyle.findIndexOfValue((String) newValue);
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_AM_PM_STYLE, val);
+ mClockAmPmStyle.setSummary(mClockAmPmStyle.getEntries()[index]);
+ return true;
+ } else if (preference == mClockStyle) {
+ int val = Integer.parseInt((String) newValue);
+ int index = mClockStyle.findIndexOfValue((String) newValue);
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_STYLE, val);
+ mClockStyle.setSummary(mClockStyle.getEntries()[index]);
+ return true;
+ } else if (preference == mClockDateDisplay) {
+ int val = Integer.parseInt((String) newValue);
+ int index = mClockDateDisplay.findIndexOfValue((String) newValue);
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_DATE_DISPLAY, val);
+ mClockDateDisplay.setSummary(mClockDateDisplay.getEntries()[index]);
+ if (val == 0) {
+ mClockDateStyle.setEnabled(false);
+ mClockDateFormat.setEnabled(false);
+ } else {
+ mClockDateStyle.setEnabled(true);
+ mClockDateFormat.setEnabled(true);
+ }
+ return true;
+ } else if (preference == mClockDateStyle) {
+ int val = Integer.parseInt((String) newValue);
+ int index = mClockDateStyle.findIndexOfValue((String) newValue);
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_DATE_STYLE, val);
+ mClockDateStyle.setSummary(mClockDateStyle.getEntries()[index]);
+ parseClockDateFormats();
+ return true;
+ } else if (preference == mStatusBarClock) {
+ Settings.System.putInt(getActivity().getApplicationContext().getContentResolver(),
+ Settings.System.STATUS_BAR_CLOCK,
+ (Boolean) newValue ? 1 : 0);
+ return true;
+ } else if (preference == mClockDateFormat) {
+ if ((String) newValue != null) {
+ Settings.System.putString(getActivity().getContentResolver(),
+ Settings.System.STATUSBAR_CLOCK_DATE_FORMAT, (String) newValue);
+ mClockDateFormat.setSummary(mClockDateFormat.getEntry());
+ }
+ 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.STATUSBAR_CLOCK_DATE_STYLE, 2);
+ 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);
+ }
+
+}