From 1bb6db526771fa594b2e5c0865dc89dce3cf351c Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Fri, 17 Sep 2010 13:34:47 -0700 Subject: [PATCH] Add an Automatic Time Zone setting to Date & Time settings. User can now enable auto-time but disable auto-timezone, especially if we don't have NITZ time from the cell network (or wifi only) and only have NTP time that gives us date and time. --- AndroidManifest.xml | 6 +- res/values/strings.xml | 28 ++++-- res/xml/date_time_prefs.xml | 27 +++--- .../android/settings/DateTimeSettings.java | 93 ++++++++++--------- 4 files changed, 88 insertions(+), 66 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index ecb7b2ab4d1..fb294bab8e5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -384,7 +384,7 @@ - + @@ -407,7 +407,7 @@ - + - + diff --git a/res/values/strings.xml b/res/values/strings.xml index 97e47254ba4..89fee8d9d00 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -498,12 +498,22 @@ Date & time Set date, time, time zone & formats - - Automatic - - Use network-provided values - - Use network-provided values + + Automatic date & time + + Use network-provided time + + Use network-provided time + + Automatic time zone + + Use network-provided time zone + + Use network-provided time zone Use 24-hour format @@ -525,7 +535,7 @@ Lock device after timeout Adjust the delay before the device automatically locks - + Location & security @@ -1927,7 +1937,7 @@ found in the list of installed applications. Provider %1$s is in use. - + Language & keyboard @@ -2077,7 +2087,7 @@ found in the list of installed applications. %1$ds - + Usage statistics diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml index 08c5d5c6d4c..657d6b30571 100644 --- a/res/xml/date_time_prefs.xml +++ b/res/xml/date_time_prefs.xml @@ -4,9 +4,9 @@ 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. @@ -16,31 +16,36 @@ - - + + - - diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java index 5a8f148b2f6..4d199b8d4d1 100644 --- a/src/com/android/settings/DateTimeSettings.java +++ b/src/com/android/settings/DateTimeSettings.java @@ -48,47 +48,50 @@ public class DateTimeSettings extends SettingsPreferenceFragment private static final String HOURS_12 = "12"; private static final String HOURS_24 = "24"; - + // Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc. // The date value is dummy (independent of actual date). private Calendar mDummyDate; private static final String KEY_DATE_FORMAT = "date_format"; private static final String KEY_AUTO_TIME = "auto_time"; + private static final String KEY_AUTO_TIME_ZONE = "auto_zone"; private static final int DIALOG_DATEPICKER = 0; private static final int DIALOG_TIMEPICKER = 1; - - private CheckBoxPreference mAutoPref; + + private CheckBoxPreference mAutoTimePref; private Preference mTimePref; private Preference mTime24Pref; + private CheckBoxPreference mAutoTimeZonePref; private Preference mTimeZone; private Preference mDatePref; private ListPreference mDateFormat; - + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - + addPreferencesFromResource(R.xml.date_time_prefs); - - initUI(); + + initUI(); } - + private void initUI() { - boolean autoEnabled = getAutoState(); + boolean autoTimeEnabled = getAutoState(Settings.System.AUTO_TIME); + boolean autoTimeZoneEnabled = getAutoState(Settings.System.AUTO_TIME_ZONE); mDummyDate = Calendar.getInstance(); mDummyDate.set(mDummyDate.get(Calendar.YEAR), 11, 31, 13, 0, 0); - - mAutoPref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME); - mAutoPref.setChecked(autoEnabled); + + mAutoTimePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME); + mAutoTimePref.setChecked(autoTimeEnabled); mTimePref = findPreference("time"); mTime24Pref = findPreference("24 hour"); mTimeZone = findPreference("timezone"); mDatePref = findPreference("date"); mDateFormat = (ListPreference) findPreference(KEY_DATE_FORMAT); - + String [] dateFormats = getResources().getStringArray(R.array.date_format_values); String [] formattedDates = new String[dateFormats.length]; String currentFormat = getDateFormat(); @@ -109,22 +112,23 @@ public class DateTimeSettings extends SettingsPreferenceFragment formattedDates[i] = formatted; } } - + mDateFormat.setEntries(formattedDates); mDateFormat.setEntryValues(R.array.date_format_values); mDateFormat.setValue(currentFormat); - - mTimePref.setEnabled(!autoEnabled); - mDatePref.setEnabled(!autoEnabled); - mTimeZone.setEnabled(!autoEnabled); + + mTimePref.setEnabled(!autoTimeEnabled); + mDatePref.setEnabled(!autoTimeEnabled); + mTimeZone.setEnabled(!autoTimeZoneEnabled); } - + @Override public void onResume() { super.onResume(); - - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); + + getPreferenceScreen().getSharedPreferences() + .registerOnSharedPreferenceChangeListener(this); ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour()); @@ -138,13 +142,14 @@ public class DateTimeSettings extends SettingsPreferenceFragment updateTimeAndDateDisplay(getActivity()); } - @Override + @Override public void onPause() { super.onPause(); getActivity().unregisterReceiver(mIntentReceiver); - getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); + getPreferenceScreen().getSharedPreferences() + .unregisterOnSharedPreferenceChangeListener(this); } - + private void updateTimeAndDateDisplay(Context context) { java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(context); final Calendar now = Calendar.getInstance(); @@ -180,19 +185,22 @@ public class DateTimeSettings extends SettingsPreferenceFragment @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { if (key.equals(KEY_DATE_FORMAT)) { - String format = preferences.getString(key, + String format = preferences.getString(key, getResources().getString(R.string.default_date_format)); - Settings.System.putString(getContentResolver(), + Settings.System.putString(getContentResolver(), Settings.System.DATE_FORMAT, format); updateTimeAndDateDisplay(getActivity()); } else if (key.equals(KEY_AUTO_TIME)) { boolean autoEnabled = preferences.getBoolean(key, true); - Settings.System.putInt(getContentResolver(), - Settings.System.AUTO_TIME, + Settings.System.putInt(getContentResolver(), Settings.System.AUTO_TIME, autoEnabled ? 1 : 0); mTimePref.setEnabled(!autoEnabled); mDatePref.setEnabled(!autoEnabled); - mTimeZone.setEnabled(!autoEnabled); + } else if (key.equals(KEY_AUTO_TIME_ZONE)) { + boolean autoZoneEnabled = preferences.getBoolean(key, true); + Settings.System.putInt( + getContentResolver(), Settings.System.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0); + mTimeZone.setEnabled(!autoZoneEnabled); } } @@ -272,39 +280,38 @@ public class DateTimeSettings extends SettingsPreferenceFragment } return super.onPreferenceTreeClick(preferenceScreen, preference); } - + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { updateTimeAndDateDisplay(getActivity()); } - + private void timeUpdated() { Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED); getActivity().sendBroadcast(timeChanged); } - + /* Get & Set values from the system settings */ - + private boolean is24Hour() { return DateFormat.is24HourFormat(getActivity()); } - + private void set24Hour(boolean is24Hour) { Settings.System.putString(getContentResolver(), Settings.System.TIME_12_24, is24Hour? HOURS_24 : HOURS_12); } - + private String getDateFormat() { - return Settings.System.getString(getContentResolver(), + return Settings.System.getString(getContentResolver(), Settings.System.DATE_FORMAT); } - - private boolean getAutoState() { + + private boolean getAutoState(String name) { try { - return Settings.System.getInt(getContentResolver(), - Settings.System.AUTO_TIME) > 0; + return Settings.System.getInt(getContentResolver(), name) > 0; } catch (SettingNotFoundException snfe) { return true; } @@ -346,7 +353,7 @@ public class DateTimeSettings extends SettingsPreferenceFragment append(", "). append(tz.getDisplayName(daylight, TimeZone.LONG)); - return sb.toString(); + return sb.toString(); } private static char[] formatOffset(int off) { @@ -364,7 +371,7 @@ public class DateTimeSettings extends SettingsPreferenceFragment buf[3] = '+'; } - int hours = off / 60; + int hours = off / 60; int minutes = off % 60; buf[4] = (char) ('0' + hours / 10); @@ -377,7 +384,7 @@ public class DateTimeSettings extends SettingsPreferenceFragment return buf; } - + private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) {