From 285184d7c6374ef52563823d7aee175995d31147 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Mon, 5 Mar 2018 13:54:31 +0100 Subject: [PATCH 1/2] add option to toggle self-encrypt for files --- .../keychain/Constants.java | 1 + .../keychain/ui/EncryptFilesFragment.java | 38 ++++++++++++++++++- .../keychain/util/Preferences.java | 10 +++++ .../main/res/menu/encrypt_file_fragment.xml | 6 +++ OpenKeychain/src/main/res/values/strings.xml | 3 ++ 5 files changed, 57 insertions(+), 1 deletion(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index 745543924..a7370db03 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -129,6 +129,7 @@ public final class Constants { public static final String USE_NUMKEYPAD_FOR_SECURITY_TOKEN_PIN = "useNumKeypadForYubikeyPin"; public static final String ENCRYPT_FILENAMES = "encryptFilenames"; public static final String FILE_USE_COMPRESSION = "useFileCompression"; + public static final String FILE_SELF_ENCRYPT = "fileSelfEncrypt"; public static final String TEXT_USE_COMPRESSION = "useTextCompression"; public static final String USE_ARMOR = "useArmor"; // proxy settings diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java index d7bdc9a66..60976b9c0 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptFilesFragment.java @@ -87,6 +87,7 @@ public class EncryptFilesFragment public static final String ARG_DELETE_AFTER_ENCRYPT = "delete_after_encrypt"; public static final String ARG_ENCRYPT_FILENAMES = "encrypt_filenames"; public static final String ARG_USE_COMPRESSION = "use_compression"; + public static final String ARG_SELF_ENCRYPT = "self_encrypt"; public static final String ARG_USE_ASCII_ARMOR = "use_ascii_armor"; public static final String ARG_URIS = "uris"; @@ -96,6 +97,7 @@ public class EncryptFilesFragment private boolean mUseArmor; private boolean mUseCompression; + private boolean mSelfEncrypt; private boolean mDeleteAfterEncrypt; private boolean mEncryptFilenames; private boolean mHiddenRecipients = false; @@ -176,6 +178,7 @@ public class EncryptFilesFragment outState.putBoolean(ARG_DELETE_AFTER_ENCRYPT, mDeleteAfterEncrypt); outState.putBoolean(ARG_USE_ASCII_ARMOR, mUseArmor); outState.putBoolean(ARG_USE_COMPRESSION, mUseCompression); + outState.putBoolean(ARG_SELF_ENCRYPT, mSelfEncrypt); outState.putBoolean(ARG_ENCRYPT_FILENAMES, mEncryptFilenames); outState.putParcelableArrayList(ARG_URIS, mFilesAdapter.getAsArrayList()); @@ -202,6 +205,12 @@ public class EncryptFilesFragment mUseCompression = prefs.getFilesUseCompression(); } + if (args.containsKey(ARG_SELF_ENCRYPT)) { + mSelfEncrypt = args.getBoolean(ARG_SELF_ENCRYPT, true); + } else { + mSelfEncrypt = prefs.getFilesEncryptToSelf(); + } + if (args.containsKey(ARG_ENCRYPT_FILENAMES)) { mEncryptFilenames = args.getBoolean(ARG_ENCRYPT_FILENAMES, false); } else { @@ -335,6 +344,7 @@ public class EncryptFilesFragment menu.findItem(R.id.check_delete_after_encrypt).setChecked(mDeleteAfterEncrypt); menu.findItem(R.id.check_use_armor).setChecked(mUseArmor); menu.findItem(R.id.check_enable_compression).setChecked(mUseCompression); + menu.findItem(R.id.check_enable_self_encrypt).setChecked(mSelfEncrypt); menu.findItem(R.id.check_encrypt_filenames).setChecked(mEncryptFilenames); } @@ -372,6 +382,10 @@ public class EncryptFilesFragment toggleEnableCompression(item, !item.isChecked()); break; } + case R.id.check_enable_self_encrypt: { + toggleEnableSelfEncrypt(item, !item.isChecked()); + break; + } case R.id.check_encrypt_filenames: { toggleEncryptFilenamesCheck(item, !item.isChecked()); break; @@ -421,6 +435,28 @@ public class EncryptFilesFragment } + public void toggleEnableSelfEncrypt(MenuItem item, final boolean selfEncrypt) { + + mSelfEncrypt = selfEncrypt; + item.setChecked(selfEncrypt); + + Notify.create(getActivity(), selfEncrypt + ? R.string.snack_self_encrypt_on + : R.string.snack_self_encrypt_off, + Notify.LENGTH_LONG, Style.OK, new ActionListener() { + @Override + public void onAction() { + Preferences.getPreferences(getActivity()).setFilesEncryptToSelf(selfEncrypt); + Notify.create(getActivity(), selfEncrypt + ? R.string.snack_self_encrypt_on + : R.string.snack_self_encrypt_off, + Notify.LENGTH_SHORT, Style.OK, null, R.string.btn_saved) + .show(EncryptFilesFragment.this, false); + } + }, R.string.btn_save_default).show(this); + + } + public void toggleEnableCompression(MenuItem item, final boolean compress) { mUseCompression = compress; @@ -648,7 +684,7 @@ public class EncryptFilesFragment data.setEncryptionMasterKeyIds(encryptionKeyIds); data.setSignatureMasterKeyId(signingKeyId); - if (signingKeyId != Constants.key.none) { + if (signingKeyId != Constants.key.none && mSelfEncrypt) { data.setAdditionalEncryptId(signingKeyId); } } else { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java index c5ad1ba26..826fe3736 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java @@ -197,6 +197,16 @@ public class Preferences { return mSharedPreferences.getBoolean(Pref.FILE_USE_COMPRESSION, true); } + public void setFilesEncryptToSelf(boolean selfEncrypt) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putBoolean(Pref.FILE_SELF_ENCRYPT, selfEncrypt); + editor.commit(); + } + + public boolean getFilesEncryptToSelf() { + return mSharedPreferences.getBoolean(Pref.FILE_SELF_ENCRYPT, true); + } + public void setTextUseCompression(boolean compress) { SharedPreferences.Editor editor = mSharedPreferences.edit(); editor.putBoolean(Pref.TEXT_USE_COMPRESSION, compress); diff --git a/OpenKeychain/src/main/res/menu/encrypt_file_fragment.xml b/OpenKeychain/src/main/res/menu/encrypt_file_fragment.xml index e719487a7..f9e19d9f5 100644 --- a/OpenKeychain/src/main/res/menu/encrypt_file_fragment.xml +++ b/OpenKeychain/src/main/res/menu/encrypt_file_fragment.xml @@ -35,6 +35,12 @@ android:orderInCategory="1" android:checkable="true" /> + + "Selected authority" "preferred" "Enable compression" + "Encrypt to signer" "Encrypt filenames" "Hide recipients" SmartPGP: Verify certificates @@ -1603,6 +1604,8 @@ "Output encoded as Binary." "Compression enabled." "Compression disabled." + "Encrypt to signer enabled." + "Encrypt to signer disabled." "Error loading keys!" "(error, empty log)" "Could not read input to decrypt!" From 3fdc4059b5a219a520f2eb97f760049819f1ca5c Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Mon, 5 Mar 2018 14:02:48 +0100 Subject: [PATCH 2/2] add option to toggle self-encrypt for text --- .../keychain/Constants.java | 1 + .../keychain/ui/EncryptTextFragment.java | 39 ++++++++++++++++++- .../keychain/util/Preferences.java | 10 +++++ .../main/res/menu/encrypt_text_fragment.xml | 6 +++ 4 files changed, 54 insertions(+), 2 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java index a7370db03..000ef4495 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java @@ -131,6 +131,7 @@ public final class Constants { public static final String FILE_USE_COMPRESSION = "useFileCompression"; public static final String FILE_SELF_ENCRYPT = "fileSelfEncrypt"; public static final String TEXT_USE_COMPRESSION = "useTextCompression"; + public static final String TEXT_SELF_ENCRYPT = "textSelfEncrypt"; public static final String USE_ARMOR = "useArmor"; // proxy settings public static final String USE_NORMAL_PROXY = "useNormalProxy"; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java index 4127ecb2e..0bbe90fd3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EncryptTextFragment.java @@ -59,11 +59,13 @@ public class EncryptTextFragment public static final String ARG_TEXT = "text"; public static final String ARG_USE_COMPRESSION = "use_compression"; + public static final String ARG_SELF_ENCRYPT = "self_encrypt"; public static final String ARG_RETURN_PROCESS_TEXT = "return_process_text"; private boolean mShareAfterEncrypt; private boolean mReturnProcessTextAfterEncrypt; private boolean mUseCompression; + private boolean mSelfEncrypt; private boolean mHiddenRecipients = false; private String mMessage = ""; @@ -128,6 +130,7 @@ public class EncryptTextFragment public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(ARG_USE_COMPRESSION, mUseCompression); + outState.putBoolean(ARG_SELF_ENCRYPT, mSelfEncrypt); } @Override @@ -142,13 +145,18 @@ public class EncryptTextFragment Bundle args = savedInstanceState == null ? getArguments() : savedInstanceState; - mUseCompression = args.getBoolean(ARG_USE_COMPRESSION, true); if (args.containsKey(ARG_USE_COMPRESSION)) { mUseCompression = args.getBoolean(ARG_USE_COMPRESSION, true); } else { mUseCompression = prefs.getTextUseCompression(); } + if (args.containsKey(ARG_SELF_ENCRYPT)) { + mSelfEncrypt = args.getBoolean(ARG_SELF_ENCRYPT, true); + } else { + mSelfEncrypt = prefs.getTextSelfEncrypt(); + } + setHasOptionsMenu(true); } @@ -159,6 +167,7 @@ public class EncryptTextFragment inflater.inflate(R.menu.encrypt_text_fragment, menu); menu.findItem(R.id.check_enable_compression).setChecked(mUseCompression); + menu.findItem(R.id.check_enable_self_encrypt).setChecked(mSelfEncrypt); if (mReturnProcessTextAfterEncrypt) { menu.findItem(R.id.encrypt_paste).setVisible(true); @@ -174,6 +183,10 @@ public class EncryptTextFragment toggleEnableCompression(item, !item.isChecked()); break; } + case R.id.check_enable_self_encrypt: { + toggleEnableSelfEncrypt(item, !item.isChecked()); + break; + } // case R.id.check_hidden_recipients: { // mHiddenRecipients = item.isChecked(); // notifyUpdate(); @@ -203,6 +216,28 @@ public class EncryptTextFragment return true; } + public void toggleEnableSelfEncrypt(MenuItem item, final boolean selfEncrypt) { + + mSelfEncrypt = selfEncrypt; + item.setChecked(selfEncrypt); + + Notify.create(getActivity(), selfEncrypt + ? R.string.snack_self_encrypt_on + : R.string.snack_self_encrypt_off, + Notify.LENGTH_LONG, Style.OK, new ActionListener() { + @Override + public void onAction() { + Preferences.getPreferences(getActivity()).setTextSelfEncrypt(selfEncrypt); + Notify.create(getActivity(), selfEncrypt + ? R.string.snack_self_encrypt_on + : R.string.snack_self_encrypt_off, + Notify.LENGTH_SHORT, Style.OK, null, R.string.btn_saved) + .show(EncryptTextFragment.this, false); + } + }, R.string.btn_save_default).show(this); + + } + public void toggleEnableCompression(MenuItem item, final boolean compress) { mUseCompression = compress; @@ -264,7 +299,7 @@ public class EncryptTextFragment data.setEncryptionMasterKeyIds(encryptionKeyIds); data.setSignatureMasterKeyId(signingKeyId); - if (signingKeyId != Constants.key.none) { + if (signingKeyId != Constants.key.none && mSelfEncrypt) { data.setAdditionalEncryptId(signingKeyId); } } else { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java index 826fe3736..4eb649948 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/Preferences.java @@ -217,6 +217,16 @@ public class Preferences { return mSharedPreferences.getBoolean(Pref.TEXT_USE_COMPRESSION, true); } + public void setTextSelfEncrypt(boolean selfEncrypt) { + SharedPreferences.Editor editor = mSharedPreferences.edit(); + editor.putBoolean(Pref.TEXT_SELF_ENCRYPT, selfEncrypt); + editor.commit(); + } + + public boolean getTextSelfEncrypt() { + return mSharedPreferences.getBoolean(Pref.TEXT_SELF_ENCRYPT, true); + } + public String getTheme() { return mSharedPreferences.getString(Pref.THEME, Pref.Theme.LIGHT); } diff --git a/OpenKeychain/src/main/res/menu/encrypt_text_fragment.xml b/OpenKeychain/src/main/res/menu/encrypt_text_fragment.xml index 4d3d53870..4c8f9c205 100644 --- a/OpenKeychain/src/main/res/menu/encrypt_text_fragment.xml +++ b/OpenKeychain/src/main/res/menu/encrypt_text_fragment.xml @@ -31,6 +31,12 @@ android:checked="true" android:checkable="true" /> +