1146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/* 2146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 4146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * you may not use this file except in compliance with the License. 6146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * You may obtain a copy of the License at 7146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 8146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 10146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * See the License for the specific language governing permissions and 14146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * limitations under the License. 15146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 16146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 17146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpackage com.android.calendar; 18146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 194b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawaimport android.app.Activity; 20974343a44435bedc104d89fa98fdeb1ccf362501James Kungimport android.app.FragmentManager; 217412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chanimport android.app.backup.BackupManager; 22a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamiltonimport android.content.Context; 2342dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErikimport android.content.Intent; 24146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.SharedPreferences; 251851ecb450bbfa40ef375a914d1c31c793684894Michael Chanimport android.content.SharedPreferences.Editor; 26146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.SharedPreferences.OnSharedPreferenceChangeListener; 270b674bef73eac24a4c41cfd5af8be516f4936844Michael Chanimport android.media.Ringtone; 280b674bef73eac24a4c41cfd5af8be516f4936844Michael Chanimport android.media.RingtoneManager; 290b674bef73eac24a4c41cfd5af8be516f4936844Michael Chanimport android.net.Uri; 30146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.os.Bundle; 317412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chanimport android.os.Vibrator; 32cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tangimport android.preference.CheckBoxPreference; 33146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.preference.ListPreference; 343a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tangimport android.preference.Preference; 356ea265f8b747a26d6d3b21743afcdaa667a02711Erikimport android.preference.Preference.OnPreferenceChangeListener; 36974343a44435bedc104d89fa98fdeb1ccf362501James Kungimport android.preference.Preference.OnPreferenceClickListener; 377412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chanimport android.preference.PreferenceCategory; 384b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawaimport android.preference.PreferenceFragment; 39a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamiltonimport android.preference.PreferenceManager; 40146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.preference.PreferenceScreen; 41146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.preference.RingtonePreference; 4242dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErikimport android.provider.CalendarContract; 43a7c0390d9c5dd4ff730de505682687fae5f5ced0RoboErikimport android.provider.CalendarContract.CalendarCache; 443a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tangimport android.provider.SearchRecentSuggestions; 4539861950855726cb86118f03a74b2f3a69c713c2Erikimport android.text.TextUtils; 46305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chanimport android.text.format.Time; 473a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tangimport android.widget.Toast; 48146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 49559cb86bf1aa43c0a9cba7a4c7297d8d6d3a33f8Michael Chanimport com.android.calendar.alerts.AlertReceiver; 50974343a44435bedc104d89fa98fdeb1ccf362501James Kungimport com.android.timezonepicker.TimeZoneInfo; 51974343a44435bedc104d89fa98fdeb1ccf362501James Kungimport com.android.timezonepicker.TimeZonePickerDialog; 52974343a44435bedc104d89fa98fdeb1ccf362501James Kungimport com.android.timezonepicker.TimeZonePickerDialog.OnTimeZoneSetListener; 53974343a44435bedc104d89fa98fdeb1ccf362501James Kungimport com.android.timezonepicker.TimeZonePickerUtils; 54559cb86bf1aa43c0a9cba7a4c7297d8d6d3a33f8Michael Chan 554b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawapublic class GeneralPreferences extends PreferenceFragment implements 56974343a44435bedc104d89fa98fdeb1ccf362501James Kung OnSharedPreferenceChangeListener, OnPreferenceChangeListener, OnTimeZoneSetListener { 57a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton // The name of the shared preferences file. This name must be maintained for historical 58a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton // reasons, as it's what PreferenceManager assigned the first time the file was created. 59bdadecb6a5fc35b51bc3d488b5f0b4cbed987964Garth Bushell static final String SHARED_PREFS_NAME = "com.android.calendar_preferences"; 601851ecb450bbfa40ef375a914d1c31c793684894Michael Chan static final String SHARED_PREFS_NAME_NO_BACKUP = "com.android.calendar_preferences_no_backup"; 61a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton 62974343a44435bedc104d89fa98fdeb1ccf362501James Kung private static final String FRAG_TAG_TIME_ZONE_PICKER = "TimeZonePicker"; 63974343a44435bedc104d89fa98fdeb1ccf362501James Kung 64146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Preference keys 6523e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_HIDE_DECLINED = "preferences_hide_declined"; 6623e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_WEEK_START_DAY = "preferences_week_start_day"; 67981874e61ecf29a96a77601a3172b2503b6537eeErik public static final String KEY_SHOW_WEEK_NUM = "preferences_show_week_num"; 6891b01ed605e36fc5a7a924c226597a62c789b50dErik public static final String KEY_DAYS_PER_WEEK = "preferences_days_per_week"; 696c892a2ce67c08b9b60ceae27d941d40ed37e720RoboErik public static final String KEY_SKIP_SETUP = "preferences_skip_setup"; 70cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang 713a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang public static final String KEY_CLEAR_SEARCH_HISTORY = "preferences_clear_search_history"; 723a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang 737412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan public static final String KEY_ALERTS_CATEGORY = "preferences_alerts_category"; 7423e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_ALERTS = "preferences_alerts"; 7523e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_ALERTS_VIBRATE = "preferences_alerts_vibrate"; 7623e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_ALERTS_RINGTONE = "preferences_alerts_ringtone"; 7723e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_ALERTS_POPUP = "preferences_alerts_popup"; 78cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang 7931489e9749cbcb6574b6b60c7942241aa2d8df7bIsaac Katzenelson public static final String KEY_SHOW_CONTROLS = "preferences_show_controls"; 8031489e9749cbcb6574b6b60c7942241aa2d8df7bIsaac Katzenelson 8123e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_DEFAULT_REMINDER = "preferences_default_reminder"; 829d8a376b89fcc36c44d4df0c5cbf6991306131c4Michael Chan public static final int NO_REMINDER = -1; 839d8a376b89fcc36c44d4df0c5cbf6991306131c4Michael Chan public static final String NO_REMINDER_STRING = "-1"; 849d8a376b89fcc36c44d4df0c5cbf6991306131c4Michael Chan public static final int REMINDER_DEFAULT_TIME = 10; // in minutes 85d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan 86d885c1a5876735bbf2c0086956101bd70bac37e7Michael Chan public static final String KEY_DEFAULT_CELL_HEIGHT = "preferences_default_cell_height"; 87f565bc11cf22e639c01ad5b9a6129e707991eb4eSara Ting public static final String KEY_VERSION = "preferences_version"; 88d885c1a5876735bbf2c0086956101bd70bac37e7Michael Chan 89d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan /** Key to SharePreference for default view (CalendarController.ViewType) */ 9023e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_START_VIEW = "preferred_startView"; 91d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan /** 92d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan * Key to SharePreference for default detail view (CalendarController.ViewType) 93d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan * Typically used by widget 94d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan */ 9523e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_DETAILED_VIEW = "preferred_detailedView"; 9623e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String KEY_DEFAULT_CALENDAR = "preference_defaultCalendar"; 9745efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 988e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang // These must be in sync with the array preferences_week_start_day_values 9923e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String WEEK_START_DEFAULT = "-1"; 10023e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String WEEK_START_SATURDAY = "7"; 10123e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String WEEK_START_SUNDAY = "1"; 10223e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tang public static final String WEEK_START_MONDAY = "2"; 1038e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 104cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang // These keys are kept to enable migrating users from previous versions 105cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang private static final String KEY_ALERTS_TYPE = "preferences_alerts_type"; 106cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang private static final String ALERT_TYPE_ALERTS = "0"; 107cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang private static final String ALERT_TYPE_STATUS_BAR = "1"; 108cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang private static final String ALERT_TYPE_OFF = "2"; 109235d59cf61769ec8ab777d81cd1ceb2e7530f439Erik static final String KEY_HOME_TZ_ENABLED = "preferences_home_tz_enabled"; 110235d59cf61769ec8ab777d81cd1ceb2e7530f439Erik static final String KEY_HOME_TZ = "preferences_home_tz"; 1118e3d430a020744faa21bf4ca24f1a99c36ec5c4fMason Tang 112146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Default preference values 113d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan public static final int DEFAULT_START_VIEW = CalendarController.ViewType.WEEK; 114d6734dbbd704cdb1bc331d1bd74b7a3be58f69ffMichael Chan public static final int DEFAULT_DETAILED_VIEW = CalendarController.ViewType.DAY; 115d644b0df14ae6e204369b3454d16976fba32f15cDaisuke Miyakawa public static final boolean DEFAULT_SHOW_WEEK_NUM = false; 1162e760f909aac60f9db66bb293377f8fabad08e51Sam Blitzstein // This should match the XML file. 1172e760f909aac60f9db66bb293377f8fabad08e51Sam Blitzstein public static final String DEFAULT_RINGTONE = "content://settings/system/notification_sound"; 11845efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 119cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang CheckBoxPreference mAlert; 1200b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan CheckBoxPreference mVibrate; 121146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project RingtonePreference mRingtone; 122cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang CheckBoxPreference mPopup; 1233dc5e908a825b879978ba523d9099dc2255da9a5Erik CheckBoxPreference mUseHomeTZ; 12442dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik CheckBoxPreference mHideDeclined; 125974343a44435bedc104d89fa98fdeb1ccf362501James Kung Preference mHomeTZ; 12600040c6e081d367567fd579f881e58d448154622Sam Blitzstein TimeZonePickerUtils mTzPickerUtils; 1278b162f148579c26bf5b4b667308ac829cae6abe6Erik ListPreference mWeekStart; 1288b162f148579c26bf5b4b667308ac829cae6abe6Erik ListPreference mDefaultReminder; 12945efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 130305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan private String mTimeZoneId; 131305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan 132a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton /** Return a properly configured SharedPreferences instance */ 133a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton public static SharedPreferences getSharedPreferences(Context context) { 134a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton return context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE); 135a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton } 136a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton 137a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton /** Set the default shared preferences in the proper context */ 138a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton public static void setDefaultValues(Context context) { 139a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton PreferenceManager.setDefaultValues(context, SHARED_PREFS_NAME, Context.MODE_PRIVATE, 1404ad6302749749149766dcca599380b8f06fa0f12Daisuke Miyakawa R.xml.general_preferences, false); 141a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton } 142a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton 143146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 1444b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa public void onCreate(Bundle icicle) { 145146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onCreate(icicle); 14645efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 1474b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa final Activity activity = getActivity(); 1484b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa 149a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton // Make sure to always use the same preferences file regardless of the package name 150a17725e24d51b7a6f002dd5afd3270c8eeea0dbeJeff Hamilton // we're running under 1514b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa final PreferenceManager preferenceManager = getPreferenceManager(); 1524b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa final SharedPreferences sharedPreferences = getSharedPreferences(activity); 153d73944a1691f2299889ea6140f7fd256040d9e41Jim Shuma preferenceManager.setSharedPreferencesName(SHARED_PREFS_NAME); 1548bb13b84840bbea1ccdd64a582b655547b16ba1bMichael Chan 155146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Load the preferences from an XML resource 1564ad6302749749149766dcca599380b8f06fa0f12Daisuke Miyakawa addPreferencesFromResource(R.xml.general_preferences); 15745efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 1585897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa final PreferenceScreen preferenceScreen = getPreferenceScreen(); 159cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mAlert = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS); 1600b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mVibrate = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS_VIBRATE); 1617412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE); 1627412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan if (vibrator == null || !vibrator.hasVibrator()) { 1637412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan PreferenceCategory mAlertGroup = (PreferenceCategory) preferenceScreen 1647412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan .findPreference(KEY_ALERTS_CATEGORY); 1650b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mAlertGroup.removePreference(mVibrate); 1667412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan } 1677412b62056858a0c7a3ebc2f1a14f7475d93287cMichael Chan 168146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mRingtone = (RingtonePreference) preferenceScreen.findPreference(KEY_ALERTS_RINGTONE); 1691851ecb450bbfa40ef375a914d1c31c793684894Michael Chan String ringToneUri = Utils.getRingTonePreference(activity); 1701851ecb450bbfa40ef375a914d1c31c793684894Michael Chan 1711851ecb450bbfa40ef375a914d1c31c793684894Michael Chan // Set the ringToneUri to the backup-able shared pref only so that 1721851ecb450bbfa40ef375a914d1c31c793684894Michael Chan // the Ringtone dialog will open up with the correct value. 1731851ecb450bbfa40ef375a914d1c31c793684894Michael Chan final Editor editor = preferenceScreen.getEditor(); 1741851ecb450bbfa40ef375a914d1c31c793684894Michael Chan editor.putString(GeneralPreferences.KEY_ALERTS_RINGTONE, ringToneUri).apply(); 1751851ecb450bbfa40ef375a914d1c31c793684894Michael Chan 1761851ecb450bbfa40ef375a914d1c31c793684894Michael Chan String ringtoneDisplayString = getRingtoneTitleFromUri(activity, ringToneUri); 1771851ecb450bbfa40ef375a914d1c31c793684894Michael Chan mRingtone.setSummary(ringtoneDisplayString == null ? "" : ringtoneDisplayString); 1780b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan 179cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS_POPUP); 1803dc5e908a825b879978ba523d9099dc2255da9a5Erik mUseHomeTZ = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HOME_TZ_ENABLED); 18142dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik mHideDeclined = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HIDE_DECLINED); 1828b162f148579c26bf5b4b667308ac829cae6abe6Erik mWeekStart = (ListPreference) preferenceScreen.findPreference(KEY_WEEK_START_DAY); 1838b162f148579c26bf5b4b667308ac829cae6abe6Erik mDefaultReminder = (ListPreference) preferenceScreen.findPreference(KEY_DEFAULT_REMINDER); 184974343a44435bedc104d89fa98fdeb1ccf362501James Kung mHomeTZ = preferenceScreen.findPreference(KEY_HOME_TZ); 1858b162f148579c26bf5b4b667308ac829cae6abe6Erik mWeekStart.setSummary(mWeekStart.getEntry()); 1868b162f148579c26bf5b4b667308ac829cae6abe6Erik mDefaultReminder.setSummary(mDefaultReminder.getEntry()); 1878b162f148579c26bf5b4b667308ac829cae6abe6Erik 188305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan // This triggers an asynchronous call to the provider to refresh the data in shared pref 189305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan mTimeZoneId = Utils.getTimeZone(activity, null); 190305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan 191305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan SharedPreferences prefs = CalendarUtils.getSharedPreferences(activity, 192305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan Utils.SHARED_PREFS_NAME); 193305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan 194305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan // Utils.getTimeZone will return the currentTimeZone instead of the one 195305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan // in the shared_pref if home time zone is disabled. So if home tz is 196305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan // off, we will explicitly read it. 197305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan if (!prefs.getBoolean(KEY_HOME_TZ_ENABLED, false)) { 198305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan mTimeZoneId = prefs.getString(KEY_HOME_TZ, Time.getCurrentTimezone()); 199305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan } 200305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan 201974343a44435bedc104d89fa98fdeb1ccf362501James Kung mHomeTZ.setOnPreferenceClickListener(new OnPreferenceClickListener() { 202974343a44435bedc104d89fa98fdeb1ccf362501James Kung @Override 203974343a44435bedc104d89fa98fdeb1ccf362501James Kung public boolean onPreferenceClick(Preference preference) { 204974343a44435bedc104d89fa98fdeb1ccf362501James Kung showTimezoneDialog(); 205974343a44435bedc104d89fa98fdeb1ccf362501James Kung return true; 206974343a44435bedc104d89fa98fdeb1ccf362501James Kung } 207974343a44435bedc104d89fa98fdeb1ccf362501James Kung }); 208974343a44435bedc104d89fa98fdeb1ccf362501James Kung 20900040c6e081d367567fd579f881e58d448154622Sam Blitzstein if (mTzPickerUtils == null) { 21000040c6e081d367567fd579f881e58d448154622Sam Blitzstein mTzPickerUtils = new TimeZonePickerUtils(getActivity()); 21100040c6e081d367567fd579f881e58d448154622Sam Blitzstein } 212dd67b8db0c2e39bee143cd09fc9055b25849910aSam Blitzstein CharSequence timezoneName = mTzPickerUtils.getGmtDisplayName(getActivity(), mTimeZoneId, 213b69ea6371541b833662acbb835ae758316e1d0bbSam Blitzstein System.currentTimeMillis(), false); 214305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan mHomeTZ.setSummary(timezoneName != null ? timezoneName : mTimeZoneId); 215974343a44435bedc104d89fa98fdeb1ccf362501James Kung 216974343a44435bedc104d89fa98fdeb1ccf362501James Kung TimeZonePickerDialog tzpd = (TimeZonePickerDialog) activity.getFragmentManager() 217974343a44435bedc104d89fa98fdeb1ccf362501James Kung .findFragmentByTag(FRAG_TAG_TIME_ZONE_PICKER); 218974343a44435bedc104d89fa98fdeb1ccf362501James Kung if (tzpd != null) { 219974343a44435bedc104d89fa98fdeb1ccf362501James Kung tzpd.setOnTimeZoneSetListener(this); 22039861950855726cb86118f03a74b2f3a69c713c2Erik } 22145efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 222cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang migrateOldPreferences(sharedPreferences); 223d73944a1691f2299889ea6140f7fd256040d9e41Jim Shuma 224146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project updateChildPreferences(); 225146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 22645efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 227974343a44435bedc104d89fa98fdeb1ccf362501James Kung private void showTimezoneDialog() { 228974343a44435bedc104d89fa98fdeb1ccf362501James Kung final Activity activity = getActivity(); 229974343a44435bedc104d89fa98fdeb1ccf362501James Kung if (activity == null) { 230974343a44435bedc104d89fa98fdeb1ccf362501James Kung return; 231974343a44435bedc104d89fa98fdeb1ccf362501James Kung } 232974343a44435bedc104d89fa98fdeb1ccf362501James Kung 233974343a44435bedc104d89fa98fdeb1ccf362501James Kung Bundle b = new Bundle(); 234974343a44435bedc104d89fa98fdeb1ccf362501James Kung b.putLong(TimeZonePickerDialog.BUNDLE_START_TIME_MILLIS, System.currentTimeMillis()); 235974343a44435bedc104d89fa98fdeb1ccf362501James Kung b.putString(TimeZonePickerDialog.BUNDLE_TIME_ZONE, Utils.getTimeZone(activity, null)); 236974343a44435bedc104d89fa98fdeb1ccf362501James Kung 237974343a44435bedc104d89fa98fdeb1ccf362501James Kung FragmentManager fm = getActivity().getFragmentManager(); 238974343a44435bedc104d89fa98fdeb1ccf362501James Kung TimeZonePickerDialog tzpd = (TimeZonePickerDialog) fm 239974343a44435bedc104d89fa98fdeb1ccf362501James Kung .findFragmentByTag(FRAG_TAG_TIME_ZONE_PICKER); 240974343a44435bedc104d89fa98fdeb1ccf362501James Kung if (tzpd != null) { 241974343a44435bedc104d89fa98fdeb1ccf362501James Kung tzpd.dismiss(); 242974343a44435bedc104d89fa98fdeb1ccf362501James Kung } 243974343a44435bedc104d89fa98fdeb1ccf362501James Kung tzpd = new TimeZonePickerDialog(); 244974343a44435bedc104d89fa98fdeb1ccf362501James Kung tzpd.setArguments(b); 245974343a44435bedc104d89fa98fdeb1ccf362501James Kung tzpd.setOnTimeZoneSetListener(this); 246974343a44435bedc104d89fa98fdeb1ccf362501James Kung tzpd.show(fm, FRAG_TAG_TIME_ZONE_PICKER); 247974343a44435bedc104d89fa98fdeb1ccf362501James Kung } 248974343a44435bedc104d89fa98fdeb1ccf362501James Kung 2495897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa @Override 2500b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan public void onStart() { 2510b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan super.onStart(); 2525897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa getPreferenceScreen().getSharedPreferences() 2535897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa .registerOnSharedPreferenceChangeListener(this); 2548b162f148579c26bf5b4b667308ac829cae6abe6Erik setPreferenceListeners(this); 2558b162f148579c26bf5b4b667308ac829cae6abe6Erik } 2568b162f148579c26bf5b4b667308ac829cae6abe6Erik 2578b162f148579c26bf5b4b667308ac829cae6abe6Erik /** 2588b162f148579c26bf5b4b667308ac829cae6abe6Erik * Sets up all the preference change listeners to use the specified 2598b162f148579c26bf5b4b667308ac829cae6abe6Erik * listener. 2608b162f148579c26bf5b4b667308ac829cae6abe6Erik */ 2618b162f148579c26bf5b4b667308ac829cae6abe6Erik private void setPreferenceListeners(OnPreferenceChangeListener listener) { 2628b162f148579c26bf5b4b667308ac829cae6abe6Erik mUseHomeTZ.setOnPreferenceChangeListener(listener); 2638b162f148579c26bf5b4b667308ac829cae6abe6Erik mHomeTZ.setOnPreferenceChangeListener(listener); 2648b162f148579c26bf5b4b667308ac829cae6abe6Erik mWeekStart.setOnPreferenceChangeListener(listener); 2658b162f148579c26bf5b4b667308ac829cae6abe6Erik mDefaultReminder.setOnPreferenceChangeListener(listener); 2668b162f148579c26bf5b4b667308ac829cae6abe6Erik mRingtone.setOnPreferenceChangeListener(listener); 26742dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik mHideDeclined.setOnPreferenceChangeListener(listener); 2680b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mVibrate.setOnPreferenceChangeListener(listener); 2695897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa } 2705897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa 2715897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa @Override 2720b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan public void onStop() { 2735897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa getPreferenceScreen().getSharedPreferences() 2745897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa .unregisterOnSharedPreferenceChangeListener(this); 2758b162f148579c26bf5b4b667308ac829cae6abe6Erik setPreferenceListeners(null); 2760b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan super.onStop(); 2775897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa } 2785897c00e8ced53c27f3bd87f11df071d4266203aDaisuke Miyakawa 27943ffa461b738692925a94c005c90ff60757455a7RoboErik @Override 280146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 28143ffa461b738692925a94c005c90ff60757455a7RoboErik Activity a = getActivity(); 282cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang if (key.equals(KEY_ALERTS)) { 283146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project updateChildPreferences(); 28443ffa461b738692925a94c005c90ff60757455a7RoboErik if (a != null) { 28543ffa461b738692925a94c005c90ff60757455a7RoboErik Intent intent = new Intent(); 28643ffa461b738692925a94c005c90ff60757455a7RoboErik intent.setClass(a, AlertReceiver.class); 28743ffa461b738692925a94c005c90ff60757455a7RoboErik if (mAlert.isChecked()) { 28843ffa461b738692925a94c005c90ff60757455a7RoboErik intent.setAction(AlertReceiver.ACTION_DISMISS_OLD_REMINDERS); 28943ffa461b738692925a94c005c90ff60757455a7RoboErik } else { 2903a07a68da6460c36a5dbec5b8828baa4355dbe04Sara Ting intent.setAction(AlertReceiver.EVENT_REMINDER_APP_ACTION); 29143ffa461b738692925a94c005c90ff60757455a7RoboErik } 29243ffa461b738692925a94c005c90ff60757455a7RoboErik a.sendBroadcast(intent); 29343ffa461b738692925a94c005c90ff60757455a7RoboErik } 294146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 295bdadecb6a5fc35b51bc3d488b5f0b4cbed987964Garth Bushell if (a != null) { 296bdadecb6a5fc35b51bc3d488b5f0b4cbed987964Garth Bushell BackupManager.dataChanged(a.getPackageName()); 297bdadecb6a5fc35b51bc3d488b5f0b4cbed987964Garth Bushell } 2983dc5e908a825b879978ba523d9099dc2255da9a5Erik } 2993dc5e908a825b879978ba523d9099dc2255da9a5Erik 3006ea265f8b747a26d6d3b21743afcdaa667a02711Erik /** 3016ea265f8b747a26d6d3b21743afcdaa667a02711Erik * Handles time zone preference changes 3026ea265f8b747a26d6d3b21743afcdaa667a02711Erik */ 3036ea265f8b747a26d6d3b21743afcdaa667a02711Erik @Override 3046ea265f8b747a26d6d3b21743afcdaa667a02711Erik public boolean onPreferenceChange(Preference preference, Object newValue) { 3056ea265f8b747a26d6d3b21743afcdaa667a02711Erik String tz; 3061851ecb450bbfa40ef375a914d1c31c793684894Michael Chan final Activity activity = getActivity(); 3076ea265f8b747a26d6d3b21743afcdaa667a02711Erik if (preference == mUseHomeTZ) { 3086ea265f8b747a26d6d3b21743afcdaa667a02711Erik if ((Boolean)newValue) { 309305c64230c4c8928d5aa29c4bd123ca44627491aMichael Chan tz = mTimeZoneId; 3106ea265f8b747a26d6d3b21743afcdaa667a02711Erik } else { 311a48b9d426236d8d26bd99602bf0a84315b3f1b09Erik tz = CalendarCache.TIMEZONE_TYPE_AUTO; 3126ea265f8b747a26d6d3b21743afcdaa667a02711Erik } 3131851ecb450bbfa40ef375a914d1c31c793684894Michael Chan Utils.setTimeZone(activity, tz); 314df15c7efe5839edd670b8b5dd6918e1b08df5a91RoboErik return true; 31542dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik } else if (preference == mHideDeclined) { 31642dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik mHideDeclined.setChecked((Boolean) newValue); 3171851ecb450bbfa40ef375a914d1c31c793684894Michael Chan Intent intent = new Intent(Utils.getWidgetScheduledUpdateAction(activity)); 31842dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik intent.setDataAndType(CalendarContract.CONTENT_URI, Utils.APPWIDGET_DATA_TYPE); 3191851ecb450bbfa40ef375a914d1c31c793684894Michael Chan activity.sendBroadcast(intent); 32042dabd1e1e89b0d4af5afb776c6ecc53f6ae9fbaRoboErik return true; 3218b162f148579c26bf5b4b667308ac829cae6abe6Erik } else if (preference == mWeekStart) { 3228b162f148579c26bf5b4b667308ac829cae6abe6Erik mWeekStart.setValue((String) newValue); 3238b162f148579c26bf5b4b667308ac829cae6abe6Erik mWeekStart.setSummary(mWeekStart.getEntry()); 3248b162f148579c26bf5b4b667308ac829cae6abe6Erik } else if (preference == mDefaultReminder) { 3258b162f148579c26bf5b4b667308ac829cae6abe6Erik mDefaultReminder.setValue((String) newValue); 3268b162f148579c26bf5b4b667308ac829cae6abe6Erik mDefaultReminder.setSummary(mDefaultReminder.getEntry()); 3278b162f148579c26bf5b4b667308ac829cae6abe6Erik } else if (preference == mRingtone) { 3280b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan if (newValue instanceof String) { 3291851ecb450bbfa40ef375a914d1c31c793684894Michael Chan Utils.setRingTonePreference(activity, (String) newValue); 3301851ecb450bbfa40ef375a914d1c31c793684894Michael Chan String ringtone = getRingtoneTitleFromUri(activity, (String) newValue); 3310b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mRingtone.setSummary(ringtone == null ? "" : ringtone); 3320b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan } 3330b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan return true; 3340b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan } else if (preference == mVibrate) { 3350b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mVibrate.setChecked((Boolean) newValue); 3368b162f148579c26bf5b4b667308ac829cae6abe6Erik return true; 3376ea265f8b747a26d6d3b21743afcdaa667a02711Erik } else { 3388b162f148579c26bf5b4b667308ac829cae6abe6Erik return true; 3393dc5e908a825b879978ba523d9099dc2255da9a5Erik } 3408b162f148579c26bf5b4b667308ac829cae6abe6Erik return false; 341146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 34245efa09d6e06f5569b2c0ae0dae0436dbfe6cb28Michael Chan 3430b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan public String getRingtoneTitleFromUri(Context context, String uri) { 3440b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan if (TextUtils.isEmpty(uri)) { 3450b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan return null; 3460b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan } 3470b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan 3480b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan Ringtone ring = RingtoneManager.getRingtone(getActivity(), Uri.parse(uri)); 3490b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan if (ring != null) { 3500b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan return ring.getTitle(context); 3510b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan } 3520b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan return null; 3530b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan } 3540b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan 355cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang /** 356cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang * If necessary, upgrades previous versions of preferences to the current 357cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang * set of keys and values. 358cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang * @param prefs the preferences to upgrade 359cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang */ 360cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang private void migrateOldPreferences(SharedPreferences prefs) { 361cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang // If needed, migrate vibration setting from a previous version 3620b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan 3630b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mVibrate.setChecked(Utils.getDefaultVibrate(getActivity(), prefs)); 3640b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan 365cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang // If needed, migrate the old alerts type settin 366cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang if (!prefs.contains(KEY_ALERTS) && prefs.contains(KEY_ALERTS_TYPE)) { 367cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang String type = prefs.getString(KEY_ALERTS_TYPE, ALERT_TYPE_STATUS_BAR); 368cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang if (type.equals(ALERT_TYPE_OFF)) { 369cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mAlert.setChecked(false); 370cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setChecked(false); 371cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setEnabled(false); 372cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang } else if (type.equals(ALERT_TYPE_STATUS_BAR)) { 373cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mAlert.setChecked(true); 374cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setChecked(false); 375cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setEnabled(true); 376cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang } else if (type.equals(ALERT_TYPE_ALERTS)) { 377cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mAlert.setChecked(true); 378cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setChecked(true); 379cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setEnabled(true); 380cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang } 381cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang // clear out the old setting 382cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang prefs.edit().remove(KEY_ALERTS_TYPE).commit(); 383cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang } 384cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang } 385cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang 386cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang /** 387cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang * Keeps the dependent settings in sync with the parent preference, so for 388cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang * example, when notifications are turned off, we disable the preferences 389cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang * for configuring the exact notification behavior. 390cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang */ 391146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private void updateChildPreferences() { 392cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang if (mAlert.isChecked()) { 3930b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mVibrate.setEnabled(true); 394cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mRingtone.setEnabled(true); 395cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setEnabled(true); 396cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang } else { 3970b674bef73eac24a4c41cfd5af8be516f4936844Michael Chan mVibrate.setEnabled(false); 398146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mRingtone.setEnabled(false); 399cca9ecb23b079c47856af22f89f7a6f3dec7a492Mason Tang mPopup.setEnabled(false); 400146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 401146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 4023a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang 4033a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang 404d644b0df14ae6e204369b3454d16976fba32f15cDaisuke Miyakawa @Override 405d644b0df14ae6e204369b3454d16976fba32f15cDaisuke Miyakawa public boolean onPreferenceTreeClick( 406d644b0df14ae6e204369b3454d16976fba32f15cDaisuke Miyakawa PreferenceScreen preferenceScreen, Preference preference) { 407d644b0df14ae6e204369b3454d16976fba32f15cDaisuke Miyakawa final String key = preference.getKey(); 408e98dca7e0042f7b36788b0e5d8dc6e94048c895cMichael Chan if (KEY_CLEAR_SEARCH_HISTORY.equals(key)) { 4094b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(), 410064beb957ae443760118023a40fd7001eb11c1a1RoboErik Utils.getSearchAuthority(getActivity()), 4113a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang CalendarRecentSuggestionsProvider.MODE); 4123a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang suggestions.clearHistory(); 4134b441bd6544fe6d11be75f974a41afd8fa040a4fDaisuke Miyakawa Toast.makeText(getActivity(), R.string.search_history_cleared, 4143a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang Toast.LENGTH_SHORT).show(); 4153a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang return true; 416e98dca7e0042f7b36788b0e5d8dc6e94048c895cMichael Chan } else { 417e98dca7e0042f7b36788b0e5d8dc6e94048c895cMichael Chan return super.onPreferenceTreeClick(preferenceScreen, preference); 4183a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang } 4193a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang } 4203a0e67b1d81a6170a844bb6f9e294efa3a42650aMason Tang 421974343a44435bedc104d89fa98fdeb1ccf362501James Kung @Override 422974343a44435bedc104d89fa98fdeb1ccf362501James Kung public void onTimeZoneSet(TimeZoneInfo tzi) { 42300040c6e081d367567fd579f881e58d448154622Sam Blitzstein if (mTzPickerUtils == null) { 42400040c6e081d367567fd579f881e58d448154622Sam Blitzstein mTzPickerUtils = new TimeZonePickerUtils(getActivity()); 42500040c6e081d367567fd579f881e58d448154622Sam Blitzstein } 42600040c6e081d367567fd579f881e58d448154622Sam Blitzstein 427dd67b8db0c2e39bee143cd09fc9055b25849910aSam Blitzstein final CharSequence timezoneName = mTzPickerUtils.getGmtDisplayName( 428b69ea6371541b833662acbb835ae758316e1d0bbSam Blitzstein getActivity(), tzi.mTzId, System.currentTimeMillis(), false); 429974343a44435bedc104d89fa98fdeb1ccf362501James Kung mHomeTZ.setSummary(timezoneName); 430974343a44435bedc104d89fa98fdeb1ccf362501James Kung Utils.setTimeZone(getActivity(), tzi.mTzId); 431974343a44435bedc104d89fa98fdeb1ccf362501James Kung } 432146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project} 433