blob: 2dd855d04f1df4dae8de50bf4f35e5aa75172dad [file] [log] [blame]
Erikca478672011-01-19 20:02:47 -08001/*
2 * Copyright (C) 2011 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
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080019import android.app.Activity;
20import android.app.Dialog;
21import android.app.TimePickerDialog;
Michael Chanc03aab42011-04-21 15:59:29 -070022import android.content.ComponentName;
23import android.content.Intent;
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080024import android.content.SharedPreferences;
Erikca478672011-01-19 20:02:47 -080025import android.os.Bundle;
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080026import android.preference.CheckBoxPreference;
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -080027import android.preference.ListPreference;
Michael Chanc03aab42011-04-21 15:59:29 -070028import android.preference.Preference;
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -080029import android.preference.Preference.OnPreferenceChangeListener;
Erikca478672011-01-19 20:02:47 -080030import android.preference.PreferenceFragment;
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080031import android.preference.PreferenceManager;
Michael Chanc03aab42011-04-21 15:59:29 -070032import android.preference.PreferenceScreen;
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080033import android.text.format.DateFormat;
34import android.text.format.Time;
35import android.util.Log;
36import android.widget.TimePicker;
Erikca478672011-01-19 20:02:47 -080037
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -080038public class OtherPreferences extends PreferenceFragment implements OnPreferenceChangeListener{
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080039 private static final String TAG = "CalendarOtherPreferences";
40
Erikca478672011-01-19 20:02:47 -080041 // The name of the shared preferences file. This name must be maintained for
42 // historical reasons, as it's what PreferenceManager assigned the first
43 // time the file was created.
44 static final String SHARED_PREFS_NAME = "com.android.calendar_preferences";
45
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080046 // Must be the same keys that are used in the other_preferences.xml file.
47 public static final String KEY_OTHER_COPY_DB = "preferences_copy_db";
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -080048 public static final String KEY_OTHER_QUIET_HOURS = "preferences_reminders_quiet_hours";
49 public static final String KEY_OTHER_REMINDERS_RESPONDED = "preferences_reminders_responded";
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080050 public static final String KEY_OTHER_QUIET_HOURS_START =
51 "preferences_reminders_quiet_hours_start";
52 public static final String KEY_OTHER_QUIET_HOURS_START_HOUR =
53 "preferences_reminders_quiet_hours_start_hour";
54 public static final String KEY_OTHER_QUIET_HOURS_START_MINUTE =
55 "preferences_reminders_quiet_hours_start_minute";
56 public static final String KEY_OTHER_QUIET_HOURS_END =
57 "preferences_reminders_quiet_hours_end";
58 public static final String KEY_OTHER_QUIET_HOURS_END_HOUR =
59 "preferences_reminders_quiet_hours_end_hour";
60 public static final String KEY_OTHER_QUIET_HOURS_END_MINUTE =
61 "preferences_reminders_quiet_hours_end_minute";
Erikca478672011-01-19 20:02:47 -080062 public static final String KEY_OTHER_1 = "preferences_tardis_1";
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080063
64 public static final int QUIET_HOURS_DEFAULT_START_HOUR = 22;
65 public static final int QUIET_HOURS_DEFAULT_START_MINUTE = 0;
66 public static final int QUIET_HOURS_DEFAULT_END_HOUR = 8;
67 public static final int QUIET_HOURS_DEFAULT_END_MINUTE = 0;
68
69 private static final int START_LISTENER = 1;
70 private static final int END_LISTENER = 2;
71 private static final String format24Hour = "%H:%M";
72 private static final String format12Hour = "%I:%M%P";
Erikca478672011-01-19 20:02:47 -080073
Michael Chanc03aab42011-04-21 15:59:29 -070074 private Preference mCopyDb;
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -080075 private ListPreference mSkipReminders;
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080076 private CheckBoxPreference mQuietHours;
77 private Preference mQuietHoursStart;
78 private Preference mQuietHoursEnd;
79
80 private TimePickerDialog mTimePickerDialog;
81 private TimeSetListener mQuietHoursStartListener;
82 private TimePickerDialog mQuietHoursStartDialog;
83 private TimeSetListener mQuietHoursEndListener;
84 private TimePickerDialog mQuietHoursEndDialog;
85 private boolean mIs24HourMode;
Michael Chanc03aab42011-04-21 15:59:29 -070086
Erikca478672011-01-19 20:02:47 -080087 public OtherPreferences() {
88 }
89
90 @Override
91 public void onCreate(Bundle icicle) {
92 super.onCreate(icicle);
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080093 PreferenceManager manager = getPreferenceManager();
94 manager.setSharedPreferencesName(SHARED_PREFS_NAME);
95 SharedPreferences prefs = manager.getSharedPreferences();
96
Erikca478672011-01-19 20:02:47 -080097 addPreferencesFromResource(R.xml.other_preferences);
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -080098 mCopyDb = findPreference(KEY_OTHER_COPY_DB);
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -080099 mSkipReminders = (ListPreference) findPreference(KEY_OTHER_REMINDERS_RESPONDED);
Sam Blitzsteind64b3c82013-03-23 00:06:45 -0700100 String skipPreferencesValue = null;
101 if (mSkipReminders != null) {
102 skipPreferencesValue = mSkipReminders.getValue();
103 mSkipReminders.setOnPreferenceChangeListener(this);
104 }
105 updateSkipRemindersSummary(skipPreferencesValue);
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -0800106
107 Activity activity = getActivity();
108 if (activity == null) {
109 Log.d(TAG, "Activity was null");
110 }
111 mIs24HourMode = DateFormat.is24HourFormat(activity);
112
113 mQuietHours =
114 (CheckBoxPreference) findPreference(KEY_OTHER_QUIET_HOURS);
115
116 int startHour = prefs.getInt(KEY_OTHER_QUIET_HOURS_START_HOUR,
117 QUIET_HOURS_DEFAULT_START_HOUR);
118 int startMinute = prefs.getInt(KEY_OTHER_QUIET_HOURS_START_MINUTE,
119 QUIET_HOURS_DEFAULT_START_MINUTE);
120 mQuietHoursStart = findPreference(KEY_OTHER_QUIET_HOURS_START);
121 mQuietHoursStartListener = new TimeSetListener(START_LISTENER);
122 mQuietHoursStartDialog = new TimePickerDialog(
123 activity, mQuietHoursStartListener,
124 startHour, startMinute, mIs24HourMode);
125 mQuietHoursStart.setSummary(formatTime(startHour, startMinute));
126
127 int endHour = prefs.getInt(KEY_OTHER_QUIET_HOURS_END_HOUR,
128 QUIET_HOURS_DEFAULT_END_HOUR);
129 int endMinute = prefs.getInt(KEY_OTHER_QUIET_HOURS_END_MINUTE,
130 QUIET_HOURS_DEFAULT_END_MINUTE);
131 mQuietHoursEnd = findPreference(KEY_OTHER_QUIET_HOURS_END);
132 mQuietHoursEndListener = new TimeSetListener(END_LISTENER);
133 mQuietHoursEndDialog = new TimePickerDialog(
134 activity, mQuietHoursEndListener,
135 endHour, endMinute, mIs24HourMode);
136 mQuietHoursEnd.setSummary(formatTime(endHour, endMinute));
Michael Chanc03aab42011-04-21 15:59:29 -0700137 }
138
139 @Override
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -0800140 public boolean onPreferenceChange(Preference preference, Object objValue) {
141 final String key = preference.getKey();
142
143 if (KEY_OTHER_REMINDERS_RESPONDED.equals(key)) {
144 String value = String.valueOf(objValue);
145 updateSkipRemindersSummary(value);
146 }
147
148 return true;
149 }
150
151 @Override
Michael Chanc03aab42011-04-21 15:59:29 -0700152 public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
153 if (preference == mCopyDb) {
154 Intent intent = new Intent(Intent.ACTION_MAIN);
155 intent.setComponent(new ComponentName("com.android.providers.calendar",
156 "com.android.providers.calendar.CalendarDebugActivity"));
157 startActivity(intent);
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -0800158 } else if (preference == mQuietHoursStart) {
159 if (mTimePickerDialog == null) {
160 mTimePickerDialog = mQuietHoursStartDialog;
161 mTimePickerDialog.show();
162 } else {
163 Log.v(TAG, "not null");
164 }
165 } else if (preference == mQuietHoursEnd) {
166 if (mTimePickerDialog == null) {
167 mTimePickerDialog = mQuietHoursEndDialog;
168 mTimePickerDialog.show();
169 } else {
170 Log.v(TAG, "not null");
171 }
Michael Chanc03aab42011-04-21 15:59:29 -0700172 } else {
173 return super.onPreferenceTreeClick(screen, preference);
174 }
175 return true;
Erikca478672011-01-19 20:02:47 -0800176 }
Sam Blitzstein0dfbaae2013-02-14 14:41:56 -0800177
178 private class TimeSetListener implements TimePickerDialog.OnTimeSetListener {
179 private int mListenerId;
180
181 public TimeSetListener(int listenerId) {
182 mListenerId = listenerId;
183 }
184
185 @Override
186 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
187 mTimePickerDialog = null;
188
189 SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
190 SharedPreferences.Editor editor = prefs.edit();
191
192 String summary = formatTime(hourOfDay, minute);
193 switch (mListenerId) {
194 case (START_LISTENER):
195 mQuietHoursStart.setSummary(summary);
196 editor.putInt(KEY_OTHER_QUIET_HOURS_START_HOUR, hourOfDay);
197 editor.putInt(KEY_OTHER_QUIET_HOURS_START_MINUTE, minute);
198 break;
199 case (END_LISTENER):
200 mQuietHoursEnd.setSummary(summary);
201 editor.putInt(KEY_OTHER_QUIET_HOURS_END_HOUR, hourOfDay);
202 editor.putInt(KEY_OTHER_QUIET_HOURS_END_MINUTE, minute);
203 break;
204 default:
205 Log.d(TAG, "Set time for unknown listener: "+mListenerId);
206 }
207
208 editor.commit();
209 }
210 }
211
212 /**
213 * @param hourOfDay the hour of the day (0-24)
214 * @param minute
215 * @return human-readable string formatted based on 24-hour mode.
216 */
217 private String formatTime(int hourOfDay, int minute) {
218 Time time = new Time();
219 time.hour = hourOfDay;
220 time.minute = minute;
221
222 String format = mIs24HourMode? format24Hour : format12Hour;
223 return time.format(format);
224 }
Sam Blitzstein1bc7c4b2013-02-26 09:47:52 -0800225
226 /**
227 * Update the summary for the SkipReminders preference.
228 * @param value The corresponding value of which summary to set. If null, the default summary
229 * will be set, and the value will be set accordingly too.
230 */
231 private void updateSkipRemindersSummary(String value) {
232 if (mSkipReminders != null) {
233 // Default to "declined". Must match with R.array.preferences_skip_reminders_values.
234 int index = 0;
235
236 CharSequence[] values = mSkipReminders.getEntryValues();
237 CharSequence[] entries = mSkipReminders.getEntries();
238 for(int value_i = 0; value_i < values.length; value_i++) {
239 if (values[value_i].equals(value)) {
240 index = value_i;
241 break;
242 }
243 }
244 mSkipReminders.setSummary(entries[index].toString());
245 if (value == null) {
246 // Value was not known ahead of time, so the default value will be set.
247 mSkipReminders.setValue(values[index].toString());
248 }
249 }
250 }
Sam Blitzsteind64b3c82013-03-23 00:06:45 -0700251}