113e902189e05f09a890b9d6673a6f451c758542aJason Parekh/* 213e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Copyright (C) 2009 The Android Open Source Project 313e902189e05f09a890b9d6673a6f451c758542aJason Parekh * 413e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Licensed under the Apache License, Version 2.0 (the "License"); 513e902189e05f09a890b9d6673a6f451c758542aJason Parekh * you may not use this file except in compliance with the License. 613e902189e05f09a890b9d6673a6f451c758542aJason Parekh * You may obtain a copy of the License at 713e902189e05f09a890b9d6673a6f451c758542aJason Parekh * 813e902189e05f09a890b9d6673a6f451c758542aJason Parekh * http://www.apache.org/licenses/LICENSE-2.0 913e902189e05f09a890b9d6673a6f451c758542aJason Parekh * 1013e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Unless required by applicable law or agreed to in writing, software 1113e902189e05f09a890b9d6673a6f451c758542aJason Parekh * distributed under the License is distributed on an "AS IS" BASIS, 1213e902189e05f09a890b9d6673a6f451c758542aJason Parekh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1313e902189e05f09a890b9d6673a6f451c758542aJason Parekh * See the License for the specific language governing permissions and 1413e902189e05f09a890b9d6673a6f451c758542aJason Parekh * limitations under the License. 1513e902189e05f09a890b9d6673a6f451c758542aJason Parekh */ 1613e902189e05f09a890b9d6673a6f451c758542aJason Parekh 17fa954248b41b567dfa2ddd7bd063d3936a51758eDaniel Sandlerpackage com.android.deskclock; 1813e902189e05f09a890b9d6673a6f451c758542aJason Parekh 19be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelsonimport android.app.ActionBar; 20c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelsonimport android.content.Intent; 21f72e6889ec05b5f6e72d061f87d003281c445febYorke Leeimport android.content.res.Resources; 2213e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.media.AudioManager; 2313e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.os.Bundle; 2413e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.CheckBoxPreference; 25abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scottimport android.preference.ListPreference; 2613e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.Preference; 2713e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.PreferenceActivity; 2813e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.preference.PreferenceScreen; 2913e902189e05f09a890b9d6673a6f451c758542aJason Parekhimport android.provider.Settings; 30f72e6889ec05b5f6e72d061f87d003281c445febYorke Leeimport android.text.format.DateUtils; 3163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.view.Menu; 3263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.view.MenuItem; 3313e902189e05f09a890b9d6673a6f451c758542aJason Parekh 34c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelsonimport com.android.deskclock.worldclock.Cities; 35c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson 36e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelsonimport java.util.ArrayList; 37e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelsonimport java.util.Collections; 38e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelsonimport java.util.List; 39f72e6889ec05b5f6e72d061f87d003281c445febYorke Leeimport java.util.TimeZone; 40f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee 4113e902189e05f09a890b9d6673a6f451c758542aJason Parekh/** 4213e902189e05f09a890b9d6673a6f451c758542aJason Parekh * Settings for the Alarm Clock. 4313e902189e05f09a890b9d6673a6f451c758542aJason Parekh */ 44abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scottpublic class SettingsActivity extends PreferenceActivity 45abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott implements Preference.OnPreferenceChangeListener { 4613e902189e05f09a890b9d6673a6f451c758542aJason Parekh 4713e902189e05f09a890b9d6673a6f451c758542aJason Parekh private static final int ALARM_STREAM_TYPE_BIT = 4813e902189e05f09a890b9d6673a6f451c758542aJason Parekh 1 << AudioManager.STREAM_ALARM; 49abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 5063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson static final String KEY_ALARM_IN_SILENT_MODE = 5113e902189e05f09a890b9d6673a6f451c758542aJason Parekh "alarm_in_silent_mode"; 5289811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott static final String KEY_ALARM_SNOOZE = 53abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott "snooze_duration"; 5489811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott static final String KEY_VOLUME_BEHAVIOR = 5589811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott "volume_button_setting"; 5628dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott static final String KEY_AUTO_SILENCE = 5728dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott "auto_silence"; 585c464d35f230912053d7a5873dd6b59ca6e11852Isaac Katzenelson public static final String KEY_CLOCK_STYLE = 5963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson "clock_style"; 605c464d35f230912053d7a5873dd6b59ca6e11852Isaac Katzenelson public static final String KEY_HOME_TZ = 6163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson "home_time_zone"; 625c464d35f230912053d7a5873dd6b59ca6e11852Isaac Katzenelson public static final String KEY_AUTO_HOME_CLOCK = 6363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson "automatic_home_clock"; 6463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson static final String KEY_VOLUME_BUTTONS = 6563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson "volume_button_setting"; 66f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee 67a3458d9448c4131b530361fb87edb28baebb647eIsaac Katzenelson public static final String DEFAULT_VOLUME_BEHAVIOR = "0"; 68a3458d9448c4131b530361fb87edb28baebb647eIsaac Katzenelson 69f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee private static CharSequence[][] mTimezones; 70f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee private long mTime; 71f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee 72f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee 7313e902189e05f09a890b9d6673a6f451c758542aJason Parekh @Override 7413e902189e05f09a890b9d6673a6f451c758542aJason Parekh protected void onCreate(Bundle savedInstanceState) { 7513e902189e05f09a890b9d6673a6f451c758542aJason Parekh super.onCreate(savedInstanceState); 7613e902189e05f09a890b9d6673a6f451c758542aJason Parekh addPreferencesFromResource(R.xml.settings); 77e7bf7ed4c4d3680d838a1581832d22be89e37e46Patrick Scott 78be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson ActionBar actionBar = getActionBar(); 79be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson if (actionBar != null) { 80be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP); 81be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson } 82f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee 83f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee // We don't want to reconstruct the timezone list every single time 84f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee // onResume() is called so we do it once in onCreate 85f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee ListPreference listPref; 86f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee listPref = (ListPreference) findPreference(KEY_HOME_TZ); 87f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee if (mTimezones == null) { 88f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee mTime = System.currentTimeMillis(); 89f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee mTimezones = getAllTimezones(); 90f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee } 91f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee 92f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee listPref.setEntryValues(mTimezones[0]); 93f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee listPref.setEntries(mTimezones[1]); 94f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee listPref.setSummary(listPref.getEntry()); 95f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee listPref.setOnPreferenceChangeListener(this); 9613e902189e05f09a890b9d6673a6f451c758542aJason Parekh } 9713e902189e05f09a890b9d6673a6f451c758542aJason Parekh 9813e902189e05f09a890b9d6673a6f451c758542aJason Parekh @Override 9913e902189e05f09a890b9d6673a6f451c758542aJason Parekh protected void onResume() { 10013e902189e05f09a890b9d6673a6f451c758542aJason Parekh super.onResume(); 10113e902189e05f09a890b9d6673a6f451c758542aJason Parekh refresh(); 10213e902189e05f09a890b9d6673a6f451c758542aJason Parekh } 10313e902189e05f09a890b9d6673a6f451c758542aJason Parekh 10413e902189e05f09a890b9d6673a6f451c758542aJason Parekh @Override 10563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public boolean onOptionsItemSelected (MenuItem item) { 10663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson switch (item.getItemId()) { 107be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson case android.R.id.home: 108be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson finish(); 109be8244565cd5e987eaf1bf8754a1750c95477b43Itzhak Katzenelson return true; 11063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson default: 11163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson break; 11263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 11363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson return super.onOptionsItemSelected(item); 11463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 11563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 11663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 11763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson @Override 11863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public boolean onCreateOptionsMenu (Menu menu) { 11963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson getMenuInflater().inflate(R.menu.settings_menu, menu); 1206fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson MenuItem help = menu.findItem(R.id.menu_item_help); 1216fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson if (help != null) { 1226fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson Utils.prepareHelpMenuItem(this, help); 1236fc34de781d8fece646b16dc289bbf4c0b01fde4Isaac Katzenelson } 12463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson return super.onCreateOptionsMenu(menu); 12563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 12663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 12763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson @Override 12813e902189e05f09a890b9d6673a6f451c758542aJason Parekh public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 12913e902189e05f09a890b9d6673a6f451c758542aJason Parekh Preference preference) { 13089811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott if (KEY_ALARM_IN_SILENT_MODE.equals(preference.getKey())) { 13189811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott CheckBoxPreference pref = (CheckBoxPreference) preference; 13213e902189e05f09a890b9d6673a6f451c758542aJason Parekh int ringerModeStreamTypes = Settings.System.getInt( 13313e902189e05f09a890b9d6673a6f451c758542aJason Parekh getContentResolver(), 13413e902189e05f09a890b9d6673a6f451c758542aJason Parekh Settings.System.MODE_RINGER_STREAMS_AFFECTED, 0); 135abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 13689811e14c23c7fe6f88a21d13429613b756bce3fPatrick Scott if (pref.isChecked()) { 13713e902189e05f09a890b9d6673a6f451c758542aJason Parekh ringerModeStreamTypes &= ~ALARM_STREAM_TYPE_BIT; 13813e902189e05f09a890b9d6673a6f451c758542aJason Parekh } else { 13913e902189e05f09a890b9d6673a6f451c758542aJason Parekh ringerModeStreamTypes |= ALARM_STREAM_TYPE_BIT; 14013e902189e05f09a890b9d6673a6f451c758542aJason Parekh } 141abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 14213e902189e05f09a890b9d6673a6f451c758542aJason Parekh Settings.System.putInt(getContentResolver(), 14313e902189e05f09a890b9d6673a6f451c758542aJason Parekh Settings.System.MODE_RINGER_STREAMS_AFFECTED, 14413e902189e05f09a890b9d6673a6f451c758542aJason Parekh ringerModeStreamTypes); 145abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 14613e902189e05f09a890b9d6673a6f451c758542aJason Parekh return true; 14713e902189e05f09a890b9d6673a6f451c758542aJason Parekh } 148abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 14913e902189e05f09a890b9d6673a6f451c758542aJason Parekh return super.onPreferenceTreeClick(preferenceScreen, preference); 15013e902189e05f09a890b9d6673a6f451c758542aJason Parekh } 15113e902189e05f09a890b9d6673a6f451c758542aJason Parekh 15263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson @Override 153abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott public boolean onPreferenceChange(Preference pref, Object newValue) { 15463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson if (KEY_AUTO_SILENCE.equals(pref.getKey())) { 15563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson final ListPreference listPref = (ListPreference) pref; 15663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson String delay = (String) newValue; 15763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson updateAutoSnoozeSummary(listPref, delay); 15863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } else if (KEY_CLOCK_STYLE.equals(pref.getKey())) { 15928dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott final ListPreference listPref = (ListPreference) pref; 16028dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott final int idx = listPref.findIndexOfValue((String) newValue); 16128dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott listPref.setSummary(listPref.getEntries()[idx]); 16263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } else if (KEY_HOME_TZ.equals(pref.getKey())) { 16328dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott final ListPreference listPref = (ListPreference) pref; 16463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson final int idx = listPref.findIndexOfValue((String) newValue); 16563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setSummary(listPref.getEntries()[idx]); 166c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson notifyHomeTimeZoneChanged(); 16763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } else if (KEY_AUTO_HOME_CLOCK.equals(pref.getKey())) { 16863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson boolean state =((CheckBoxPreference) pref).isChecked(); 16963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson Preference homeTimeZone = findPreference(KEY_HOME_TZ); 17063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson homeTimeZone.setEnabled(!state); 171c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson notifyHomeTimeZoneChanged(); 17263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } else if (KEY_VOLUME_BUTTONS.equals(pref.getKey())) { 17363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson final ListPreference listPref = (ListPreference) pref; 17463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson final int idx = listPref.findIndexOfValue((String) newValue); 17563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setSummary(listPref.getEntries()[idx]); 17628dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott } 177abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott return true; 178abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott } 179abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 18028dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott private void updateAutoSnoozeSummary(ListPreference listPref, 18128dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott String delay) { 18228dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott int i = Integer.parseInt(delay); 18328dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott if (i == -1) { 18428dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott listPref.setSummary(R.string.auto_silence_never); 18528dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott } else { 18628dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott listPref.setSummary(getString(R.string.auto_silence_summary, i)); 18728dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott } 18828dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott } 18928dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott 190c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson private void notifyHomeTimeZoneChanged() { 191c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson Intent i = new Intent(Cities.WORLDCLOCK_UPDATE_INTENT); 192c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson sendBroadcast(i); 193c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson } 194c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson 195c1d293908f835285f87d6c5dd07df76fe3127519Isaac Katzenelson 19613e902189e05f09a890b9d6673a6f451c758542aJason Parekh private void refresh() { 19763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson ListPreference listPref = (ListPreference) findPreference(KEY_AUTO_SILENCE); 19863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson String delay = listPref.getValue(); 19963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson updateAutoSnoozeSummary(listPref, delay); 20063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setOnPreferenceChangeListener(this); 20163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 20263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref = (ListPreference) findPreference(KEY_CLOCK_STYLE); 20328dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott listPref.setSummary(listPref.getEntry()); 20428dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott listPref.setOnPreferenceChangeListener(this); 205abbdb5687b2f4505b16d3f8fad3efbab3ea1cf90Patrick Scott 20663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson Preference pref = findPreference(KEY_AUTO_HOME_CLOCK); 20763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson boolean state =((CheckBoxPreference) pref).isChecked(); 20863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson pref.setOnPreferenceChangeListener(this); 20963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 21063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref = (ListPreference)findPreference(KEY_HOME_TZ); 21163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setEnabled(state); 21263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setSummary(listPref.getEntry()); 21363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 21463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref = (ListPreference) findPreference(KEY_VOLUME_BUTTONS); 21563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setSummary(listPref.getEntry()); 21663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson listPref.setOnPreferenceChangeListener(this); 21763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 21863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson SnoozeLengthDialog snoozePref = (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE); 21963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson snoozePref.setSummary(); 22028dbcd13adec986d5d2c08b71edab35d84b40958Patrick Scott } 221e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 222e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson private class TimeZoneRow implements Comparable<TimeZoneRow> { 223e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson private static final boolean SHOW_DAYLIGHT_SAVINGS_INDICATOR = false; 224e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 225e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson public final String mId; 226e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson public final String mDisplayName; 227e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson public final int mOffset; 228e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 229e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson public TimeZoneRow(String id, String name) { 230e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson mId = id; 231e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson TimeZone tz = TimeZone.getTimeZone(id); 232e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson boolean useDaylightTime = tz.useDaylightTime(); 233e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson mOffset = tz.getOffset(mTime); 234e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson mDisplayName = buildGmtDisplayName(id, name, useDaylightTime); 235e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson } 236e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 237e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson @Override 238e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson public int compareTo(TimeZoneRow another) { 239e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson return mOffset - another.mOffset; 240e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson } 241e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 242e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson public String buildGmtDisplayName(String id, String displayName, boolean useDaylightTime) { 243e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson int p = Math.abs(mOffset); 244e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson StringBuilder name = new StringBuilder("(GMT"); 245e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(mOffset < 0 ? '-' : '+'); 246e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 247e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(p / DateUtils.HOUR_IN_MILLIS); 248e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(':'); 249e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 250e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson int min = p / 60000; 251e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson min %= 60; 252e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 253e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson if (min < 10) { 254e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append('0'); 255e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson } 256e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(min); 257e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(") "); 258e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(displayName); 259e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson if (useDaylightTime && SHOW_DAYLIGHT_SAVINGS_INDICATOR) { 260e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson name.append(" \u2600"); // Sun symbol 261e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson } 262e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson return name.toString(); 263e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson } 264e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson } 265e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 266e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 267f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee /** 268f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee * Returns an array of ids/time zones. This returns a double indexed array 269f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee * of ids and time zones for Calendar. It is an inefficient method and 270f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee * shouldn't be called often, but can be used for one time generation of 271f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee * this list. 272f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee * 273f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee * @return double array of tz ids and tz names 274f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee */ 275f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee public CharSequence[][] getAllTimezones() { 276f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee Resources resources = this.getResources(); 277f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee String[] ids = resources.getStringArray(R.array.timezone_values); 278f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee String[] labels = resources.getStringArray(R.array.timezone_labels); 279f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee if (ids.length != labels.length) { 280f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee Log.wtf("Timezone ids and labels have different length!"); 281f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee } 282e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson List<TimeZoneRow> timezones = new ArrayList<TimeZoneRow>(); 283f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee for (int i = 0; i < ids.length; i++) { 284e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson timezones.add(new TimeZoneRow(ids[i], labels[i])); 285f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee } 286e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson Collections.sort(timezones); 28763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 288e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson CharSequence[][] timeZones = new CharSequence[2][timezones.size()]; 289e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson int i = 0; 290e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson for (TimeZoneRow row : timezones) { 291e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson timeZones[0][i] = row.mId; 292e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson timeZones[1][i++] = row.mDisplayName; 293f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee } 294e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson return timeZones; 295f72e6889ec05b5f6e72d061f87d003281c445febYorke Lee } 296e06d867375f0d64f35c229b04f07d4cd374fa6f0Isaac Katzenelson 29713e902189e05f09a890b9d6673a6f451c758542aJason Parekh} 298