From 38f22dbf08664b885b4cf063ea665c02edfb1c32 Mon Sep 17 00:00:00 2001 From: Paul Westbrook Date: Fri, 7 Jun 2013 17:31:15 -0700 Subject: [PATCH] Use "show pictures" code from UnifiedEmail Bug: 9320770 Change-Id: I701a93e2f09b8405a2c4bc56f7793f5abadbcd1e --- res/values/strings.xml | 7 --- res/xml/general_preferences.xml | 5 -- src/com/android/email/Preferences.java | 53 ++++--------------- .../email/activity/setup/AccountSettings.java | 15 +++++- .../activity/setup/GeneralPreferences.java | 39 ++++++++++---- .../android/email/provider/EmailProvider.java | 12 ++--- .../mail/preferences/PreferenceMigrator.java | 12 ++++- 7 files changed, 69 insertions(+), 74 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 04160e494..ddd117326 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1160,17 +1160,10 @@ as %s. Huge - - Ask to show pictures Pictures in messages won\'t be shown automatically - - \"Show pictures\" cleared. %1$d of - - diff --git a/src/com/android/email/Preferences.java b/src/com/android/email/Preferences.java index 413e596c4..a8b40e214 100644 --- a/src/com/android/email/Preferences.java +++ b/src/com/android/email/Preferences.java @@ -27,7 +27,9 @@ import com.android.mail.utils.LogUtils; import org.json.JSONArray; import org.json.JSONException; +import java.util.Collections; import java.util.HashSet; +import java.util.Set; import java.util.UUID; public class Preferences { @@ -84,13 +86,6 @@ public class Preferences { private final SharedPreferences mSharedPreferences; - /** - * A set of trusted senders for whom images and external resources should automatically be - * loaded for. - * Lazilly created. - */ - private HashSet mTrustedSenders = null; - private Preferences(Context context) { mSharedPreferences = context.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); } @@ -263,45 +258,15 @@ public class Preferences { } /** - * Determines whether or not a sender should be trusted and images should automatically be - * shown for messages by that sender. + * @deprecated This has been moved to {@link com.android.mail.preferences.MailPrefs}, and is only here for migration. */ - public boolean shouldShowImagesFor(String email) { - if (mTrustedSenders == null) { - try { - mTrustedSenders = parseEmailSet(mSharedPreferences.getString(TRUSTED_SENDERS, "")); - } catch (JSONException e) { - // Something went wrong, and the data is corrupt. Just clear it to be safe. - LogUtils.w(Logging.LOG_TAG, "Trusted sender set corrupted. Clearing"); - mSharedPreferences.edit().putString(TRUSTED_SENDERS, "").apply(); - mTrustedSenders = new HashSet(); - } + @Deprecated + public Set getWhitelistedSenderAddresses() { + try { + return parseEmailSet(mSharedPreferences.getString(TRUSTED_SENDERS, "")); + } catch (JSONException e) { + return Collections.EMPTY_SET; } - return mTrustedSenders.contains(email); - } - - /** - * Marks a sender as trusted so that images from that sender will automatically be shown. - */ - public void setSenderAsTrusted(String email) { - if (!mTrustedSenders.contains(email)) { - mTrustedSenders.add(email); - mSharedPreferences - .edit() - .putString(TRUSTED_SENDERS, packEmailSet(mTrustedSenders)) - .apply(); - } - } - - /** - * Clears all trusted senders asynchronously. - */ - public void clearTrustedSenders() { - mTrustedSenders = new HashSet(); - mSharedPreferences - .edit() - .putString(TRUSTED_SENDERS, packEmailSet(mTrustedSenders)) - .apply(); } HashSet parseEmailSet(String serialized) throws JSONException { diff --git a/src/com/android/email/activity/setup/AccountSettings.java b/src/com/android/email/activity/setup/AccountSettings.java index 73c38aca8..487f91b00 100644 --- a/src/com/android/email/activity/setup/AccountSettings.java +++ b/src/com/android/email/activity/setup/AccountSettings.java @@ -33,6 +33,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.preference.PreferenceActivity; import android.text.SpannableString; +import android.text.TextUtils; import android.text.method.LinkMovementMethod; import android.text.util.Linkify; import android.view.KeyEvent; @@ -51,8 +52,11 @@ import com.android.emailcommon.service.ServiceProxy; import com.android.emailcommon.utility.IntentUtilities; import com.android.emailcommon.utility.Utility; import com.android.mail.providers.Folder; +import com.android.mail.providers.UIProvider; import com.android.mail.providers.UIProvider.EditSettingsExtras; +import com.android.mail.ui.FeedbackEnabledActivity; import com.android.mail.utils.LogUtils; +import com.android.mail.utils.Utils; import java.util.List; @@ -71,7 +75,7 @@ import java.util.List; * sense to use a loader for the accounts list, because it would provide better support for * dealing with accounts being added/deleted and triggering the header reload. */ -public class AccountSettings extends PreferenceActivity { +public class AccountSettings extends PreferenceActivity implements FeedbackEnabledActivity { /* * Intent to open account settings for account=1 adb shell am start -a android.intent.action.EDIT \ @@ -284,6 +288,10 @@ public class AccountSettings extends PreferenceActivity { case R.id.add_new_account: onAddNewAccount(); break; + case R.id.feedback_menu_item: + final Uri feedbackUri = Utils.getValidUri(getString(R.string.email_feedback_uri)); + Utils.sendFeedback(this, feedbackUri, false /* reportingProblem */); + break; default: return super.onOptionsItemSelected(item); } @@ -883,4 +891,9 @@ public class AccountSettings extends PreferenceActivity { } } } + + @Override + public Context getActivityContext() { + return this; + } } diff --git a/src/com/android/email/activity/setup/GeneralPreferences.java b/src/com/android/email/activity/setup/GeneralPreferences.java index 6e2576b86..5954b2372 100644 --- a/src/com/android/email/activity/setup/GeneralPreferences.java +++ b/src/com/android/email/activity/setup/GeneralPreferences.java @@ -23,13 +23,15 @@ import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceScreen; -import android.widget.Toast; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import com.android.email.Preferences; import com.android.email.R; import com.android.email.provider.EmailProvider; import com.android.mail.preferences.MailPrefs; -import com.android.mail.utils.Utils; +import com.android.mail.ui.settings.ClearPictureApprovalsDialogFragment; public class GeneralPreferences extends EmailPreferenceFragment implements OnPreferenceChangeListener { @@ -39,7 +41,6 @@ public class GeneralPreferences extends EmailPreferenceFragment implements private static final String PREFERENCE_KEY_CONFIRM_DELETE = "confirm_delete"; private static final String PREFERENCE_KEY_CONFIRM_SEND = "confirm_send"; private static final String PREFERENCE_KEY_CONV_LIST_ICON = "conversation_list_icon"; - private static final String PREFERENCE_KEY_CLEAR_TRUSTED_SENDERS = "clear_trusted_senders"; private MailPrefs mMailPrefs; private Preferences mPreferences; @@ -121,12 +122,7 @@ public class GeneralPreferences extends EmailPreferenceFragment implements } mSettingsChanged = true; String key = preference.getKey(); - if (key.equals(PREFERENCE_KEY_CLEAR_TRUSTED_SENDERS)) { - mPreferences.clearTrustedSenders(); - Toast.makeText( - getActivity(), R.string.trusted_senders_cleared, Toast.LENGTH_SHORT).show(); - return true; - } else if (PREFERENCE_KEY_CONFIRM_DELETE.equals(key)) { + if (PREFERENCE_KEY_CONFIRM_DELETE.equals(key)) { mPreferences.setConfirmDelete(mConfirmDelete.isChecked()); return true; } else if (PREFERENCE_KEY_CONFIRM_SEND.equals(key)) { @@ -189,4 +185,29 @@ public class GeneralPreferences extends EmailPreferenceFragment implements mTextZoom.setSummary(summary); } } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + inflater.inflate(R.menu.general_prefs_fragment_menu, menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.clear_picture_approvals_menu_item: + clearDisplayImages(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + private void clearDisplayImages() { + final ClearPictureApprovalsDialogFragment fragment = + ClearPictureApprovalsDialogFragment.newInstance(); + fragment.show(getActivity().getFragmentManager(), + ClearPictureApprovalsDialogFragment.FRAGMENT_TAG); + } + } diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java index ef283fd77..7e0245768 100644 --- a/src/com/android/email/provider/EmailProvider.java +++ b/src/com/android/email/provider/EmailProvider.java @@ -2210,10 +2210,10 @@ public class EmailProvider extends ContentProvider { } Address[] fromList = Address.unpack(msg.mFrom); int autoShowImages = 0; - Preferences prefs = Preferences.getPreferences(context); + final MailPrefs mailPrefs = MailPrefs.get(context); for (Address sender : fromList) { - String email = sender.getAddress(); - if (prefs.shouldShowImagesFor(email)) { + final String email = sender.getAddress(); + if (mailPrefs.getDisplayImagesFromSender(email)) { autoShowImages = 1; break; } @@ -3875,10 +3875,10 @@ public class EmailProvider extends ContentProvider { } } else if (columnName.equals(UIProvider.MessageColumns.ALWAYS_SHOW_IMAGES)) { Address[] fromList = Address.unpack(message.mFrom); - Preferences prefs = Preferences.getPreferences(getContext()); + final MailPrefs mailPrefs = MailPrefs.get(getContext()); for (Address sender : fromList) { - String email = sender.getAddress(); - prefs.setSenderAsTrusted(email); + final String email = sender.getAddress(); + mailPrefs.setDisplayImagesFromSender(email, null); } } else if (columnName.equals(UIProvider.ConversationColumns.VIEWED) || columnName.equals(UIProvider.ConversationOperations.Parameters.SUPPRESS_UNDO)) { diff --git a/src/com/android/mail/preferences/PreferenceMigrator.java b/src/com/android/mail/preferences/PreferenceMigrator.java index 9b84a89ca..37d47cebd 100644 --- a/src/com/android/mail/preferences/PreferenceMigrator.java +++ b/src/com/android/mail/preferences/PreferenceMigrator.java @@ -31,6 +31,7 @@ import com.android.mail.utils.LogUtils; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Migrates Email settings to UnifiedEmail @@ -65,10 +66,10 @@ public class PreferenceMigrator extends BasePreferenceMigrator { protected static void migrate(final Context context, final int oldVersion, final int newVersion, final List accounts) { + final Preferences preferences = Preferences.getPreferences(context); + final MailPrefs mailPrefs = MailPrefs.get(context); if (oldVersion < 1) { // Move global settings - final Preferences preferences = Preferences.getPreferences(context); - final MailPrefs mailPrefs = MailPrefs.get(context); @SuppressWarnings("deprecation") final boolean hasSwipeDelete = preferences.hasSwipeDelete(); @@ -139,5 +140,12 @@ public class PreferenceMigrator extends BasePreferenceMigrator { folderPreferences.commit(); } } + + if (oldVersion < 2) { + @SuppressWarnings("deprecation") + final Set whitelistedAddresses = preferences.getWhitelistedSenderAddresses(); + mailPrefs.setSenderWhitelist(whitelistedAddresses); + } + } }