blob: 42597ce73ae38eb36193cd963c73ed58ec07c4ff [file] [log] [blame]
Makoto Onuki0f52e542010-09-09 15:34:19 -07001/*
2 * Copyright (C) 2010 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.email.activity.setup;
18
Marc Blankf4192872012-06-28 10:40:46 -070019import android.content.ContentResolver;
Makoto Onuki0f52e542010-09-09 15:34:19 -070020import android.os.Bundle;
Marc Blankf4192872012-06-28 10:40:46 -070021import android.preference.CheckBoxPreference;
Makoto Onuki0f52e542010-09-09 15:34:19 -070022import android.preference.ListPreference;
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -070023import android.preference.Preference;
24import android.preference.Preference.OnPreferenceChangeListener;
Ben Komaloe05f5112011-07-11 10:51:53 -070025import android.preference.PreferenceScreen;
Paul Westbrookccf730f2013-07-15 17:59:30 -070026import android.text.TextUtils;
Paul Westbrook38f22db2013-06-07 17:31:15 -070027import android.view.Menu;
28import android.view.MenuInflater;
29import android.view.MenuItem;
Ben Komaloe05f5112011-07-11 10:51:53 -070030
31import com.android.email.Preferences;
32import com.android.email.R;
Marc Blankf4192872012-06-28 10:40:46 -070033import com.android.email.provider.EmailProvider;
Scott Kennedyb3460822012-12-11 10:37:35 -080034import com.android.mail.preferences.MailPrefs;
Paul Westbrook38f22db2013-06-07 17:31:15 -070035import com.android.mail.ui.settings.ClearPictureApprovalsDialogFragment;
Paul Westbrook652a9072012-09-19 23:06:15 -070036
Marc Blankf4192872012-06-28 10:40:46 -070037public class GeneralPreferences extends EmailPreferenceFragment implements
38 OnPreferenceChangeListener {
Michael Chanbfbf0dd2011-09-14 01:00:24 -070039
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -070040 private static final String PREFERENCE_KEY_AUTO_ADVANCE = "auto_advance";
41 private static final String PREFERENCE_KEY_TEXT_ZOOM = "text_zoom";
Marc Blankf4192872012-06-28 10:40:46 -070042 private static final String PREFERENCE_KEY_CONFIRM_DELETE = "confirm_delete";
43 private static final String PREFERENCE_KEY_CONFIRM_SEND = "confirm_send";
Alice Yang9f1cff02013-04-11 14:16:01 -070044 private static final String PREFERENCE_KEY_CONV_LIST_ICON = "conversation_list_icon";
Mark Wei034149b2013-08-06 18:20:45 -070045 private static final String PREFERENCE_KEY_CONV_LIST_ATTACHMENT_PREVIEWS
46 = "conversation_list_attachment_previews";
Makoto Onuki0f52e542010-09-09 15:34:19 -070047
Scott Kennedyb3460822012-12-11 10:37:35 -080048 private MailPrefs mMailPrefs;
Makoto Onuki0f52e542010-09-09 15:34:19 -070049 private Preferences mPreferences;
50 private ListPreference mAutoAdvance;
Marc Blankf4192872012-06-28 10:40:46 -070051 /**
52 * TODO: remove this when we've decided for certain that an app setting is unnecessary
53 * (b/5287963)
54 */
55 @Deprecated
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -070056 private ListPreference mTextZoom;
Marc Blankf4192872012-06-28 10:40:46 -070057 private CheckBoxPreference mConfirmDelete;
58 private CheckBoxPreference mConfirmSend;
Alice Yang9f1cff02013-04-11 14:16:01 -070059 private ListPreference mConvListIcon;
Mark Wei034149b2013-08-06 18:20:45 -070060 private CheckBoxPreference mConvListAttachmentPreviews;
Marc Blankb2252982012-07-26 09:22:22 -070061 private CheckBoxPreference mSwipeDelete;
Marc Blankf4192872012-06-28 10:40:46 -070062
63 private boolean mSettingsChanged = false;
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -070064
65 CharSequence[] mSizeSummaries;
Makoto Onuki0f52e542010-09-09 15:34:19 -070066
67 @Override
68 public void onCreate(Bundle savedInstanceState) {
69 super.onCreate(savedInstanceState);
70
Scott Kennedyb3460822012-12-11 10:37:35 -080071 mMailPrefs = MailPrefs.get(getActivity());
Michael Chanbfbf0dd2011-09-14 01:00:24 -070072 getPreferenceManager().setSharedPreferencesName(Preferences.PREFERENCES_FILE);
73
Makoto Onuki0f52e542010-09-09 15:34:19 -070074 // Load the preferences from an XML resource
75 addPreferencesFromResource(R.xml.general_preferences);
Michael Chanbfbf0dd2011-09-14 01:00:24 -070076
Paul Westbrook652a9072012-09-19 23:06:15 -070077 final PreferenceScreen ps = getPreferenceScreen();
Marc Blankf4192872012-06-28 10:40:46 -070078 // Merely hide app pref for font size until we're sure it's unnecessary (b/5287963)
Paul Westbrook652a9072012-09-19 23:06:15 -070079 ps.removePreference(findPreference(PREFERENCE_KEY_TEXT_ZOOM));
Makoto Onuki0f52e542010-09-09 15:34:19 -070080 }
81
82 @Override
83 public void onResume() {
84 loadSettings();
Marc Blankf4192872012-06-28 10:40:46 -070085 mSettingsChanged = false;
Makoto Onuki0f52e542010-09-09 15:34:19 -070086 super.onResume();
87 }
88
89 @Override
Marc Blankf4192872012-06-28 10:40:46 -070090 public void onPause() {
91 super.onPause();
92 if (mSettingsChanged) {
Marc Blankb2252982012-07-26 09:22:22 -070093 // Notify the account list that we have changes
Marc Blankf4192872012-06-28 10:40:46 -070094 ContentResolver resolver = getActivity().getContentResolver();
Marc Blank97a19822012-07-26 13:45:47 -070095 resolver.notifyChange(EmailProvider.UIPROVIDER_ALL_ACCOUNTS_NOTIFIER, null);
Marc Blankf4192872012-06-28 10:40:46 -070096 }
97 }
98
99 @Override
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700100 public boolean onPreferenceChange(Preference preference, Object newValue) {
101 String key = preference.getKey();
Marc Blankf4192872012-06-28 10:40:46 -0700102 // Indicate we need to send notifications to UI
103 mSettingsChanged = true;
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700104 if (PREFERENCE_KEY_AUTO_ADVANCE.equals(key)) {
105 mPreferences.setAutoAdvanceDirection(mAutoAdvance.findIndexOfValue((String) newValue));
106 return true;
107 } else if (PREFERENCE_KEY_TEXT_ZOOM.equals(key)) {
108 mPreferences.setTextZoom(mTextZoom.findIndexOfValue((String) newValue));
109 reloadDynamicSummaries();
110 return true;
Scott Kennedyb3460822012-12-11 10:37:35 -0800111 } else if (MailPrefs.PreferenceKeys.DEFAULT_REPLY_ALL.equals(key)) {
112 mMailPrefs.setDefaultReplyAll((Boolean) newValue);
113 return true;
Alice Yang9f1cff02013-04-11 14:16:01 -0700114 } else if (PREFERENCE_KEY_CONV_LIST_ICON.equals(key)) {
Paul Westbrookccf730f2013-07-15 17:59:30 -0700115 // TODO: Fix this to use a checkbox, instead of a list
116 mMailPrefs.setShowSenderImages(
117 TextUtils.equals((String)newValue, Preferences.CONV_LIST_ICON_SENDER_IMAGE));
Alice Yang9f1cff02013-04-11 14:16:01 -0700118 return true;
Mark Wei034149b2013-08-06 18:20:45 -0700119 } else if (PREFERENCE_KEY_CONV_LIST_ATTACHMENT_PREVIEWS.equals(key)) {
120 mMailPrefs.setShowAttachmentPreviews((Boolean) newValue);
121 return true;
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700122 }
123 return false;
Makoto Onuki0f52e542010-09-09 15:34:19 -0700124 }
125
Ben Komaloe05f5112011-07-11 10:51:53 -0700126 @Override
127 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
128 if (getActivity() == null) {
129 // Guard against monkeys.
130 return false;
131 }
Marc Blankf4192872012-06-28 10:40:46 -0700132 mSettingsChanged = true;
Ben Komaloe05f5112011-07-11 10:51:53 -0700133 String key = preference.getKey();
Paul Westbrook38f22db2013-06-07 17:31:15 -0700134 if (PREFERENCE_KEY_CONFIRM_DELETE.equals(key)) {
Marc Blankf4192872012-06-28 10:40:46 -0700135 mPreferences.setConfirmDelete(mConfirmDelete.isChecked());
136 return true;
137 } else if (PREFERENCE_KEY_CONFIRM_SEND.equals(key)) {
138 mPreferences.setConfirmSend(mConfirmSend.isChecked());
139 return true;
Scott Kennedy643846a2013-04-22 18:31:26 -0700140 } else if (MailPrefs.PreferenceKeys.CONVERSATION_LIST_SWIPE.equals(key)) {
141 mMailPrefs.setConversationListSwipeEnabled(mSwipeDelete.isChecked());
Marc Blankb2252982012-07-26 09:22:22 -0700142 return true;
Ben Komaloe05f5112011-07-11 10:51:53 -0700143 }
Ben Komaloe05f5112011-07-11 10:51:53 -0700144 return false;
145 }
146
Makoto Onuki0f52e542010-09-09 15:34:19 -0700147 private void loadSettings() {
148 mPreferences = Preferences.getPreferences(getActivity());
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700149 mAutoAdvance = (ListPreference) findPreference(PREFERENCE_KEY_AUTO_ADVANCE);
Makoto Onuki0f52e542010-09-09 15:34:19 -0700150 mAutoAdvance.setValueIndex(mPreferences.getAutoAdvanceDirection());
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700151 mAutoAdvance.setOnPreferenceChangeListener(this);
152
153 mTextZoom = (ListPreference) findPreference(PREFERENCE_KEY_TEXT_ZOOM);
Marc Blankf4192872012-06-28 10:40:46 -0700154 if (mTextZoom != null) {
155 mTextZoom.setValueIndex(mPreferences.getTextZoom());
156 mTextZoom.setOnPreferenceChangeListener(this);
157 }
158
Alice Yang9f1cff02013-04-11 14:16:01 -0700159 mConvListIcon = (ListPreference) findPreference(PREFERENCE_KEY_CONV_LIST_ICON);
160 if (mConvListIcon != null) {
Paul Westbrookccf730f2013-07-15 17:59:30 -0700161 // TODO: Fix this to use a checkbox, instead of a list
162 final boolean showSenderImage = mMailPrefs.getShowSenderImages();
163 mConvListIcon.setValue(showSenderImage ?
164 Preferences.CONV_LIST_ICON_SENDER_IMAGE : Preferences.CONV_LIST_ICON_NONE);
Alice Yang9f1cff02013-04-11 14:16:01 -0700165 mConvListIcon.setOnPreferenceChangeListener(this);
166 }
167
Mark Wei034149b2013-08-06 18:20:45 -0700168 mConvListAttachmentPreviews = (CheckBoxPreference) findPreference(
169 PREFERENCE_KEY_CONV_LIST_ATTACHMENT_PREVIEWS);
170 mConvListAttachmentPreviews.setChecked(mMailPrefs.getShowAttachmentPreviews());
171 mConvListAttachmentPreviews.setOnPreferenceChangeListener(this);
172
Marc Blankf4192872012-06-28 10:40:46 -0700173 mConfirmDelete = (CheckBoxPreference) findPreference(PREFERENCE_KEY_CONFIRM_DELETE);
174 mConfirmSend = (CheckBoxPreference) findPreference(PREFERENCE_KEY_CONFIRM_SEND);
Scott Kennedy2f9c66d2013-02-14 14:34:33 -0800175 mSwipeDelete = (CheckBoxPreference)
Scott Kennedy643846a2013-04-22 18:31:26 -0700176 findPreference(MailPrefs.PreferenceKeys.CONVERSATION_LIST_SWIPE);
177 mSwipeDelete.setChecked(mMailPrefs.getIsConversationListSwipeEnabled());
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700178
Paul Westbrook88c80b72013-03-12 21:28:26 -0700179 final CheckBoxPreference replyAllPreference =
180 (CheckBoxPreference) findPreference(MailPrefs.PreferenceKeys.DEFAULT_REPLY_ALL);
Scott Kennedyc726d4f2013-04-24 18:15:19 -0700181 replyAllPreference.setChecked(mMailPrefs.getDefaultReplyAll());
182 replyAllPreference.setOnPreferenceChangeListener(this);
Scott Kennedyb3460822012-12-11 10:37:35 -0800183
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700184 reloadDynamicSummaries();
Makoto Onuki0f52e542010-09-09 15:34:19 -0700185 }
186
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700187 /**
188 * Reload any preference summaries that are updated dynamically
189 */
190 private void reloadDynamicSummaries() {
Marc Blankf4192872012-06-28 10:40:46 -0700191 if (mTextZoom != null) {
192 int textZoomIndex = mPreferences.getTextZoom();
193 // Update summary - but only load the array once
194 if (mSizeSummaries == null) {
195 mSizeSummaries = getActivity().getResources()
196 .getTextArray(R.array.general_preference_text_zoom_summary_array);
197 }
198 CharSequence summary = null;
199 if (textZoomIndex >= 0 && textZoomIndex < mSizeSummaries.length) {
200 summary = mSizeSummaries[textZoomIndex];
201 }
202 mTextZoom.setSummary(summary);
Andrew Stadlerba0b1bb2010-11-02 14:57:22 -0700203 }
Makoto Onuki0f52e542010-09-09 15:34:19 -0700204 }
Paul Westbrook38f22db2013-06-07 17:31:15 -0700205
206 @Override
207 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Yu Ping Huef0d9812013-07-30 18:30:33 -0700208 menu.clear();
Paul Westbrook38f22db2013-06-07 17:31:15 -0700209 inflater.inflate(R.menu.general_prefs_fragment_menu, menu);
210 }
211
212 @Override
213 public boolean onOptionsItemSelected(MenuItem item) {
214 switch (item.getItemId()) {
215 case R.id.clear_picture_approvals_menu_item:
216 clearDisplayImages();
217 return true;
218 }
219
220 return super.onOptionsItemSelected(item);
221 }
222
223 private void clearDisplayImages() {
224 final ClearPictureApprovalsDialogFragment fragment =
225 ClearPictureApprovalsDialogFragment.newInstance();
226 fragment.show(getActivity().getFragmentManager(),
227 ClearPictureApprovalsDialogFragment.FRAGMENT_TAG);
228 }
229
Makoto Onuki0f52e542010-09-09 15:34:19 -0700230}