Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46046f89 authored by Vincent Breitmoser's avatar Vincent Breitmoser Committed by Vincent Breitmoser
Browse files

openpgp-setup: move crypto provider to global settings

parent 19b7d449
Loading
Loading
Loading
Loading
+1 −37
Original line number Diff line number Diff line
@@ -157,7 +157,6 @@ public class Account implements BaseAccount, StoreConfig {

    public static final SortType DEFAULT_SORT_TYPE = SortType.SORT_DATE;
    public static final boolean DEFAULT_SORT_ASCENDING = false;
    public static final String NO_OPENPGP_PROVIDER = "";
    public static final long NO_OPENPGP_KEY = 0;

    private DeletePolicy mDeletePolicy = DeletePolicy.NEVER;
@@ -220,8 +219,6 @@ public class Account implements BaseAccount, StoreConfig {
    private boolean mReplyAfterQuote;
    private boolean mStripSignature;
    private boolean mSyncRemoteDeletions;
    private String mCryptoApp;
    private boolean mCryptoAppIsDeprecatedApg;
    private long mCryptoKey;
    private boolean mCryptoSupportSignOnly;
    private boolean mMarkMessageAsReadOnView;
@@ -318,7 +315,6 @@ public class Account implements BaseAccount, StoreConfig {
        mReplyAfterQuote = DEFAULT_REPLY_AFTER_QUOTE;
        mStripSignature = DEFAULT_STRIP_SIGNATURE;
        mSyncRemoteDeletions = true;
        mCryptoApp = NO_OPENPGP_PROVIDER;
        mCryptoKey = NO_OPENPGP_KEY;
        mCryptoSupportSignOnly = false;
        mAllowRemoteSearch = false;
@@ -468,8 +464,6 @@ public class Account implements BaseAccount, StoreConfig {
        mIsSignatureBeforeQuotedText = storage.getBoolean(mUuid  + ".signatureBeforeQuotedText", false);
        identities = loadIdentities(storage);

        String cryptoApp = storage.getString(mUuid + ".cryptoApp", NO_OPENPGP_PROVIDER);
        setCryptoApp(cryptoApp);
        mCryptoKey = storage.getLong(mUuid + ".cryptoKey", NO_OPENPGP_KEY);
        mCryptoSupportSignOnly = storage.getBoolean(mUuid + ".cryptoSupportSignOnly", false);
        mAllowRemoteSearch = storage.getBoolean(mUuid + ".allowRemoteSearch", false);
@@ -560,7 +554,7 @@ public class Account implements BaseAccount, StoreConfig {
        editor.remove(mUuid + ".showPicturesEnum");
        editor.remove(mUuid + ".replyAfterQuote");
        editor.remove(mUuid + ".stripSignature");
        editor.remove(mUuid + ".cryptoApp");
        editor.remove(mUuid + ".cryptoApp"); // this is no longer set, but cleans up legacy values
        editor.remove(mUuid + ".cryptoAutoSignature");
        editor.remove(mUuid + ".cryptoAutoEncrypt");
        editor.remove(mUuid + ".cryptoApp");
@@ -737,7 +731,6 @@ public class Account implements BaseAccount, StoreConfig {
        editor.putBoolean(mUuid + ".defaultQuotedTextShown", mDefaultQuotedTextShown);
        editor.putBoolean(mUuid + ".replyAfterQuote", mReplyAfterQuote);
        editor.putBoolean(mUuid + ".stripSignature", mStripSignature);
        editor.putString(mUuid + ".cryptoApp", mCryptoApp);
        editor.putLong(mUuid + ".cryptoKey", mCryptoKey);
        editor.putBoolean(mUuid + ".cryptoSupportSignOnly", mCryptoSupportSignOnly);
        editor.putBoolean(mUuid + ".allowRemoteSearch", mAllowRemoteSearch);
@@ -1603,24 +1596,6 @@ public class Account implements BaseAccount, StoreConfig {
        mStripSignature = stripSignature;
    }

    public String getCryptoApp() {
        return mCryptoApp;
    }

    public void setCryptoApp(String cryptoApp) {
        boolean isApgCryptoProvider = "apg".equals(cryptoApp);
        if (cryptoApp == null || isApgCryptoProvider) {
            mCryptoAppIsDeprecatedApg = isApgCryptoProvider;
            mCryptoApp = NO_OPENPGP_PROVIDER;
        } else {
            mCryptoApp = cryptoApp;
        }
    }

    public boolean isCryptoAppDeprecatedApg() {
        return mCryptoAppIsDeprecatedApg;
    }

    public long getCryptoKey() {
        return mCryptoKey;
    }
@@ -1677,17 +1652,6 @@ public class Account implements BaseAccount, StoreConfig {
        lastSelectedFolderName = folderName;
    }

    public synchronized String getOpenPgpProvider() {
        if (!isOpenPgpProviderConfigured()) {
            return null;
        }
        return getCryptoApp();
    }

    public synchronized boolean isOpenPgpProviderConfigured() {
        return !NO_OPENPGP_PROVIDER.equals(getCryptoApp());
    }

    public synchronized NotificationSetting getNotificationSetting() {
        return mNotificationSetting;
    }
+19 −0
Original line number Diff line number Diff line
@@ -242,6 +242,8 @@ public class K9 extends Application {
    private static boolean mHideUserAgent = false;
    private static boolean mHideTimeZone = false;

    private static String sCryptoProvider = "";

    private static SortType mSortType;
    private static Map<SortType, Boolean> mSortAscending = new HashMap<SortType, Boolean>();

@@ -311,6 +313,7 @@ public class K9 extends Application {

    public static final int BOOT_RECEIVER_WAKE_LOCK_TIMEOUT = 60000;

    public static final String NO_CRYPTO_PROVIDER = "";

    public static class Intents {

@@ -465,6 +468,8 @@ public class K9 extends Application {
        editor.putBoolean("hideUserAgent", mHideUserAgent);
        editor.putBoolean("hideTimeZone", mHideTimeZone);

        editor.putString("cryptoProvider", sCryptoProvider);

        editor.putString("language", language);
        editor.putInt("theme", theme.ordinal());
        editor.putInt("messageViewTheme", messageViewTheme.ordinal());
@@ -683,6 +688,8 @@ public class K9 extends Application {
        mHideUserAgent = storage.getBoolean("hideUserAgent", false);
        mHideTimeZone = storage.getBoolean("hideTimeZone", false);

        sCryptoProvider = storage.getString("cryptoProvider", NO_CRYPTO_PROVIDER);

        mConfirmDelete = storage.getBoolean("confirmDelete", false);
        mConfirmDiscardMessage = storage.getBoolean("confirmDiscardMessage", true);
        mConfirmDeleteStarred = storage.getBoolean("confirmDeleteStarred", false);
@@ -1228,6 +1235,18 @@ public class K9 extends Application {
        mHideTimeZone = state;
    }

    public static boolean isCryptoProviderConfigured() {
        return !NO_CRYPTO_PROVIDER.equals(sCryptoProvider);
    }

    public static String getCryptoProvider() {
        return sCryptoProvider;
    }

    public static void setCryptoProvider(String cryptoProvider) {
        sCryptoProvider = cryptoProvider;
    }

    public static String getAttachmentDefaultPath() {
        return mAttachmentDefaultPath;
    }
+2 −2
Original line number Diff line number Diff line
@@ -202,7 +202,7 @@ public class MessageLoaderHelper {
            return;
        }

        if (account.isOpenPgpProviderConfigured()) {
        if (K9.isCryptoProviderConfigured()) {
            startOrResumeCryptoOperation();
            return;
        }
@@ -262,7 +262,7 @@ public class MessageLoaderHelper {
        if (retainCryptoHelperFragment.hasData()) {
            messageCryptoHelper = retainCryptoHelperFragment.getData();
        } else {
            messageCryptoHelper = new MessageCryptoHelper(context, account.getOpenPgpProvider());
            messageCryptoHelper = new MessageCryptoHelper(context);
            retainCryptoHelperFragment.setData(messageCryptoHelper);
        }
        messageCryptoHelper.asyncStartOrResumeProcessingMessage(
+8 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;

@@ -270,8 +271,8 @@ public class RecipientPresenter implements PermissionPingCallback {
            updateRecipientExpanderVisibility();
        }

        String cryptoProvider = account.getOpenPgpProvider();
        setCryptoProvider(cryptoProvider);
        // This does not strictly depend on the account, but this is as good a point to set this as any
        setupCryptoProvider();
    }

    @SuppressWarnings("UnusedParameters")
@@ -609,7 +610,11 @@ public class RecipientPresenter implements PermissionPingCallback {
        }
    }

    private void setCryptoProvider(String cryptoProvider) {
    private void setupCryptoProvider() {
        String cryptoProvider = K9.getCryptoProvider();
        if (TextUtils.isEmpty(cryptoProvider)) {
            cryptoProvider = null;
        }

        boolean providerIsBound = openPgpServiceConnection != null && openPgpServiceConnection.isBound();
        boolean isSameProvider = cryptoProvider != null && cryptoProvider.equals(this.cryptoProvider);
+19 −47
Original line number Diff line number Diff line
@@ -9,8 +9,6 @@ import java.util.Map;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
@@ -21,9 +19,11 @@ import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceScreen;
import android.preference.RingtonePreference;
import android.util.Log;
import android.widget.Toast;

import com.fsck.k9.Account;
import com.fsck.k9.Account.DeletePolicy;
@@ -48,10 +48,7 @@ import com.fsck.k9.mail.Store;
import com.fsck.k9.mailstore.LocalFolder;
import com.fsck.k9.mailstore.StorageManager;
import com.fsck.k9.service.MailService;
import com.fsck.k9.ui.dialog.ApgDeprecationWarningDialog;
import org.openintents.openpgp.util.OpenPgpAppPreference;
import org.openintents.openpgp.util.OpenPgpKeyPreference;
import org.openintents.openpgp.util.OpenPgpUtils;


public class AccountSettings extends K9PreferenceActivity {
@@ -59,7 +56,6 @@ public class AccountSettings extends K9PreferenceActivity {

    private static final int DIALOG_COLOR_PICKER_ACCOUNT = 1;
    private static final int DIALOG_COLOR_PICKER_LED = 2;
    private static final int DIALOG_APG_DEPRECATION_WARNING = 3;

    private static final int SELECT_AUTO_EXPAND_FOLDER = 1;

@@ -116,7 +112,6 @@ public class AccountSettings extends K9PreferenceActivity {
    private static final String PREFERENCE_STRIP_SIGNATURE = "strip_signature";
    private static final String PREFERENCE_SYNC_REMOTE_DELETIONS = "account_sync_remote_deletetions";
    private static final String PREFERENCE_CRYPTO = "crypto";
    private static final String PREFERENCE_CRYPTO_APP = "crypto_app";
    private static final String PREFERENCE_CRYPTO_KEY = "crypto_key";
    private static final String PREFERENCE_CRYPTO_SUPPORT_SIGN_ONLY = "crypto_support_sign_only";
    private static final String PREFERENCE_CLOUD_SEARCH_ENABLED = "remote_search_enabled";
@@ -131,7 +126,6 @@ public class AccountSettings extends K9PreferenceActivity {
    private static final String PREFERENCE_SPAM_FOLDER = "spam_folder";
    private static final String PREFERENCE_TRASH_FOLDER = "trash_folder";
    private static final String PREFERENCE_ALWAYS_SHOW_CC_BCC = "always_show_cc_bcc";
    public static final String APG_PROVIDER_PLACEHOLDER = "apg-placeholder";


    private Account mAccount;
@@ -185,7 +179,6 @@ public class AccountSettings extends K9PreferenceActivity {
    private ListPreference mIdleRefreshPeriod;
    private ListPreference mMaxPushFolders;
    private boolean mHasCrypto = false;
    private OpenPgpAppPreference mCryptoApp;
    private OpenPgpKeyPreference mCryptoKey;
    private CheckBoxPreference mCryptoSupportSignOnly;

@@ -701,34 +694,14 @@ public class AccountSettings extends K9PreferenceActivity {
            }
        });

        mHasCrypto = OpenPgpUtils.isAvailable(this);
        mHasCrypto = K9.isCryptoProviderConfigured();
        PreferenceScreen cryptoMenu = (PreferenceScreen) findPreference(PREFERENCE_CRYPTO);
        if (mHasCrypto) {
            mCryptoApp = (OpenPgpAppPreference) findPreference(PREFERENCE_CRYPTO_APP);
            mCryptoKey = (OpenPgpKeyPreference) findPreference(PREFERENCE_CRYPTO_KEY);
            mCryptoSupportSignOnly = (CheckBoxPreference) findPreference(PREFERENCE_CRYPTO_SUPPORT_SIGN_ONLY);

            mCryptoApp.setValue(String.valueOf(mAccount.getCryptoApp()));
            if (OpenPgpAppPreference.isApgInstalled(getApplicationContext())) {
                mCryptoApp.addLegacyProvider(APG_PROVIDER_PLACEHOLDER, getString(R.string.apg), R.drawable.ic_apg_small);
            }
            mCryptoApp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                public boolean onPreferenceChange(Preference preference, Object newValue) {
                    String value = newValue.toString();
                    if (APG_PROVIDER_PLACEHOLDER.equals(value)) {
                        mCryptoApp.setValue("");
                        mCryptoKey.setOpenPgpProvider("");
                        showDialog(DIALOG_APG_DEPRECATION_WARNING);
                    } else {
                        mCryptoApp.setValue(value);
                        mCryptoKey.setOpenPgpProvider(value);
                    }

                    return false;
                }
            });

            mCryptoKey.setValue(mAccount.getCryptoKey());
            mCryptoKey.setOpenPgpProvider(mCryptoApp.getValue());
            mCryptoKey.setOpenPgpProvider(K9.getCryptoProvider());
            // TODO: other identities?
            mCryptoKey.setDefaultUserId(OpenPgpApiHelper.buildUserId(mAccount.getIdentity(0)));
            mCryptoKey.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@@ -740,10 +713,21 @@ public class AccountSettings extends K9PreferenceActivity {
            });

            mCryptoSupportSignOnly.setChecked(mAccount.getCryptoSupportSignOnly());
            cryptoMenu.setOnPreferenceClickListener(null);
        } else {
            final Preference mCryptoMenu = findPreference(PREFERENCE_CRYPTO);
            mCryptoMenu.setEnabled(false);
            mCryptoMenu.setSummary(R.string.account_settings_no_openpgp_provider_installed);
            cryptoMenu.setSummary(R.string.account_settings_no_openpgp_provider_configured);
            cryptoMenu.setOnPreferenceClickListener(new OnPreferenceClickListener() {
                @Override
                public boolean onPreferenceClick(Preference preference) {
                    Dialog dialog = ((PreferenceScreen) preference).getDialog();
                    if (dialog != null) {
                        dialog.dismiss();
                    }
                    Toast.makeText(AccountSettings.this,
                            R.string.no_crypto_provider_see_global, Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
        }
    }

@@ -806,11 +790,9 @@ public class AccountSettings extends K9PreferenceActivity {
        mAccount.setStripSignature(mStripSignature.isChecked());
        mAccount.setLocalStorageProviderId(mLocalStorageProvider.getValue());
        if (mHasCrypto) {
            mAccount.setCryptoApp(mCryptoApp.getValue());
            mAccount.setCryptoKey(mCryptoKey.getValue());
            mAccount.setCryptoSupportSignOnly(mCryptoSupportSignOnly.isChecked());
        } else {
            mAccount.setCryptoApp(Account.NO_OPENPGP_PROVIDER);
            mAccount.setCryptoKey(Account.NO_OPENPGP_KEY);
            mAccount.setCryptoSupportSignOnly(false);
        }
@@ -953,16 +935,6 @@ public class AccountSettings extends K9PreferenceActivity {

                break;
            }
            case DIALOG_APG_DEPRECATION_WARNING: {
                dialog = new ApgDeprecationWarningDialog(this);
                dialog.setOnCancelListener(new OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface dialog) {
                        mCryptoApp.show();
                    }
                });
                break;
            }
        }

        return dialog;
Loading