DateTimeSettings.java revision 39b467482d1bf256a111c757e9b7621c6f523271
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; 24550015e47656dad997973c89a30cffe56db9cdbdTony Mantlerimport android.app.admin.DevicePolicyManager; 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.provider.Settings; 33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings.SettingNotFoundException; 3439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference; 3539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.format.DateFormat; 37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.DatePicker; 38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TimePicker; 39550015e47656dad997973c89a30cffe56db9cdbdTony Mantler 408a963babe2e36b7a41f77b8d2598c97658196e58Chris Wrenimport com.android.internal.logging.MetricsLogger; 41550015e47656dad997973c89a30cffe56db9cdbdTony Mantlerimport com.android.settingslib.datetime.ZoneGetter; 428a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Calendar; 44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Date; 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_AUTO_TIME = "auto_time"; 581bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private static final String KEY_AUTO_TIME_ZONE = "auto_zone"; 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int DIALOG_DATEPICKER = 0; 61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final int DIALOG_TIMEPICKER = 1; 621bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 637f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // have we been launched from the setup wizard? 647f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng protected static final String EXTRA_IS_FIRST_RUN = "firstRun"; 657f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng 66b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio private SwitchPreference mAutoTimePref; 67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTimePref; 68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTime24Pref; 69b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio private SwitchPreference mAutoTimeZonePref; 70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mTimeZone; 71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private Preference mDatePref; 721bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 748a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 758a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren return MetricsLogger.DATE_TIME; 768a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 778a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 788a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 79d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle icicle) { 80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 811bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.date_time_prefs); 831bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 841bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani initUI(); 85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 861bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void initUI() { 88f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate boolean autoTimeEnabled = getAutoState(Settings.Global.AUTO_TIME); 89f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate boolean autoTimeZoneEnabled = getAutoState(Settings.Global.AUTO_TIME_ZONE); 90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 91b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio mAutoTimePref = (SwitchPreference) findPreference(KEY_AUTO_TIME); 92fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse 93fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context 94fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse .DEVICE_POLICY_SERVICE); 95fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse if (dpm.getAutoTimeRequired()) { 96fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse mAutoTimePref.setEnabled(false); 97fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse 98fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse // If Settings.Global.AUTO_TIME is false it will be set to true 99fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse // by the device policy manager very soon. 100fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse // Note that this app listens to that change. 101fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse } 102fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse 1037f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng Intent intent = getActivity().getIntent(); 1047f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng boolean isFirstRun = intent.getBooleanExtra(EXTRA_IS_FIRST_RUN, false); 1057f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng 106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDummyDate = Calendar.getInstance(); 1071bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1081bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mAutoTimePref.setChecked(autoTimeEnabled); 109b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio mAutoTimeZonePref = (SwitchPreference) findPreference(KEY_AUTO_TIME_ZONE); 1107f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // Override auto-timezone if it's a wifi-only device or if we're still in setup wizard. 1117f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng // TODO: Remove the wifiOnly test when auto-timezone is implemented based on wifi-location. 1128af88fb8387259e51615709b2d1ea0260f7057fdRobert Greenwalt if (Utils.isWifiOnly(getActivity()) || isFirstRun) { 113c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani getPreferenceScreen().removePreference(mAutoTimeZonePref); 114c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani autoTimeZoneEnabled = false; 115c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 116ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani mAutoTimeZonePref.setChecked(autoTimeZoneEnabled); 117ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani 118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimePref = findPreference("time"); 119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTime24Pref = findPreference("24 hour"); 120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimeZone = findPreference("timezone"); 121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDatePref = findPreference("date"); 1227f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng if (isFirstRun) { 1237f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng getPreferenceScreen().removePreference(mTime24Pref); 1247f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng } 1251bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1261bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimePref.setEnabled(!autoTimeEnabled); 1271bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mDatePref.setEnabled(!autoTimeEnabled); 1281bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimeZone.setEnabled(!autoTimeZoneEnabled); 129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 132d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onResume() { 133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onResume(); 1341bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1351bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani getPreferenceScreen().getSharedPreferences() 1361bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani .registerOnSharedPreferenceChangeListener(this); 137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 138b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio ((SwitchPreference)mTime24Pref).setChecked(is24Hour()); 139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // Register for time ticks and other reasons for time change 141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project IntentFilter filter = new IntentFilter(); 142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIME_TICK); 143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIME_CHANGED); 144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 145d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().registerReceiver(mIntentReceiver, filter, null, null); 14629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa 14729e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1501bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani @Override 151d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onPause() { 152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onPause(); 153d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().unregisterReceiver(mIntentReceiver); 1541bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani getPreferenceScreen().getSharedPreferences() 1551bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani .unregisterOnSharedPreferenceChangeListener(this); 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1571bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 1587f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng public void updateTimeAndDateDisplay(Context context) { 15971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa final Calendar now = Calendar.getInstance(); 160151b0e117443d874c475d25f7144bba1e1b438efKenny Root mDummyDate.setTimeZone(now.getTimeZone()); 16182723df002a27a79545dd18a52333973b056b720Elliott Hughes // We use December 31st because it's unambiguous when demonstrating the date format. 16282723df002a27a79545dd18a52333973b056b720Elliott Hughes // We use 13:00 so we can demonstrate the 12/24 hour options. 163151b0e117443d874c475d25f7144bba1e1b438efKenny Root mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0); 164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Date dummyDate = mDummyDate.getTime(); 16530cc30864b2b41d73e187ba9a0f75ea1fa64b538Elliott Hughes mDatePref.setSummary(DateFormat.getLongDateFormat(context).format(now.getTime())); 16671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime())); 167b9864427471ac206d08836a12a8b2f230c883d9eNeil Fuller mTimeZone.setSummary(ZoneGetter.getTimeZoneOffsetAndName(now.getTimeZone(), now.getTime())); 16882723df002a27a79545dd18a52333973b056b720Elliott Hughes mTime24Pref.setSummary(DateFormat.getTimeFormat(getActivity()).format(dummyDate)); 169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1710f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onDateSet(DatePicker view, int year, int month, int day) { 17329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 17429e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 1755f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani setDate(activity, year, month, day); 17629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 17729e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1800f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 18229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 18329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 1845f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani setTime(activity, hourOfDay, minute); 18529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 18629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 18771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 18872ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // We don't need to call timeUpdated() here because the TIME_CHANGED 18972ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // broadcast is sent by the AlarmManager as a side effect of setting the 19072ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project // SystemClock time. 191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 1930f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa @Override 194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { 19530cc30864b2b41d73e187ba9a0f75ea1fa64b538Elliott Hughes if (key.equals(KEY_AUTO_TIME)) { 196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project boolean autoEnabled = preferences.getBoolean(key, true); 197f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME, 198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project autoEnabled ? 1 : 0); 199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mTimePref.setEnabled(!autoEnabled); 200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project mDatePref.setEnabled(!autoEnabled); 2011bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani } else if (key.equals(KEY_AUTO_TIME_ZONE)) { 2021bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani boolean autoZoneEnabled = preferences.getBoolean(key, true); 203f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate Settings.Global.putInt( 204f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0); 2051bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani mTimeZone.setEnabled(!autoZoneEnabled); 206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public Dialog onCreateDialog(int id) { 211b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes final Calendar calendar = Calendar.getInstance(); 212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (id) { 213b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes case DIALOG_DATEPICKER: 214b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes DatePickerDialog d = new DatePickerDialog( 215b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes getActivity(), 216b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes this, 217b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes calendar.get(Calendar.YEAR), 218b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes calendar.get(Calendar.MONTH), 219b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes calendar.get(Calendar.DAY_OF_MONTH)); 220b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes configureDatePicker(d.getDatePicker()); 221b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes return d; 222b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes case DIALOG_TIMEPICKER: 223b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes return new TimePickerDialog( 224d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity(), 225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project this, 226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.HOUR_OF_DAY), 227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MINUTE), 228d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani DateFormat.is24HourFormat(getActivity())); 229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 230b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes throw new IllegalArgumentException(); 231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 232b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes } 233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 234b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes static void configureDatePicker(DatePicker datePicker) { 235b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes // The system clock can't represent dates outside this range. 236b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes Calendar t = Calendar.getInstance(); 237b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.clear(); 238b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.set(1970, Calendar.JANUARY, 1); 239b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes datePicker.setMinDate(t.getTimeInMillis()); 240b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.clear(); 241b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes t.set(2037, Calendar.DECEMBER, 31); 242b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes datePicker.setMaxDate(t.getTimeInMillis()); 243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 245d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani /* 246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onPrepareDialog(int id, Dialog d) { 248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project switch (id) { 249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_DATEPICKER: { 250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project DatePickerDialog datePicker = (DatePickerDialog)d; 251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project datePicker.updateDate( 253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.YEAR), 254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MONTH), 255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.DAY_OF_MONTH)); 256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project case DIALOG_TIMEPICKER: { 259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project TimePickerDialog timePicker = (TimePickerDialog)d; 260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project final Calendar calendar = Calendar.getInstance(); 261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project timePicker.updateTime( 262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.HOUR_OF_DAY), 263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project calendar.get(Calendar.MINUTE)); 264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project default: 267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project break; 268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 270d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani */ 271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 27239b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project if (preference == mDatePref) { 274afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showDialog(DIALOG_DATEPICKER); 275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mTimePref) { 276afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // The 24-hour mode may have changed, so recreate the dialog 277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project removeDialog(DIALOG_TIMEPICKER); 278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project showDialog(DIALOG_TIMEPICKER); 279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } else if (preference == mTime24Pref) { 280b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio final boolean is24Hour = ((SwitchPreference)mTime24Pref).isChecked(); 2810a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath set24Hour(is24Hour); 28229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 2830a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath timeUpdated(is24Hour); 284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 28539b467482d1bf256a111c757e9b7621c6f523271Jason Monk return super.onPreferenceTreeClick(preference); 286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2871bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 289d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onActivityResult(int requestCode, int resultCode, 290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent data) { 29129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(getActivity()); 292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2931bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 2940a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath private void timeUpdated(boolean is24Hour) { 295afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED); 2960a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath timeChanged.putExtra(Intent.EXTRA_TIME_PREF_24_HOUR_FORMAT, is24Hour); 297d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani getActivity().sendBroadcast(timeChanged); 298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 2991bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* Get & Set values from the system settings */ 3011bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private boolean is24Hour() { 303d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani return DateFormat.is24HourFormat(getActivity()); 304afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3051bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void set24Hour(boolean is24Hour) { 307afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.putString(getContentResolver(), 308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project Settings.System.TIME_12_24, 309afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project is24Hour? HOURS_24 : HOURS_12); 310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3111bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani 3121bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani private boolean getAutoState(String name) { 313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 314f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate return Settings.Global.getInt(getContentResolver(), name) > 0; 315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (SettingNotFoundException snfe) { 316ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani return false; 317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 319afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 3205f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani /* package */ static void setDate(Context context, int year, int month, int day) { 32171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa Calendar c = Calendar.getInstance(); 32271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 32371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.YEAR, year); 32471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.MONTH, month); 32571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.DAY_OF_MONTH, day); 32671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa long when = c.getTimeInMillis(); 32771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 32871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa if (when / 1000 < Integer.MAX_VALUE) { 3295f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when); 330188ca778702938d87313592175a3c2ff86bd3218Eric Fischer } 33171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 33271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 3335f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani /* package */ static void setTime(Context context, int hourOfDay, int minute) { 33471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa Calendar c = Calendar.getInstance(); 335188ca778702938d87313592175a3c2ff86bd3218Eric Fischer 33671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.HOUR_OF_DAY, hourOfDay); 33771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa c.set(Calendar.MINUTE, minute); 33833ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne c.set(Calendar.SECOND, 0); 33933ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne c.set(Calendar.MILLISECOND, 0); 34071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa long when = c.getTimeInMillis(); 34171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 34271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa if (when / 1000 < Integer.MAX_VALUE) { 3435f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when); 34471cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa } 345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 34671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa 347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { 348afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project public void onReceive(Context context, Intent intent) { 35029e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa final Activity activity = getActivity(); 35129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa if (activity != null) { 35229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa updateTimeAndDateDisplay(activity); 35329e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa } 354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project }; 356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 357