Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 1 | /* |
| 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 | |
| 17 | package com.android.email.activity.setup; |
| 18 | |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 19 | import android.content.ContentResolver; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 20 | import android.os.Bundle; |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 21 | import android.preference.CheckBoxPreference; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 22 | import android.preference.ListPreference; |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 23 | import android.preference.Preference; |
| 24 | import android.preference.Preference.OnPreferenceChangeListener; |
Ben Komalo | e05f511 | 2011-07-11 10:51:53 -0700 | [diff] [blame] | 25 | import android.preference.PreferenceScreen; |
Paul Westbrook | ccf730f | 2013-07-15 17:59:30 -0700 | [diff] [blame] | 26 | import android.text.TextUtils; |
Paul Westbrook | 38f22db | 2013-06-07 17:31:15 -0700 | [diff] [blame] | 27 | import android.view.Menu; |
| 28 | import android.view.MenuInflater; |
| 29 | import android.view.MenuItem; |
Ben Komalo | e05f511 | 2011-07-11 10:51:53 -0700 | [diff] [blame] | 30 | |
| 31 | import com.android.email.Preferences; |
| 32 | import com.android.email.R; |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 33 | import com.android.email.provider.EmailProvider; |
Scott Kennedy | b346082 | 2012-12-11 10:37:35 -0800 | [diff] [blame] | 34 | import com.android.mail.preferences.MailPrefs; |
Paul Westbrook | 38f22db | 2013-06-07 17:31:15 -0700 | [diff] [blame] | 35 | import com.android.mail.ui.settings.ClearPictureApprovalsDialogFragment; |
Paul Westbrook | 652a907 | 2012-09-19 23:06:15 -0700 | [diff] [blame] | 36 | |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 37 | public class GeneralPreferences extends EmailPreferenceFragment implements |
| 38 | OnPreferenceChangeListener { |
Michael Chan | bfbf0dd | 2011-09-14 01:00:24 -0700 | [diff] [blame] | 39 | |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 40 | private static final String PREFERENCE_KEY_AUTO_ADVANCE = "auto_advance"; |
| 41 | private static final String PREFERENCE_KEY_TEXT_ZOOM = "text_zoom"; |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 42 | private static final String PREFERENCE_KEY_CONFIRM_DELETE = "confirm_delete"; |
| 43 | private static final String PREFERENCE_KEY_CONFIRM_SEND = "confirm_send"; |
Alice Yang | 9f1cff0 | 2013-04-11 14:16:01 -0700 | [diff] [blame] | 44 | private static final String PREFERENCE_KEY_CONV_LIST_ICON = "conversation_list_icon"; |
Mark Wei | 034149b | 2013-08-06 18:20:45 -0700 | [diff] [blame^] | 45 | private static final String PREFERENCE_KEY_CONV_LIST_ATTACHMENT_PREVIEWS |
| 46 | = "conversation_list_attachment_previews"; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 47 | |
Scott Kennedy | b346082 | 2012-12-11 10:37:35 -0800 | [diff] [blame] | 48 | private MailPrefs mMailPrefs; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 49 | private Preferences mPreferences; |
| 50 | private ListPreference mAutoAdvance; |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 51 | /** |
| 52 | * TODO: remove this when we've decided for certain that an app setting is unnecessary |
| 53 | * (b/5287963) |
| 54 | */ |
| 55 | @Deprecated |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 56 | private ListPreference mTextZoom; |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 57 | private CheckBoxPreference mConfirmDelete; |
| 58 | private CheckBoxPreference mConfirmSend; |
Alice Yang | 9f1cff0 | 2013-04-11 14:16:01 -0700 | [diff] [blame] | 59 | private ListPreference mConvListIcon; |
Mark Wei | 034149b | 2013-08-06 18:20:45 -0700 | [diff] [blame^] | 60 | private CheckBoxPreference mConvListAttachmentPreviews; |
Marc Blank | b225298 | 2012-07-26 09:22:22 -0700 | [diff] [blame] | 61 | private CheckBoxPreference mSwipeDelete; |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 62 | |
| 63 | private boolean mSettingsChanged = false; |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 64 | |
| 65 | CharSequence[] mSizeSummaries; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 66 | |
| 67 | @Override |
| 68 | public void onCreate(Bundle savedInstanceState) { |
| 69 | super.onCreate(savedInstanceState); |
| 70 | |
Scott Kennedy | b346082 | 2012-12-11 10:37:35 -0800 | [diff] [blame] | 71 | mMailPrefs = MailPrefs.get(getActivity()); |
Michael Chan | bfbf0dd | 2011-09-14 01:00:24 -0700 | [diff] [blame] | 72 | getPreferenceManager().setSharedPreferencesName(Preferences.PREFERENCES_FILE); |
| 73 | |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 74 | // Load the preferences from an XML resource |
| 75 | addPreferencesFromResource(R.xml.general_preferences); |
Michael Chan | bfbf0dd | 2011-09-14 01:00:24 -0700 | [diff] [blame] | 76 | |
Paul Westbrook | 652a907 | 2012-09-19 23:06:15 -0700 | [diff] [blame] | 77 | final PreferenceScreen ps = getPreferenceScreen(); |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 78 | // Merely hide app pref for font size until we're sure it's unnecessary (b/5287963) |
Paul Westbrook | 652a907 | 2012-09-19 23:06:15 -0700 | [diff] [blame] | 79 | ps.removePreference(findPreference(PREFERENCE_KEY_TEXT_ZOOM)); |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 80 | } |
| 81 | |
| 82 | @Override |
| 83 | public void onResume() { |
| 84 | loadSettings(); |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 85 | mSettingsChanged = false; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 86 | super.onResume(); |
| 87 | } |
| 88 | |
| 89 | @Override |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 90 | public void onPause() { |
| 91 | super.onPause(); |
| 92 | if (mSettingsChanged) { |
Marc Blank | b225298 | 2012-07-26 09:22:22 -0700 | [diff] [blame] | 93 | // Notify the account list that we have changes |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 94 | ContentResolver resolver = getActivity().getContentResolver(); |
Marc Blank | 97a1982 | 2012-07-26 13:45:47 -0700 | [diff] [blame] | 95 | resolver.notifyChange(EmailProvider.UIPROVIDER_ALL_ACCOUNTS_NOTIFIER, null); |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 96 | } |
| 97 | } |
| 98 | |
| 99 | @Override |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 100 | public boolean onPreferenceChange(Preference preference, Object newValue) { |
| 101 | String key = preference.getKey(); |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 102 | // Indicate we need to send notifications to UI |
| 103 | mSettingsChanged = true; |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 104 | 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 Kennedy | b346082 | 2012-12-11 10:37:35 -0800 | [diff] [blame] | 111 | } else if (MailPrefs.PreferenceKeys.DEFAULT_REPLY_ALL.equals(key)) { |
| 112 | mMailPrefs.setDefaultReplyAll((Boolean) newValue); |
| 113 | return true; |
Alice Yang | 9f1cff0 | 2013-04-11 14:16:01 -0700 | [diff] [blame] | 114 | } else if (PREFERENCE_KEY_CONV_LIST_ICON.equals(key)) { |
Paul Westbrook | ccf730f | 2013-07-15 17:59:30 -0700 | [diff] [blame] | 115 | // 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 Yang | 9f1cff0 | 2013-04-11 14:16:01 -0700 | [diff] [blame] | 118 | return true; |
Mark Wei | 034149b | 2013-08-06 18:20:45 -0700 | [diff] [blame^] | 119 | } else if (PREFERENCE_KEY_CONV_LIST_ATTACHMENT_PREVIEWS.equals(key)) { |
| 120 | mMailPrefs.setShowAttachmentPreviews((Boolean) newValue); |
| 121 | return true; |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 122 | } |
| 123 | return false; |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 124 | } |
| 125 | |
Ben Komalo | e05f511 | 2011-07-11 10:51:53 -0700 | [diff] [blame] | 126 | @Override |
| 127 | public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { |
| 128 | if (getActivity() == null) { |
| 129 | // Guard against monkeys. |
| 130 | return false; |
| 131 | } |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 132 | mSettingsChanged = true; |
Ben Komalo | e05f511 | 2011-07-11 10:51:53 -0700 | [diff] [blame] | 133 | String key = preference.getKey(); |
Paul Westbrook | 38f22db | 2013-06-07 17:31:15 -0700 | [diff] [blame] | 134 | if (PREFERENCE_KEY_CONFIRM_DELETE.equals(key)) { |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 135 | 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 Kennedy | 643846a | 2013-04-22 18:31:26 -0700 | [diff] [blame] | 140 | } else if (MailPrefs.PreferenceKeys.CONVERSATION_LIST_SWIPE.equals(key)) { |
| 141 | mMailPrefs.setConversationListSwipeEnabled(mSwipeDelete.isChecked()); |
Marc Blank | b225298 | 2012-07-26 09:22:22 -0700 | [diff] [blame] | 142 | return true; |
Ben Komalo | e05f511 | 2011-07-11 10:51:53 -0700 | [diff] [blame] | 143 | } |
Ben Komalo | e05f511 | 2011-07-11 10:51:53 -0700 | [diff] [blame] | 144 | return false; |
| 145 | } |
| 146 | |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 147 | private void loadSettings() { |
| 148 | mPreferences = Preferences.getPreferences(getActivity()); |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 149 | mAutoAdvance = (ListPreference) findPreference(PREFERENCE_KEY_AUTO_ADVANCE); |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 150 | mAutoAdvance.setValueIndex(mPreferences.getAutoAdvanceDirection()); |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 151 | mAutoAdvance.setOnPreferenceChangeListener(this); |
| 152 | |
| 153 | mTextZoom = (ListPreference) findPreference(PREFERENCE_KEY_TEXT_ZOOM); |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 154 | if (mTextZoom != null) { |
| 155 | mTextZoom.setValueIndex(mPreferences.getTextZoom()); |
| 156 | mTextZoom.setOnPreferenceChangeListener(this); |
| 157 | } |
| 158 | |
Alice Yang | 9f1cff0 | 2013-04-11 14:16:01 -0700 | [diff] [blame] | 159 | mConvListIcon = (ListPreference) findPreference(PREFERENCE_KEY_CONV_LIST_ICON); |
| 160 | if (mConvListIcon != null) { |
Paul Westbrook | ccf730f | 2013-07-15 17:59:30 -0700 | [diff] [blame] | 161 | // 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 Yang | 9f1cff0 | 2013-04-11 14:16:01 -0700 | [diff] [blame] | 165 | mConvListIcon.setOnPreferenceChangeListener(this); |
| 166 | } |
| 167 | |
Mark Wei | 034149b | 2013-08-06 18:20:45 -0700 | [diff] [blame^] | 168 | mConvListAttachmentPreviews = (CheckBoxPreference) findPreference( |
| 169 | PREFERENCE_KEY_CONV_LIST_ATTACHMENT_PREVIEWS); |
| 170 | mConvListAttachmentPreviews.setChecked(mMailPrefs.getShowAttachmentPreviews()); |
| 171 | mConvListAttachmentPreviews.setOnPreferenceChangeListener(this); |
| 172 | |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 173 | mConfirmDelete = (CheckBoxPreference) findPreference(PREFERENCE_KEY_CONFIRM_DELETE); |
| 174 | mConfirmSend = (CheckBoxPreference) findPreference(PREFERENCE_KEY_CONFIRM_SEND); |
Scott Kennedy | 2f9c66d | 2013-02-14 14:34:33 -0800 | [diff] [blame] | 175 | mSwipeDelete = (CheckBoxPreference) |
Scott Kennedy | 643846a | 2013-04-22 18:31:26 -0700 | [diff] [blame] | 176 | findPreference(MailPrefs.PreferenceKeys.CONVERSATION_LIST_SWIPE); |
| 177 | mSwipeDelete.setChecked(mMailPrefs.getIsConversationListSwipeEnabled()); |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 178 | |
Paul Westbrook | 88c80b7 | 2013-03-12 21:28:26 -0700 | [diff] [blame] | 179 | final CheckBoxPreference replyAllPreference = |
| 180 | (CheckBoxPreference) findPreference(MailPrefs.PreferenceKeys.DEFAULT_REPLY_ALL); |
Scott Kennedy | c726d4f | 2013-04-24 18:15:19 -0700 | [diff] [blame] | 181 | replyAllPreference.setChecked(mMailPrefs.getDefaultReplyAll()); |
| 182 | replyAllPreference.setOnPreferenceChangeListener(this); |
Scott Kennedy | b346082 | 2012-12-11 10:37:35 -0800 | [diff] [blame] | 183 | |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 184 | reloadDynamicSummaries(); |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 185 | } |
| 186 | |
Andrew Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 187 | /** |
| 188 | * Reload any preference summaries that are updated dynamically |
| 189 | */ |
| 190 | private void reloadDynamicSummaries() { |
Marc Blank | f419287 | 2012-06-28 10:40:46 -0700 | [diff] [blame] | 191 | 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 Stadler | ba0b1bb | 2010-11-02 14:57:22 -0700 | [diff] [blame] | 203 | } |
Makoto Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 204 | } |
Paul Westbrook | 38f22db | 2013-06-07 17:31:15 -0700 | [diff] [blame] | 205 | |
| 206 | @Override |
| 207 | public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { |
Yu Ping Hu | ef0d981 | 2013-07-30 18:30:33 -0700 | [diff] [blame] | 208 | menu.clear(); |
Paul Westbrook | 38f22db | 2013-06-07 17:31:15 -0700 | [diff] [blame] | 209 | 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 Onuki | 0f52e54 | 2010-09-09 15:34:19 -0700 | [diff] [blame] | 230 | } |