blob: 54fc0e783d040ed374894c1c07625b6558623e5d [file] [log] [blame]
The Android Open Source Project146de362009-03-03 19:32:18 -08001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.calendar;
18
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070019import android.app.Activity;
James Kung974343a2013-04-03 16:12:38 -070020import android.app.FragmentManager;
Michael Chan7412b622011-01-09 13:06:52 -080021import android.app.backup.BackupManager;
Jeff Hamiltona17725e2010-02-16 18:28:16 -060022import android.content.Context;
RoboErik42dabd12011-07-12 18:01:03 -070023import android.content.Intent;
The Android Open Source Project146de362009-03-03 19:32:18 -080024import android.content.SharedPreferences;
Michael Chan1851ecb2013-04-18 18:36:24 -070025import android.content.SharedPreferences.Editor;
The Android Open Source Project146de362009-03-03 19:32:18 -080026import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
Michael Chan0b674be2012-11-20 07:16:14 -080027import android.media.Ringtone;
28import android.media.RingtoneManager;
29import android.net.Uri;
The Android Open Source Project146de362009-03-03 19:32:18 -080030import android.os.Bundle;
Michael Chan7412b622011-01-09 13:06:52 -080031import android.os.Vibrator;
Mason Tangcca9ecb2010-07-16 15:07:47 -070032import android.preference.CheckBoxPreference;
The Android Open Source Project146de362009-03-03 19:32:18 -080033import android.preference.ListPreference;
Mason Tang3a0e67b2010-08-23 16:59:30 -070034import android.preference.Preference;
Erik6ea265f2010-09-08 15:14:36 -070035import android.preference.Preference.OnPreferenceChangeListener;
James Kung974343a2013-04-03 16:12:38 -070036import android.preference.Preference.OnPreferenceClickListener;
Michael Chan7412b622011-01-09 13:06:52 -080037import android.preference.PreferenceCategory;
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070038import android.preference.PreferenceFragment;
Jeff Hamiltona17725e2010-02-16 18:28:16 -060039import android.preference.PreferenceManager;
The Android Open Source Project146de362009-03-03 19:32:18 -080040import android.preference.PreferenceScreen;
The Android Open Source Project146de362009-03-03 19:32:18 -080041import android.preference.RingtonePreference;
RoboErik42dabd12011-07-12 18:01:03 -070042import android.provider.CalendarContract;
RoboErika7c03902011-06-14 11:06:44 -070043import android.provider.CalendarContract.CalendarCache;
Mason Tang3a0e67b2010-08-23 16:59:30 -070044import android.provider.SearchRecentSuggestions;
Erik39861952010-12-10 13:25:24 -080045import android.text.TextUtils;
Michael Chan305c6422013-04-12 18:28:27 -070046import android.text.format.Time;
Mason Tang3a0e67b2010-08-23 16:59:30 -070047import android.widget.Toast;
The Android Open Source Project146de362009-03-03 19:32:18 -080048
Michael Chan559cb862012-05-12 07:42:13 -070049import com.android.calendar.alerts.AlertReceiver;
James Kung974343a2013-04-03 16:12:38 -070050import com.android.timezonepicker.TimeZoneInfo;
51import com.android.timezonepicker.TimeZonePickerDialog;
52import com.android.timezonepicker.TimeZonePickerDialog.OnTimeZoneSetListener;
53import com.android.timezonepicker.TimeZonePickerUtils;
Michael Chan559cb862012-05-12 07:42:13 -070054
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -070055public class GeneralPreferences extends PreferenceFragment implements
James Kung974343a2013-04-03 16:12:38 -070056 OnSharedPreferenceChangeListener, OnPreferenceChangeListener, OnTimeZoneSetListener {
Jeff Hamiltona17725e2010-02-16 18:28:16 -060057 // The name of the shared preferences file. This name must be maintained for historical
58 // reasons, as it's what PreferenceManager assigned the first time the file was created.
Garth Bushellbdadecb2010-10-06 22:35:31 +010059 static final String SHARED_PREFS_NAME = "com.android.calendar_preferences";
Michael Chan1851ecb2013-04-18 18:36:24 -070060 static final String SHARED_PREFS_NAME_NO_BACKUP = "com.android.calendar_preferences_no_backup";
Jeff Hamiltona17725e2010-02-16 18:28:16 -060061
James Kung974343a2013-04-03 16:12:38 -070062 private static final String FRAG_TAG_TIME_ZONE_PICKER = "TimeZonePicker";
63
The Android Open Source Project146de362009-03-03 19:32:18 -080064 // Preference keys
Mason Tang23e7da32010-07-27 15:24:02 -070065 public static final String KEY_HIDE_DECLINED = "preferences_hide_declined";
66 public static final String KEY_WEEK_START_DAY = "preferences_week_start_day";
Erik981874e2010-10-05 16:52:52 -070067 public static final String KEY_SHOW_WEEK_NUM = "preferences_show_week_num";
Erik91b01ed2010-11-22 17:46:15 -080068 public static final String KEY_DAYS_PER_WEEK = "preferences_days_per_week";
RoboErik6c892a22011-09-08 16:54:04 -070069 public static final String KEY_SKIP_SETUP = "preferences_skip_setup";
Mason Tangcca9ecb2010-07-16 15:07:47 -070070
Mason Tang3a0e67b2010-08-23 16:59:30 -070071 public static final String KEY_CLEAR_SEARCH_HISTORY = "preferences_clear_search_history";
72
Michael Chan7412b622011-01-09 13:06:52 -080073 public static final String KEY_ALERTS_CATEGORY = "preferences_alerts_category";
Mason Tang23e7da32010-07-27 15:24:02 -070074 public static final String KEY_ALERTS = "preferences_alerts";
75 public static final String KEY_ALERTS_VIBRATE = "preferences_alerts_vibrate";
Mason Tang23e7da32010-07-27 15:24:02 -070076 public static final String KEY_ALERTS_RINGTONE = "preferences_alerts_ringtone";
77 public static final String KEY_ALERTS_POPUP = "preferences_alerts_popup";
Mason Tangcca9ecb2010-07-16 15:07:47 -070078
Isaac Katzenelson31489e92012-05-14 11:25:58 -070079 public static final String KEY_SHOW_CONTROLS = "preferences_show_controls";
80
Mason Tang23e7da32010-07-27 15:24:02 -070081 public static final String KEY_DEFAULT_REMINDER = "preferences_default_reminder";
Michael Chan9d8a3762011-03-29 15:40:24 -070082 public static final int NO_REMINDER = -1;
83 public static final String NO_REMINDER_STRING = "-1";
84 public static final int REMINDER_DEFAULT_TIME = 10; // in minutes
Michael Chand6734db2010-07-22 00:48:08 -070085
Michael Chand885c1a2010-08-26 00:06:25 -070086 public static final String KEY_DEFAULT_CELL_HEIGHT = "preferences_default_cell_height";
Sara Tingf565bc12012-08-28 11:27:28 -070087 public static final String KEY_VERSION = "preferences_version";
Michael Chand885c1a2010-08-26 00:06:25 -070088
Michael Chand6734db2010-07-22 00:48:08 -070089 /** Key to SharePreference for default view (CalendarController.ViewType) */
Mason Tang23e7da32010-07-27 15:24:02 -070090 public static final String KEY_START_VIEW = "preferred_startView";
Michael Chand6734db2010-07-22 00:48:08 -070091 /**
92 * Key to SharePreference for default detail view (CalendarController.ViewType)
93 * Typically used by widget
94 */
Mason Tang23e7da32010-07-27 15:24:02 -070095 public static final String KEY_DETAILED_VIEW = "preferred_detailedView";
96 public static final String KEY_DEFAULT_CALENDAR = "preference_defaultCalendar";
Michael Chan45efa092010-02-03 17:44:37 -080097
Mason Tang8e3d4302010-07-12 17:39:30 -070098 // These must be in sync with the array preferences_week_start_day_values
Mason Tang23e7da32010-07-27 15:24:02 -070099 public static final String WEEK_START_DEFAULT = "-1";
100 public static final String WEEK_START_SATURDAY = "7";
101 public static final String WEEK_START_SUNDAY = "1";
102 public static final String WEEK_START_MONDAY = "2";
Mason Tang8e3d4302010-07-12 17:39:30 -0700103
Mason Tangcca9ecb2010-07-16 15:07:47 -0700104 // These keys are kept to enable migrating users from previous versions
105 private static final String KEY_ALERTS_TYPE = "preferences_alerts_type";
106 private static final String ALERT_TYPE_ALERTS = "0";
107 private static final String ALERT_TYPE_STATUS_BAR = "1";
108 private static final String ALERT_TYPE_OFF = "2";
Erik235d59c2010-09-02 16:29:59 -0700109 static final String KEY_HOME_TZ_ENABLED = "preferences_home_tz_enabled";
110 static final String KEY_HOME_TZ = "preferences_home_tz";
Mason Tang8e3d4302010-07-12 17:39:30 -0700111
The Android Open Source Project146de362009-03-03 19:32:18 -0800112 // Default preference values
Michael Chand6734db2010-07-22 00:48:08 -0700113 public static final int DEFAULT_START_VIEW = CalendarController.ViewType.WEEK;
114 public static final int DEFAULT_DETAILED_VIEW = CalendarController.ViewType.DAY;
Daisuke Miyakawad644b0d2010-10-21 15:45:12 -0700115 public static final boolean DEFAULT_SHOW_WEEK_NUM = false;
Sam Blitzstein2e760f92013-04-18 11:52:33 -0700116 // This should match the XML file.
117 public static final String DEFAULT_RINGTONE = "content://settings/system/notification_sound";
Michael Chan45efa092010-02-03 17:44:37 -0800118
Mason Tangcca9ecb2010-07-16 15:07:47 -0700119 CheckBoxPreference mAlert;
Michael Chan0b674be2012-11-20 07:16:14 -0800120 CheckBoxPreference mVibrate;
The Android Open Source Project146de362009-03-03 19:32:18 -0800121 RingtonePreference mRingtone;
Mason Tangcca9ecb2010-07-16 15:07:47 -0700122 CheckBoxPreference mPopup;
Erik3dc5e902010-09-07 11:33:07 -0700123 CheckBoxPreference mUseHomeTZ;
RoboErik42dabd12011-07-12 18:01:03 -0700124 CheckBoxPreference mHideDeclined;
James Kung974343a2013-04-03 16:12:38 -0700125 Preference mHomeTZ;
Sam Blitzstein00040c62013-04-11 10:13:47 -0700126 TimeZonePickerUtils mTzPickerUtils;
Erik8b162f12011-02-02 16:05:58 -0800127 ListPreference mWeekStart;
128 ListPreference mDefaultReminder;
Michael Chan45efa092010-02-03 17:44:37 -0800129
Michael Chan305c6422013-04-12 18:28:27 -0700130 private String mTimeZoneId;
131
Jeff Hamiltona17725e2010-02-16 18:28:16 -0600132 /** Return a properly configured SharedPreferences instance */
133 public static SharedPreferences getSharedPreferences(Context context) {
134 return context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE);
135 }
136
137 /** Set the default shared preferences in the proper context */
138 public static void setDefaultValues(Context context) {
139 PreferenceManager.setDefaultValues(context, SHARED_PREFS_NAME, Context.MODE_PRIVATE,
Daisuke Miyakawa4ad63022010-09-17 13:57:35 -0700140 R.xml.general_preferences, false);
Jeff Hamiltona17725e2010-02-16 18:28:16 -0600141 }
142
The Android Open Source Project146de362009-03-03 19:32:18 -0800143 @Override
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -0700144 public void onCreate(Bundle icicle) {
The Android Open Source Project146de362009-03-03 19:32:18 -0800145 super.onCreate(icicle);
Michael Chan45efa092010-02-03 17:44:37 -0800146
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -0700147 final Activity activity = getActivity();
148
Jeff Hamiltona17725e2010-02-16 18:28:16 -0600149 // Make sure to always use the same preferences file regardless of the package name
150 // we're running under
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -0700151 final PreferenceManager preferenceManager = getPreferenceManager();
152 final SharedPreferences sharedPreferences = getSharedPreferences(activity);
Jim Shumad73944a2010-03-25 12:01:08 -0700153 preferenceManager.setSharedPreferencesName(SHARED_PREFS_NAME);
Michael Chan8bb13b82010-03-01 22:22:48 -0800154
The Android Open Source Project146de362009-03-03 19:32:18 -0800155 // Load the preferences from an XML resource
Daisuke Miyakawa4ad63022010-09-17 13:57:35 -0700156 addPreferencesFromResource(R.xml.general_preferences);
Michael Chan45efa092010-02-03 17:44:37 -0800157
Daisuke Miyakawa5897c002010-11-30 17:08:01 -0800158 final PreferenceScreen preferenceScreen = getPreferenceScreen();
Mason Tangcca9ecb2010-07-16 15:07:47 -0700159 mAlert = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS);
Michael Chan0b674be2012-11-20 07:16:14 -0800160 mVibrate = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS_VIBRATE);
Michael Chan7412b622011-01-09 13:06:52 -0800161 Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
162 if (vibrator == null || !vibrator.hasVibrator()) {
163 PreferenceCategory mAlertGroup = (PreferenceCategory) preferenceScreen
164 .findPreference(KEY_ALERTS_CATEGORY);
Michael Chan0b674be2012-11-20 07:16:14 -0800165 mAlertGroup.removePreference(mVibrate);
Michael Chan7412b622011-01-09 13:06:52 -0800166 }
167
The Android Open Source Project146de362009-03-03 19:32:18 -0800168 mRingtone = (RingtonePreference) preferenceScreen.findPreference(KEY_ALERTS_RINGTONE);
Michael Chan1851ecb2013-04-18 18:36:24 -0700169 String ringToneUri = Utils.getRingTonePreference(activity);
170
171 // Set the ringToneUri to the backup-able shared pref only so that
172 // the Ringtone dialog will open up with the correct value.
173 final Editor editor = preferenceScreen.getEditor();
174 editor.putString(GeneralPreferences.KEY_ALERTS_RINGTONE, ringToneUri).apply();
175
176 String ringtoneDisplayString = getRingtoneTitleFromUri(activity, ringToneUri);
177 mRingtone.setSummary(ringtoneDisplayString == null ? "" : ringtoneDisplayString);
Michael Chan0b674be2012-11-20 07:16:14 -0800178
Mason Tangcca9ecb2010-07-16 15:07:47 -0700179 mPopup = (CheckBoxPreference) preferenceScreen.findPreference(KEY_ALERTS_POPUP);
Erik3dc5e902010-09-07 11:33:07 -0700180 mUseHomeTZ = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HOME_TZ_ENABLED);
RoboErik42dabd12011-07-12 18:01:03 -0700181 mHideDeclined = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HIDE_DECLINED);
Erik8b162f12011-02-02 16:05:58 -0800182 mWeekStart = (ListPreference) preferenceScreen.findPreference(KEY_WEEK_START_DAY);
183 mDefaultReminder = (ListPreference) preferenceScreen.findPreference(KEY_DEFAULT_REMINDER);
James Kung974343a2013-04-03 16:12:38 -0700184 mHomeTZ = preferenceScreen.findPreference(KEY_HOME_TZ);
Erik8b162f12011-02-02 16:05:58 -0800185 mWeekStart.setSummary(mWeekStart.getEntry());
186 mDefaultReminder.setSummary(mDefaultReminder.getEntry());
187
Michael Chan305c6422013-04-12 18:28:27 -0700188 // This triggers an asynchronous call to the provider to refresh the data in shared pref
189 mTimeZoneId = Utils.getTimeZone(activity, null);
190
191 SharedPreferences prefs = CalendarUtils.getSharedPreferences(activity,
192 Utils.SHARED_PREFS_NAME);
193
194 // Utils.getTimeZone will return the currentTimeZone instead of the one
195 // in the shared_pref if home time zone is disabled. So if home tz is
196 // off, we will explicitly read it.
197 if (!prefs.getBoolean(KEY_HOME_TZ_ENABLED, false)) {
198 mTimeZoneId = prefs.getString(KEY_HOME_TZ, Time.getCurrentTimezone());
199 }
200
James Kung974343a2013-04-03 16:12:38 -0700201 mHomeTZ.setOnPreferenceClickListener(new OnPreferenceClickListener() {
202 @Override
203 public boolean onPreferenceClick(Preference preference) {
204 showTimezoneDialog();
205 return true;
206 }
207 });
208
Sam Blitzstein00040c62013-04-11 10:13:47 -0700209 if (mTzPickerUtils == null) {
210 mTzPickerUtils = new TimeZonePickerUtils(getActivity());
211 }
Sam Blitzsteindd67b8d2013-04-26 19:34:29 -0700212 CharSequence timezoneName = mTzPickerUtils.getGmtDisplayName(getActivity(), mTimeZoneId,
Sam Blitzsteinb69ea632013-05-03 18:22:12 -0700213 System.currentTimeMillis(), false);
Michael Chan305c6422013-04-12 18:28:27 -0700214 mHomeTZ.setSummary(timezoneName != null ? timezoneName : mTimeZoneId);
James Kung974343a2013-04-03 16:12:38 -0700215
216 TimeZonePickerDialog tzpd = (TimeZonePickerDialog) activity.getFragmentManager()
217 .findFragmentByTag(FRAG_TAG_TIME_ZONE_PICKER);
218 if (tzpd != null) {
219 tzpd.setOnTimeZoneSetListener(this);
Erika48b9d42010-09-22 15:31:03 -0700220 }
Michael Chan45efa092010-02-03 17:44:37 -0800221
Mason Tangcca9ecb2010-07-16 15:07:47 -0700222 migrateOldPreferences(sharedPreferences);
Jim Shumad73944a2010-03-25 12:01:08 -0700223
The Android Open Source Project146de362009-03-03 19:32:18 -0800224 updateChildPreferences();
225 }
Michael Chan45efa092010-02-03 17:44:37 -0800226
James Kung974343a2013-04-03 16:12:38 -0700227 private void showTimezoneDialog() {
228 final Activity activity = getActivity();
229 if (activity == null) {
230 return;
231 }
232
233 Bundle b = new Bundle();
234 b.putLong(TimeZonePickerDialog.BUNDLE_START_TIME_MILLIS, System.currentTimeMillis());
235 b.putString(TimeZonePickerDialog.BUNDLE_TIME_ZONE, Utils.getTimeZone(activity, null));
236
237 FragmentManager fm = getActivity().getFragmentManager();
238 TimeZonePickerDialog tzpd = (TimeZonePickerDialog) fm
239 .findFragmentByTag(FRAG_TAG_TIME_ZONE_PICKER);
240 if (tzpd != null) {
241 tzpd.dismiss();
242 }
243 tzpd = new TimeZonePickerDialog();
244 tzpd.setArguments(b);
245 tzpd.setOnTimeZoneSetListener(this);
246 tzpd.show(fm, FRAG_TAG_TIME_ZONE_PICKER);
247 }
248
Daisuke Miyakawa5897c002010-11-30 17:08:01 -0800249 @Override
Michael Chan0b674be2012-11-20 07:16:14 -0800250 public void onStart() {
251 super.onStart();
Daisuke Miyakawa5897c002010-11-30 17:08:01 -0800252 getPreferenceScreen().getSharedPreferences()
253 .registerOnSharedPreferenceChangeListener(this);
Erik8b162f12011-02-02 16:05:58 -0800254 setPreferenceListeners(this);
255 }
256
257 /**
258 * Sets up all the preference change listeners to use the specified
259 * listener.
260 */
261 private void setPreferenceListeners(OnPreferenceChangeListener listener) {
262 mUseHomeTZ.setOnPreferenceChangeListener(listener);
263 mHomeTZ.setOnPreferenceChangeListener(listener);
264 mWeekStart.setOnPreferenceChangeListener(listener);
265 mDefaultReminder.setOnPreferenceChangeListener(listener);
266 mRingtone.setOnPreferenceChangeListener(listener);
RoboErik42dabd12011-07-12 18:01:03 -0700267 mHideDeclined.setOnPreferenceChangeListener(listener);
Michael Chan0b674be2012-11-20 07:16:14 -0800268 mVibrate.setOnPreferenceChangeListener(listener);
Daisuke Miyakawa5897c002010-11-30 17:08:01 -0800269 }
270
271 @Override
Michael Chan0b674be2012-11-20 07:16:14 -0800272 public void onStop() {
Daisuke Miyakawa5897c002010-11-30 17:08:01 -0800273 getPreferenceScreen().getSharedPreferences()
274 .unregisterOnSharedPreferenceChangeListener(this);
Erik8b162f12011-02-02 16:05:58 -0800275 setPreferenceListeners(null);
Michael Chan0b674be2012-11-20 07:16:14 -0800276 super.onStop();
Daisuke Miyakawa5897c002010-11-30 17:08:01 -0800277 }
278
RoboErik43ffa462011-10-31 16:01:58 -0700279 @Override
The Android Open Source Project146de362009-03-03 19:32:18 -0800280 public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
RoboErik43ffa462011-10-31 16:01:58 -0700281 Activity a = getActivity();
Mason Tangcca9ecb2010-07-16 15:07:47 -0700282 if (key.equals(KEY_ALERTS)) {
The Android Open Source Project146de362009-03-03 19:32:18 -0800283 updateChildPreferences();
RoboErik43ffa462011-10-31 16:01:58 -0700284 if (a != null) {
285 Intent intent = new Intent();
286 intent.setClass(a, AlertReceiver.class);
287 if (mAlert.isChecked()) {
288 intent.setAction(AlertReceiver.ACTION_DISMISS_OLD_REMINDERS);
289 } else {
Sara Ting3a07a682012-10-31 13:19:38 -0700290 intent.setAction(AlertReceiver.EVENT_REMINDER_APP_ACTION);
RoboErik43ffa462011-10-31 16:01:58 -0700291 }
292 a.sendBroadcast(intent);
293 }
The Android Open Source Project146de362009-03-03 19:32:18 -0800294 }
Garth Bushellbdadecb2010-10-06 22:35:31 +0100295 if (a != null) {
296 BackupManager.dataChanged(a.getPackageName());
297 }
Erik3dc5e902010-09-07 11:33:07 -0700298 }
299
Erik6ea265f2010-09-08 15:14:36 -0700300 /**
301 * Handles time zone preference changes
302 */
303 @Override
304 public boolean onPreferenceChange(Preference preference, Object newValue) {
305 String tz;
Michael Chan1851ecb2013-04-18 18:36:24 -0700306 final Activity activity = getActivity();
Erik6ea265f2010-09-08 15:14:36 -0700307 if (preference == mUseHomeTZ) {
308 if ((Boolean)newValue) {
Michael Chan305c6422013-04-12 18:28:27 -0700309 tz = mTimeZoneId;
Erik6ea265f2010-09-08 15:14:36 -0700310 } else {
Erika48b9d42010-09-22 15:31:03 -0700311 tz = CalendarCache.TIMEZONE_TYPE_AUTO;
Erik6ea265f2010-09-08 15:14:36 -0700312 }
Michael Chan1851ecb2013-04-18 18:36:24 -0700313 Utils.setTimeZone(activity, tz);
RoboErikdf15c7e2011-02-14 13:59:05 -0800314 return true;
RoboErik42dabd12011-07-12 18:01:03 -0700315 } else if (preference == mHideDeclined) {
316 mHideDeclined.setChecked((Boolean) newValue);
Michael Chan1851ecb2013-04-18 18:36:24 -0700317 Intent intent = new Intent(Utils.getWidgetScheduledUpdateAction(activity));
RoboErik42dabd12011-07-12 18:01:03 -0700318 intent.setDataAndType(CalendarContract.CONTENT_URI, Utils.APPWIDGET_DATA_TYPE);
Michael Chan1851ecb2013-04-18 18:36:24 -0700319 activity.sendBroadcast(intent);
RoboErik42dabd12011-07-12 18:01:03 -0700320 return true;
Erik8b162f12011-02-02 16:05:58 -0800321 } else if (preference == mWeekStart) {
322 mWeekStart.setValue((String) newValue);
323 mWeekStart.setSummary(mWeekStart.getEntry());
324 } else if (preference == mDefaultReminder) {
325 mDefaultReminder.setValue((String) newValue);
326 mDefaultReminder.setSummary(mDefaultReminder.getEntry());
327 } else if (preference == mRingtone) {
Michael Chan0b674be2012-11-20 07:16:14 -0800328 if (newValue instanceof String) {
Michael Chan1851ecb2013-04-18 18:36:24 -0700329 Utils.setRingTonePreference(activity, (String) newValue);
330 String ringtone = getRingtoneTitleFromUri(activity, (String) newValue);
Michael Chan0b674be2012-11-20 07:16:14 -0800331 mRingtone.setSummary(ringtone == null ? "" : ringtone);
332 }
Erik8b162f12011-02-02 16:05:58 -0800333 return true;
Michael Chan0b674be2012-11-20 07:16:14 -0800334 } else if (preference == mVibrate) {
335 mVibrate.setChecked((Boolean) newValue);
336 return true;
Erik6ea265f2010-09-08 15:14:36 -0700337 } else {
Erik8b162f12011-02-02 16:05:58 -0800338 return true;
Erik3dc5e902010-09-07 11:33:07 -0700339 }
Erik8b162f12011-02-02 16:05:58 -0800340 return false;
The Android Open Source Project146de362009-03-03 19:32:18 -0800341 }
Michael Chan45efa092010-02-03 17:44:37 -0800342
Michael Chan0b674be2012-11-20 07:16:14 -0800343 public String getRingtoneTitleFromUri(Context context, String uri) {
344 if (TextUtils.isEmpty(uri)) {
345 return null;
346 }
347
348 Ringtone ring = RingtoneManager.getRingtone(getActivity(), Uri.parse(uri));
349 if (ring != null) {
350 return ring.getTitle(context);
351 }
352 return null;
353 }
354
Mason Tangcca9ecb2010-07-16 15:07:47 -0700355 /**
356 * If necessary, upgrades previous versions of preferences to the current
357 * set of keys and values.
358 * @param prefs the preferences to upgrade
359 */
360 private void migrateOldPreferences(SharedPreferences prefs) {
361 // If needed, migrate vibration setting from a previous version
Michael Chan0b674be2012-11-20 07:16:14 -0800362
363 mVibrate.setChecked(Utils.getDefaultVibrate(getActivity(), prefs));
364
Mason Tangcca9ecb2010-07-16 15:07:47 -0700365 // If needed, migrate the old alerts type settin
366 if (!prefs.contains(KEY_ALERTS) && prefs.contains(KEY_ALERTS_TYPE)) {
367 String type = prefs.getString(KEY_ALERTS_TYPE, ALERT_TYPE_STATUS_BAR);
368 if (type.equals(ALERT_TYPE_OFF)) {
369 mAlert.setChecked(false);
370 mPopup.setChecked(false);
371 mPopup.setEnabled(false);
372 } else if (type.equals(ALERT_TYPE_STATUS_BAR)) {
373 mAlert.setChecked(true);
374 mPopup.setChecked(false);
375 mPopup.setEnabled(true);
376 } else if (type.equals(ALERT_TYPE_ALERTS)) {
377 mAlert.setChecked(true);
378 mPopup.setChecked(true);
379 mPopup.setEnabled(true);
380 }
381 // clear out the old setting
382 prefs.edit().remove(KEY_ALERTS_TYPE).commit();
383 }
384 }
385
386 /**
387 * Keeps the dependent settings in sync with the parent preference, so for
388 * example, when notifications are turned off, we disable the preferences
389 * for configuring the exact notification behavior.
390 */
The Android Open Source Project146de362009-03-03 19:32:18 -0800391 private void updateChildPreferences() {
Mason Tangcca9ecb2010-07-16 15:07:47 -0700392 if (mAlert.isChecked()) {
Michael Chan0b674be2012-11-20 07:16:14 -0800393 mVibrate.setEnabled(true);
Mason Tangcca9ecb2010-07-16 15:07:47 -0700394 mRingtone.setEnabled(true);
395 mPopup.setEnabled(true);
396 } else {
Michael Chan0b674be2012-11-20 07:16:14 -0800397 mVibrate.setEnabled(false);
The Android Open Source Project146de362009-03-03 19:32:18 -0800398 mRingtone.setEnabled(false);
Mason Tangcca9ecb2010-07-16 15:07:47 -0700399 mPopup.setEnabled(false);
The Android Open Source Project146de362009-03-03 19:32:18 -0800400 }
401 }
Mason Tang3a0e67b2010-08-23 16:59:30 -0700402
403
Daisuke Miyakawad644b0d2010-10-21 15:45:12 -0700404 @Override
405 public boolean onPreferenceTreeClick(
406 PreferenceScreen preferenceScreen, Preference preference) {
407 final String key = preference.getKey();
Michael Chane98dca72012-06-16 08:22:47 -0700408 if (KEY_CLEAR_SEARCH_HISTORY.equals(key)) {
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -0700409 SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getActivity(),
RoboErik064beb92011-06-16 17:25:14 -0700410 Utils.getSearchAuthority(getActivity()),
Mason Tang3a0e67b2010-08-23 16:59:30 -0700411 CalendarRecentSuggestionsProvider.MODE);
412 suggestions.clearHistory();
Daisuke Miyakawa4b441bd2010-09-16 14:55:36 -0700413 Toast.makeText(getActivity(), R.string.search_history_cleared,
Mason Tang3a0e67b2010-08-23 16:59:30 -0700414 Toast.LENGTH_SHORT).show();
415 return true;
Michael Chane98dca72012-06-16 08:22:47 -0700416 } else {
417 return super.onPreferenceTreeClick(preferenceScreen, preference);
Mason Tang3a0e67b2010-08-23 16:59:30 -0700418 }
Mason Tang3a0e67b2010-08-23 16:59:30 -0700419 }
420
James Kung974343a2013-04-03 16:12:38 -0700421 @Override
422 public void onTimeZoneSet(TimeZoneInfo tzi) {
Sam Blitzstein00040c62013-04-11 10:13:47 -0700423 if (mTzPickerUtils == null) {
424 mTzPickerUtils = new TimeZonePickerUtils(getActivity());
425 }
426
Sam Blitzsteindd67b8d2013-04-26 19:34:29 -0700427 final CharSequence timezoneName = mTzPickerUtils.getGmtDisplayName(
Sam Blitzsteinb69ea632013-05-03 18:22:12 -0700428 getActivity(), tzi.mTzId, System.currentTimeMillis(), false);
James Kung974343a2013-04-03 16:12:38 -0700429 mHomeTZ.setSummary(timezoneName);
430 Utils.setTimeZone(getActivity(), tzi.mTzId);
431 }
The Android Open Source Project146de362009-03-03 19:32:18 -0800432}