1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnseimport android.app.admin.DevicePolicyManager; 2029e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawaimport android.app.Activity; 215f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasaniimport android.app.AlarmManager; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.DatePickerDialog; 23d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport android.app.Dialog; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.TimePickerDialog; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.SharedPreferences; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.ListPreference; 34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference; 35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings.SettingNotFoundException; 3804487594d73c89aa53548e6ad864e40d15324c62Elliott Hughesimport android.text.BidiFormatter; 3904487594d73c89aa53548e6ad864e40d15324c62Elliott Hughesimport android.text.TextDirectionHeuristics; 4004487594d73c89aa53548e6ad864e40d15324c62Elliott Hughesimport android.text.TextUtils; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.format.DateFormat; 4204487594d73c89aa53548e6ad864e40d15324c62Elliott Hughesimport android.view.View; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.DatePicker; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TimePicker; 4581faf895d7654322d46e1254bd9f75d915c78622Elliott Hughesimport java.text.SimpleDateFormat; 46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Calendar; 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Date; 4804487594d73c89aa53548e6ad864e40d15324c62Elliott Hughesimport java.util.Locale; 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.TimeZone; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 510f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawapublic class DateTimeSettings extends SettingsPreferenceFragment 52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project implements OnSharedPreferenceChangeListener, 5371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener { 54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String HOURS_12 = "12"; 56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String HOURS_24 = "24"; 571bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 5871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa // Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc. 5971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa // The date value is dummy (independent of actual date). 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Calendar mDummyDate; 6171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_DATE_FORMAT = "date_format"; 63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_AUTO_TIME = "auto_time"; 641bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private static final String KEY_AUTO_TIME_ZONE = "auto_zone"; 65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int DIALOG_DATEPICKER = 0; 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int DIALOG_TIMEPICKER = 1; 681bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 697f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // have we been launched from the setup wizard? 707f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng protected static final String EXTRA_IS_FIRST_RUN = "firstRun"; 717f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng 721bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private CheckBoxPreference mAutoTimePref; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTimePref; 74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTime24Pref; 751bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private CheckBoxPreference mAutoTimeZonePref; 76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTimeZone; 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mDatePref; 78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private ListPreference mDateFormat; 791bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 81d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle icicle) { 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 831bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.date_time_prefs); 851bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 861bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani initUI(); 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 881bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void initUI() { 90f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate boolean autoTimeEnabled = getAutoState(Settings.Global.AUTO_TIME); 91f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate boolean autoTimeZoneEnabled = getAutoState(Settings.Global.AUTO_TIME_ZONE); 92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 93fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse mAutoTimePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME); 94fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse 95fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context 96fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse .DEVICE_POLICY_SERVICE); 97fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse if (dpm.getAutoTimeRequired()) { 98fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse mAutoTimePref.setEnabled(false); 99fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse 100fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse // If Settings.Global.AUTO_TIME is false it will be set to true 101fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse // by the device policy manager very soon. 102fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse // Note that this app listens to that change. 103fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse } 104fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse 1057f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng Intent intent = getActivity().getIntent(); 1067f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng boolean isFirstRun = intent.getBooleanExtra(EXTRA_IS_FIRST_RUN, false); 1077f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDummyDate = Calendar.getInstance(); 1091bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1101bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mAutoTimePref.setChecked(autoTimeEnabled); 111ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani mAutoTimeZonePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME_ZONE); 1127f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // Override auto-timezone if it's a wifi-only device or if we're still in setup wizard. 1137f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // TODO: Remove the wifiOnly test when auto-timezone is implemented based on wifi-location. 1148af88fb8387259e51615709b2d1ea0260f7057fdRobert Greenwalt if (Utils.isWifiOnly(getActivity()) || isFirstRun) { 115c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani getPreferenceScreen().removePreference(mAutoTimeZonePref); 116c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani autoTimeZoneEnabled = false; 117c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 118ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani mAutoTimeZonePref.setChecked(autoTimeZoneEnabled); 119ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimePref = findPreference("time"); 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTime24Pref = findPreference("24 hour"); 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimeZone = findPreference("timezone"); 123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDatePref = findPreference("date"); 124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat = (ListPreference) findPreference(KEY_DATE_FORMAT); 1257f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng if (isFirstRun) { 1267f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng getPreferenceScreen().removePreference(mTime24Pref); 1277f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng getPreferenceScreen().removePreference(mDateFormat); 1287f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng } 1291bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String [] dateFormats = getResources().getStringArray(R.array.date_format_values); 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String [] formattedDates = new String[dateFormats.length]; 132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String currentFormat = getDateFormat(); 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Initialize if DATE_FORMAT is not set in the system settings 134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // This can happen after a factory reset (or data wipe) 135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (currentFormat == null) { 136188ca778702938d87313592175a3c2ff86bd3218Eric Fischer currentFormat = ""; 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 138b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva 139b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva // Prevents duplicated values on date format selector. 140b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva mDummyDate.set(mDummyDate.get(Calendar.YEAR), mDummyDate.DECEMBER, 31, 13, 0, 0); 141b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < formattedDates.length; i++) { 143188ca778702938d87313592175a3c2ff86bd3218Eric Fischer String formatted = 144d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani DateFormat.getDateFormatForSetting(getActivity(), dateFormats[i]) 145d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .format(mDummyDate.getTime()); 146188ca778702938d87313592175a3c2ff86bd3218Eric Fischer 147188ca778702938d87313592175a3c2ff86bd3218Eric Fischer if (dateFormats[i].length() == 0) { 148188ca778702938d87313592175a3c2ff86bd3218Eric Fischer formattedDates[i] = getResources(). 149188ca778702938d87313592175a3c2ff86bd3218Eric Fischer getString(R.string.normal_date_format, formatted); 150188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } else { 151188ca778702938d87313592175a3c2ff86bd3218Eric Fischer formattedDates[i] = formatted; 152188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1541bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setEntries(formattedDates); 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setEntryValues(R.array.date_format_values); 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setValue(currentFormat); 1581bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1591bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimePref.setEnabled(!autoTimeEnabled); 1601bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mDatePref.setEnabled(!autoTimeEnabled); 1611bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimeZone.setEnabled(!autoTimeZoneEnabled); 162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 165d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 1671bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1681bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani getPreferenceScreen().getSharedPreferences() 1691bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani .registerOnSharedPreferenceChangeListener(this); 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour()); 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Register for time ticks and other reasons for time change 174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project IntentFilter filter = new IntentFilter(); 175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIME_TICK); 176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIME_CHANGED); 177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 178d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().registerReceiver(mIntentReceiver, filter, null, null); 17929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa 18029e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1831bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani @Override 184d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onPause() { 185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 186d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().unregisterReceiver(mIntentReceiver); 1871bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani getPreferenceScreen().getSharedPreferences() 1881bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani .unregisterOnSharedPreferenceChangeListener(this); 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1901bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1917f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng public void updateTimeAndDateDisplay(Context context) { 19229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(context); 19371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa final Calendar now = Calendar.getInstance(); 194151b0e117443d874c475d25f7144bba1e1b438efKenny Root mDummyDate.setTimeZone(now.getTimeZone()); 19582723df002a27a79545dd18a52333973b056b720Elliott Hughes // We use December 31st because it's unambiguous when demonstrating the date format. 19682723df002a27a79545dd18a52333973b056b720Elliott Hughes // We use 13:00 so we can demonstrate the 12/24 hour options. 197151b0e117443d874c475d25f7144bba1e1b438efKenny Root mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0); 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Date dummyDate = mDummyDate.getTime(); 19971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime())); 20004487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes mTimeZone.setSummary(getTimeZoneText(now.getTimeZone(), true)); 20171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mDatePref.setSummary(shortDateFormat.format(now.getTime())); 202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setSummary(shortDateFormat.format(dummyDate)); 20382723df002a27a79545dd18a52333973b056b720Elliott Hughes mTime24Pref.setSummary(DateFormat.getTimeFormat(getActivity()).format(dummyDate)); 204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2060f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onDateSet(DatePicker view, int year, int month, int day) { 20829e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 20929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 2105f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani setDate(activity, year, month, day); 21129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 21229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2150f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 21729e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 21829e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 2195f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani setTime(activity, hourOfDay, minute); 22029e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 22129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 22271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 22372ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // We don't need to call timeUpdated() here because the TIME_CHANGED 22472ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // broadcast is sent by the AlarmManager as a side effect of setting the 22572ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // SystemClock time. 226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2280f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { 230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (key.equals(KEY_DATE_FORMAT)) { 2311bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani String format = preferences.getString(key, 232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getResources().getString(R.string.default_date_format)); 2331bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani Settings.System.putString(getContentResolver(), 234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.DATE_FORMAT, format); 23529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (key.equals(KEY_AUTO_TIME)) { 237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean autoEnabled = preferences.getBoolean(key, true); 238f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project autoEnabled ? 1 : 0); 240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimePref.setEnabled(!autoEnabled); 241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDatePref.setEnabled(!autoEnabled); 2421bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani } else if (key.equals(KEY_AUTO_TIME_ZONE)) { 2431bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani boolean autoZoneEnabled = preferences.getBoolean(key, true); 244f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt( 245f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0); 2461bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimeZone.setEnabled(!autoZoneEnabled); 247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public Dialog onCreateDialog(int id) { 252b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes final Calendar calendar = Calendar.getInstance(); 253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (id) { 254b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes case DIALOG_DATEPICKER: 255b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes DatePickerDialog d = new DatePickerDialog( 256b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes getActivity(), 257b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes this, 258b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes calendar.get(Calendar.YEAR), 259b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes calendar.get(Calendar.MONTH), 260b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes calendar.get(Calendar.DAY_OF_MONTH)); 261b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes configureDatePicker(d.getDatePicker()); 262b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes return d; 263b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes case DIALOG_TIMEPICKER: 264b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes return new TimePickerDialog( 265d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity(), 266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project this, 267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.HOUR_OF_DAY), 268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MINUTE), 269d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani DateFormat.is24HourFormat(getActivity())); 270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 271b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes throw new IllegalArgumentException(); 272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 273b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes } 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 275b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes static void configureDatePicker(DatePicker datePicker) { 276b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes // The system clock can't represent dates outside this range. 277b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes Calendar t = Calendar.getInstance(); 278b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.clear(); 279b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.set(1970, Calendar.JANUARY, 1); 280b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes datePicker.setMinDate(t.getTimeInMillis()); 281b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.clear(); 282b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.set(2037, Calendar.DECEMBER, 31); 283b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes datePicker.setMaxDate(t.getTimeInMillis()); 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 286d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani /* 287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onPrepareDialog(int id, Dialog d) { 289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (id) { 290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_DATEPICKER: { 291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project DatePickerDialog datePicker = (DatePickerDialog)d; 292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project datePicker.updateDate( 294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.YEAR), 295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MONTH), 296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.DAY_OF_MONTH)); 297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_TIMEPICKER: { 300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TimePickerDialog timePicker = (TimePickerDialog)d; 301afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project timePicker.updateTime( 303afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.HOUR_OF_DAY), 304afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MINUTE)); 305afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 311d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani */ 312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference == mDatePref) { 315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showDialog(DIALOG_DATEPICKER); 316afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mTimePref) { 317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // The 24-hour mode may have changed, so recreate the dialog 318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project removeDialog(DIALOG_TIMEPICKER); 319afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showDialog(DIALOG_TIMEPICKER); 320afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mTime24Pref) { 3210a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath final boolean is24Hour = ((CheckBoxPreference)mTime24Pref).isChecked(); 3220a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath set24Hour(is24Hour); 32329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 3240a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath timeUpdated(is24Hour); 325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3260f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa return super.onPreferenceTreeClick(preferenceScreen, preference); 327afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3281bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 330d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onActivityResult(int requestCode, int resultCode, 331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent data) { 33229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 333afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3341bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 3350a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath private void timeUpdated(boolean is24Hour) { 336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED); 3370a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath timeChanged.putExtra(Intent.EXTRA_TIME_PREF_24_HOUR_FORMAT, is24Hour); 338d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().sendBroadcast(timeChanged); 339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3401bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* Get & Set values from the system settings */ 3421bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean is24Hour() { 344d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani return DateFormat.is24HourFormat(getActivity()); 345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3461bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void set24Hour(boolean is24Hour) { 348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putString(getContentResolver(), 349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TIME_12_24, 350afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project is24Hour? HOURS_24 : HOURS_12); 351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3521bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String getDateFormat() { 3541bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani return Settings.System.getString(getContentResolver(), 355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.DATE_FORMAT); 356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3571bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 3581bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private boolean getAutoState(String name) { 359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 360f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate return Settings.Global.getInt(getContentResolver(), name) > 0; 361afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (SettingNotFoundException snfe) { 362ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani return false; 363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3665f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani /* package */ static void setDate(Context context, int year, int month, int day) { 36771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa Calendar c = Calendar.getInstance(); 36871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 36971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.YEAR, year); 37071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.MONTH, month); 37171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.DAY_OF_MONTH, day); 37271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa long when = c.getTimeInMillis(); 37371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 37471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa if (when / 1000 < Integer.MAX_VALUE) { 3755f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when); 376188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } 37771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 37871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 3795f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani /* package */ static void setTime(Context context, int hourOfDay, int minute) { 38071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa Calendar c = Calendar.getInstance(); 381188ca778702938d87313592175a3c2ff86bd3218Eric Fischer 38271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.HOUR_OF_DAY, hourOfDay); 38371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.MINUTE, minute); 38433ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne c.set(Calendar.SECOND, 0); 38533ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne c.set(Calendar.MILLISECOND, 0); 38671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa long when = c.getTimeInMillis(); 38771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 38871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa if (when / 1000 < Integer.MAX_VALUE) { 3895f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when); 39071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 391afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 39271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 39304487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes public static String getTimeZoneText(TimeZone tz, boolean includeName) { 39404487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes Date now = new Date(); 39504487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes 39604487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes // Use SimpleDateFormat to format the GMT+00:00 string. 39704487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes SimpleDateFormat gmtFormatter = new SimpleDateFormat("ZZZZ"); 39804487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes gmtFormatter.setTimeZone(tz); 39904487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes String gmtString = gmtFormatter.format(now); 40004487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes 40104487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes // Ensure that the "GMT+" stays with the "00:00" even if the digits are RTL. 40204487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes BidiFormatter bidiFormatter = BidiFormatter.getInstance(); 40304487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes Locale l = Locale.getDefault(); 40404487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes boolean isRtl = TextUtils.getLayoutDirectionFromLocale(l) == View.LAYOUT_DIRECTION_RTL; 40504487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes gmtString = bidiFormatter.unicodeWrap(gmtString, 40604487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes isRtl ? TextDirectionHeuristics.RTL : TextDirectionHeuristics.LTR); 40704487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes 40804487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes if (!includeName) { 40904487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes return gmtString; 41004487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes } 41104487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes 41204487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes // Optionally append the time zone name. 41304487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes SimpleDateFormat zoneNameFormatter = new SimpleDateFormat("zzzz"); 41404487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes zoneNameFormatter.setTimeZone(tz); 41504487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes String zoneNameString = zoneNameFormatter.format(now); 41604487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes 41704487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes // We don't use punctuation here to avoid having to worry about localizing that too! 41804487594d73c89aa53548e6ad864e40d15324c62Elliott Hughes return gmtString + " " + zoneNameString; 419afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 4201bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 422afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 423afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 42429e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 42529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 42629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 42729e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 428afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 429afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 430afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 431