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 1929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawaimport android.app.Activity; 205f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasaniimport android.app.AlarmManager; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.DatePickerDialog; 22d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport android.app.Dialog; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.TimePickerDialog; 24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver; 25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context; 26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter; 28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.SharedPreferences; 29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemClock; 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; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.format.DateFormat; 39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.DatePicker; 40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TimePicker; 41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Calendar; 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Date; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.TimeZone; 45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 460f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawapublic class DateTimeSettings extends SettingsPreferenceFragment 47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project implements OnSharedPreferenceChangeListener, 4871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener { 49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String HOURS_12 = "12"; 51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String HOURS_24 = "24"; 521bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 5371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa // Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc. 5471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa // The date value is dummy (independent of actual date). 55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Calendar mDummyDate; 5671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_DATE_FORMAT = "date_format"; 58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_AUTO_TIME = "auto_time"; 591bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private static final String KEY_AUTO_TIME_ZONE = "auto_zone"; 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int DIALOG_DATEPICKER = 0; 62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int DIALOG_TIMEPICKER = 1; 631bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 647f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // have we been launched from the setup wizard? 657f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng protected static final String EXTRA_IS_FIRST_RUN = "firstRun"; 667f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng 671bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private CheckBoxPreference mAutoTimePref; 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTimePref; 69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTime24Pref; 701bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private CheckBoxPreference mAutoTimeZonePref; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTimeZone; 72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mDatePref; 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private ListPreference mDateFormat; 741bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 76d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle icicle) { 77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 781bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.date_time_prefs); 801bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 811bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani initUI(); 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 831bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void initUI() { 85f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate boolean autoTimeEnabled = getAutoState(Settings.Global.AUTO_TIME); 86f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate boolean autoTimeZoneEnabled = getAutoState(Settings.Global.AUTO_TIME_ZONE); 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 887f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng Intent intent = getActivity().getIntent(); 897f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng boolean isFirstRun = intent.getBooleanExtra(EXTRA_IS_FIRST_RUN, false); 907f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng 91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDummyDate = Calendar.getInstance(); 921bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 931bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mAutoTimePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME); 941bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mAutoTimePref.setChecked(autoTimeEnabled); 95ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani mAutoTimeZonePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME_ZONE); 967f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // Override auto-timezone if it's a wifi-only device or if we're still in setup wizard. 977f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // TODO: Remove the wifiOnly test when auto-timezone is implemented based on wifi-location. 988af88fb8387259e51615709b2d1ea0260f7057fdRobert Greenwalt if (Utils.isWifiOnly(getActivity()) || isFirstRun) { 99c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani getPreferenceScreen().removePreference(mAutoTimeZonePref); 100c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani autoTimeZoneEnabled = false; 101c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 102ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani mAutoTimeZonePref.setChecked(autoTimeZoneEnabled); 103ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani 104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimePref = findPreference("time"); 105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTime24Pref = findPreference("24 hour"); 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimeZone = findPreference("timezone"); 107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDatePref = findPreference("date"); 108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat = (ListPreference) findPreference(KEY_DATE_FORMAT); 1097f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng if (isFirstRun) { 1107f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng getPreferenceScreen().removePreference(mTime24Pref); 1117f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng getPreferenceScreen().removePreference(mDateFormat); 1127f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng } 1131bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String [] dateFormats = getResources().getStringArray(R.array.date_format_values); 115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String [] formattedDates = new String[dateFormats.length]; 116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project String currentFormat = getDateFormat(); 117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Initialize if DATE_FORMAT is not set in the system settings 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // This can happen after a factory reset (or data wipe) 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (currentFormat == null) { 120188ca778702938d87313592175a3c2ff86bd3218Eric Fischer currentFormat = ""; 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 122b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva 123b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva // Prevents duplicated values on date format selector. 124b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva mDummyDate.set(mDummyDate.get(Calendar.YEAR), mDummyDate.DECEMBER, 31, 13, 0, 0); 125b6676bb6a3515e1599d2342190c2d2d89d611d63Fábio Silva 126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project for (int i = 0; i < formattedDates.length; i++) { 127188ca778702938d87313592175a3c2ff86bd3218Eric Fischer String formatted = 128d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani DateFormat.getDateFormatForSetting(getActivity(), dateFormats[i]) 129d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani .format(mDummyDate.getTime()); 130188ca778702938d87313592175a3c2ff86bd3218Eric Fischer 131188ca778702938d87313592175a3c2ff86bd3218Eric Fischer if (dateFormats[i].length() == 0) { 132188ca778702938d87313592175a3c2ff86bd3218Eric Fischer formattedDates[i] = getResources(). 133188ca778702938d87313592175a3c2ff86bd3218Eric Fischer getString(R.string.normal_date_format, formatted); 134188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } else { 135188ca778702938d87313592175a3c2ff86bd3218Eric Fischer formattedDates[i] = formatted; 136188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1381bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setEntries(formattedDates); 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setEntryValues(R.array.date_format_values); 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setValue(currentFormat); 1421bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1431bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimePref.setEnabled(!autoTimeEnabled); 1441bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mDatePref.setEnabled(!autoTimeEnabled); 1451bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimeZone.setEnabled(!autoTimeZoneEnabled); 146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 149d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 1511bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1521bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani getPreferenceScreen().getSharedPreferences() 1531bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani .registerOnSharedPreferenceChangeListener(this); 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project ((CheckBoxPreference)mTime24Pref).setChecked(is24Hour()); 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Register for time ticks and other reasons for time change 158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project IntentFilter filter = new IntentFilter(); 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIME_TICK); 160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIME_CHANGED); 161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 162d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().registerReceiver(mIntentReceiver, filter, null, null); 16329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa 16429e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1671bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani @Override 168d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onPause() { 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 170d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().unregisterReceiver(mIntentReceiver); 1711bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani getPreferenceScreen().getSharedPreferences() 1721bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani .unregisterOnSharedPreferenceChangeListener(this); 173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1741bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1757f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng public void updateTimeAndDateDisplay(Context context) { 17629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(context); 17771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa final Calendar now = Calendar.getInstance(); 178151b0e117443d874c475d25f7144bba1e1b438efKenny Root mDummyDate.setTimeZone(now.getTimeZone()); 17982723df002a27a79545dd18a52333973b056b720Elliott Hughes // We use December 31st because it's unambiguous when demonstrating the date format. 18082723df002a27a79545dd18a52333973b056b720Elliott Hughes // We use 13:00 so we can demonstrate the 12/24 hour options. 181151b0e117443d874c475d25f7144bba1e1b438efKenny Root mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0); 182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Date dummyDate = mDummyDate.getTime(); 18371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime())); 18471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mTimeZone.setSummary(getTimeZoneText(now.getTimeZone())); 18571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mDatePref.setSummary(shortDateFormat.format(now.getTime())); 186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDateFormat.setSummary(shortDateFormat.format(dummyDate)); 18782723df002a27a79545dd18a52333973b056b720Elliott Hughes mTime24Pref.setSummary(DateFormat.getTimeFormat(getActivity()).format(dummyDate)); 188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1900f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onDateSet(DatePicker view, int year, int month, int day) { 19229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 19329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 1945f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani setDate(activity, year, month, day); 19529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 19629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1990f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 20129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 20229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 2035f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani setTime(activity, hourOfDay, minute); 20429e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 20529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 20671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 20772ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // We don't need to call timeUpdated() here because the TIME_CHANGED 20872ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // broadcast is sent by the AlarmManager as a side effect of setting the 20972ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // SystemClock time. 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 2120f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { 214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (key.equals(KEY_DATE_FORMAT)) { 2151bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani String format = preferences.getString(key, 216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getResources().getString(R.string.default_date_format)); 2171bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani Settings.System.putString(getContentResolver(), 218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.DATE_FORMAT, format); 21929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (key.equals(KEY_AUTO_TIME)) { 221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean autoEnabled = preferences.getBoolean(key, true); 222f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project autoEnabled ? 1 : 0); 224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimePref.setEnabled(!autoEnabled); 225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDatePref.setEnabled(!autoEnabled); 2261bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani } else if (key.equals(KEY_AUTO_TIME_ZONE)) { 2271bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani boolean autoZoneEnabled = preferences.getBoolean(key, true); 228f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt( 229f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0); 2301bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimeZone.setEnabled(!autoZoneEnabled); 231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public Dialog onCreateDialog(int id) { 236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Dialog d; 237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (id) { 239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_DATEPICKER: { 240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project d = new DatePickerDialog( 242d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity(), 243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project this, 244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.YEAR), 245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MONTH), 246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.DAY_OF_MONTH)); 2477ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi // The system clock can't represent dates outside this range. 2487ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi DatePickerDialog datePicker = (DatePickerDialog)d; 2497ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi Calendar t = Calendar.getInstance(); 2507ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi t.clear(); 2517ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi t.set(1970, Calendar.JANUARY, 1); 2527ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi datePicker.getDatePicker().setMinDate(t.getTimeInMillis()); 2537ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi t.clear(); 2547ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi t.set(2037, Calendar.DECEMBER, 31); 2557ccfa0614caeba8eba5d3040a90541a24fa1e6c9Sungmin Choi datePicker.getDatePicker().setMaxDate(t.getTimeInMillis()); 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_TIMEPICKER: { 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project d = new TimePickerDialog( 261d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity(), 262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project this, 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.HOUR_OF_DAY), 264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MINUTE), 265d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani DateFormat.is24HourFormat(getActivity())); 266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project d = null; 270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project return d; 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 276d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani /* 277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onPrepareDialog(int id, Dialog d) { 279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (id) { 280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_DATEPICKER: { 281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project DatePickerDialog datePicker = (DatePickerDialog)d; 282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project datePicker.updateDate( 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.YEAR), 285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MONTH), 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.DAY_OF_MONTH)); 287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_TIMEPICKER: { 290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TimePickerDialog timePicker = (TimePickerDialog)d; 291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project timePicker.updateTime( 293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.HOUR_OF_DAY), 294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MINUTE)); 295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 301d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani */ 302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 303afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { 304afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference == mDatePref) { 305afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showDialog(DIALOG_DATEPICKER); 306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mTimePref) { 307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // The 24-hour mode may have changed, so recreate the dialog 308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project removeDialog(DIALOG_TIMEPICKER); 309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showDialog(DIALOG_TIMEPICKER); 310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mTime24Pref) { 311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project set24Hour(((CheckBoxPreference)mTime24Pref).isChecked()); 31229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project timeUpdated(); 314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3150f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa return super.onPreferenceTreeClick(preferenceScreen, preference); 316afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3171bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 319d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onActivityResult(int requestCode, int resultCode, 320afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent data) { 32129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 322afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3231bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 324afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void timeUpdated() { 325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED); 326d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().sendBroadcast(timeChanged); 327afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3281bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* Get & Set values from the system settings */ 3301bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean is24Hour() { 332d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani return DateFormat.is24HourFormat(getActivity()); 333afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3341bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void set24Hour(boolean is24Hour) { 336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putString(getContentResolver(), 337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TIME_12_24, 338afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project is24Hour? HOURS_24 : HOURS_12); 339afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3401bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private String getDateFormat() { 3421bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani return Settings.System.getString(getContentResolver(), 343afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.DATE_FORMAT); 344afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3451bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 3461bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private boolean getAutoState(String name) { 347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 348f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate return Settings.Global.getInt(getContentResolver(), name) > 0; 349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (SettingNotFoundException snfe) { 350ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani return false; 351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3545f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani /* package */ static void setDate(Context context, int year, int month, int day) { 35571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa Calendar c = Calendar.getInstance(); 35671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 35771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.YEAR, year); 35871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.MONTH, month); 35971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.DAY_OF_MONTH, day); 36071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa long when = c.getTimeInMillis(); 36171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 36271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa if (when / 1000 < Integer.MAX_VALUE) { 3635f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when); 364188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } 36571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 36671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 3675f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani /* package */ static void setTime(Context context, int hourOfDay, int minute) { 36871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa Calendar c = Calendar.getInstance(); 369188ca778702938d87313592175a3c2ff86bd3218Eric Fischer 37071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.HOUR_OF_DAY, hourOfDay); 37171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.MINUTE, minute); 37233ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne c.set(Calendar.SECOND, 0); 37333ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne c.set(Calendar.MILLISECOND, 0); 37471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa long when = c.getTimeInMillis(); 37571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 37671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa if (when / 1000 < Integer.MAX_VALUE) { 3775f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when); 37871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 38071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 3816c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes /* Helper routines to format timezone */ 382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3836c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes /* package */ static String getTimeZoneText(TimeZone tz) { 3846c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes // Similar to new SimpleDateFormat("'GMT'Z, zzzz").format(new Date()), but 3856c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes // we want "GMT-03:00" rather than "GMT-0300". 3866c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes Date now = new Date(); 3876c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes return formatOffset(new StringBuilder(), tz, now). 388afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project append(", "). 3896c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes append(tz.getDisplayName(tz.inDaylightTime(now), TimeZone.LONG)).toString(); 390afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 391afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3926c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes private static StringBuilder formatOffset(StringBuilder sb, TimeZone tz, Date d) { 3936c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes int off = tz.getOffset(d.getTime()) / 1000 / 60; 394afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3956c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append("GMT"); 396afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (off < 0) { 3976c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append('-'); 398afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project off = -off; 399afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else { 4006c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append('+'); 401afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 402afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4031bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani int hours = off / 60; 404afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project int minutes = off % 60; 405afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4066c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append((char) ('0' + hours / 10)); 4076c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append((char) ('0' + hours % 10)); 408afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4096c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append(':'); 410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4116c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append((char) ('0' + minutes / 10)); 4126c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes sb.append((char) ('0' + minutes % 10)); 413afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 4146c7f55ee4b73d0131103f10211fdbe3742b41cbbElliott Hughes return sb; 415afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 4161bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 419afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 42029e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 42129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 42229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 42329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 424afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 425afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 426afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 427