Added option to disable Autocrypt

This commit is contained in:
M66B 2020-01-09 18:55:10 +01:00
parent da3bc81473
commit 694a97600f
5 changed files with 58 additions and 25 deletions

View File

@ -4468,7 +4468,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences.
else else
throw new IllegalArgumentException(context.getString(R.string.title_not_encrypted)); throw new IllegalArgumentException(context.getString(R.string.title_not_encrypted));
if (message.from != null && message.from.length > 0 && SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean autocrypt = prefs.getBoolean("autocrypt", true);
if (autocrypt &&
message.from != null && message.from.length > 0 &&
message.autocrypt != null && message.autocrypt != null &&
OpenPgpApi.ACTION_DECRYPT_VERIFY.equals(data.getAction())) OpenPgpApi.ACTION_DECRYPT_VERIFY.equals(data.getAction()))
try { try {

View File

@ -67,6 +67,7 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer
private SwitchCompat swDisplayHidden; private SwitchCompat swDisplayHidden;
private Spinner spEncryptMethod; private Spinner spEncryptMethod;
private Spinner spOpenPgp; private Spinner spOpenPgp;
private SwitchCompat swAutocrypt;
private SwitchCompat swAutocryptMutual; private SwitchCompat swAutocryptMutual;
private SwitchCompat swSign; private SwitchCompat swSign;
private SwitchCompat swEncrypt; private SwitchCompat swEncrypt;
@ -84,7 +85,8 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer
private final static String[] RESET_OPTIONS = new String[]{ private final static String[] RESET_OPTIONS = new String[]{
"disable_tracking", "display_hidden", "disable_tracking", "display_hidden",
"default_encrypt_method", "openpgp_provider", "autocrypt_mutual", "sign_default", "encrypt_default", "auto_decrypt", "default_encrypt_method", "openpgp_provider", "autocrypt", "autocrypt_mutual",
"sign_default", "encrypt_default", "auto_decrypt",
"secure", "secure",
"biometrics", "pin", "biometrics_timeout" "biometrics", "pin", "biometrics_timeout"
}; };
@ -104,6 +106,7 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer
swDisplayHidden = view.findViewById(R.id.swDisplayHidden); swDisplayHidden = view.findViewById(R.id.swDisplayHidden);
spEncryptMethod = view.findViewById(R.id.spEncryptMethod); spEncryptMethod = view.findViewById(R.id.spEncryptMethod);
spOpenPgp = view.findViewById(R.id.spOpenPgp); spOpenPgp = view.findViewById(R.id.spOpenPgp);
swAutocrypt = view.findViewById(R.id.swAutocrypt);
swAutocryptMutual = view.findViewById(R.id.swAutocryptMutual); swAutocryptMutual = view.findViewById(R.id.swAutocryptMutual);
swSign = view.findViewById(R.id.swSign); swSign = view.findViewById(R.id.swSign);
swEncrypt = view.findViewById(R.id.swEncrypt); swEncrypt = view.findViewById(R.id.swEncrypt);
@ -175,6 +178,14 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer
} }
}); });
swAutocrypt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
prefs.edit().putBoolean("autocrypt", checked).apply();
swAutocryptMutual.setEnabled(checked);
}
});
swAutocryptMutual.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { swAutocryptMutual.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
@ -356,7 +367,9 @@ public class FragmentOptionsPrivacy extends FragmentBase implements SharedPrefer
break; break;
} }
swAutocrypt.setChecked(prefs.getBoolean("autocrypt", true));
swAutocryptMutual.setChecked(prefs.getBoolean("autocrypt_mutual", true)); swAutocryptMutual.setChecked(prefs.getBoolean("autocrypt_mutual", true));
swAutocryptMutual.setEnabled(swAutocrypt.isChecked());
swSign.setChecked(prefs.getBoolean("sign_default", false)); swSign.setChecked(prefs.getBoolean("sign_default", false));
swEncrypt.setChecked(prefs.getBoolean("encrypt_default", false)); swEncrypt.setChecked(prefs.getBoolean("encrypt_default", false));
swSign.setEnabled(!swEncrypt.isChecked()); swSign.setEnabled(!swEncrypt.isChecked());

View File

@ -243,34 +243,38 @@ public class MessageHelper {
InternetAddress from = (InternetAddress) message.from[0]; InternetAddress from = (InternetAddress) message.from[0];
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean autocrypt = prefs.getBoolean("autocrypt", true);
boolean mutual = prefs.getBoolean("autocrypt_mutual", true); boolean mutual = prefs.getBoolean("autocrypt_mutual", true);
String mode = (mutual ? "mutual" : "nopreference");
StringBuilder sb = new StringBuilder(); if (autocrypt) {
File file = attachment.getFile(context); String mode = (mutual ? "mutual" : "nopreference");
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line = br.readLine();
while (line != null) {
String data = null;
if (line.length() > 0 &&
!line.startsWith("-----BEGIN ") &&
!line.startsWith("-----END "))
data = line;
line = br.readLine(); StringBuilder sb = new StringBuilder();
File file = attachment.getFile(context);
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line = br.readLine();
while (line != null) {
String data = null;
if (line.length() > 0 &&
!line.startsWith("-----BEGIN ") &&
!line.startsWith("-----END "))
data = line;
// https://www.w3.org/Protocols/rfc822/3_Lexical.html#z0 line = br.readLine();
if (data != null &&
line != null && !line.startsWith("-----END ")) // https://www.w3.org/Protocols/rfc822/3_Lexical.html#z0
sb.append("\r\n ").append(data); if (data != null &&
line != null && !line.startsWith("-----END "))
sb.append("\r\n ").append(data);
}
} }
}
// https://autocrypt.org/level1.html#the-autocrypt-header // https://autocrypt.org/level1.html#the-autocrypt-header
imessage.addHeader("Autocrypt", imessage.addHeader("Autocrypt",
"addr=" + from.getAddress() + ";" + "addr=" + from.getAddress() + ";" +
" prefer-encrypt=" + mode + ";" + " prefer-encrypt=" + mode + ";" +
" keydata=" + sb.toString()); " keydata=" + sb.toString());
}
} }
// PGP: https://tools.ietf.org/html/rfc3156 // PGP: https://tools.ietf.org/html/rfc3156

View File

@ -90,6 +90,18 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvOpenPgp" /> app:layout_constraintTop_toBottomOf="@id/tvOpenPgp" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/swAutocrypt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:checked="true"
android:text="@string/title_advanced_autocrypt"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spOpenPgp"
app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat
android:id="@+id/swAutocryptMutual" android:id="@+id/swAutocryptMutual"
android:layout_width="0dp" android:layout_width="0dp"
@ -99,7 +111,7 @@
android:text="@string/title_advanced_autocrypt_mutual" android:text="@string/title_advanced_autocrypt_mutual"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spOpenPgp" app:layout_constraintTop_toBottomOf="@id/swAutocrypt"
app:switchPadding="12dp" /> app:switchPadding="12dp" />
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat

View File

@ -359,6 +359,7 @@
<string name="title_advanced_display_hidden">Display hidden message texts</string> <string name="title_advanced_display_hidden">Display hidden message texts</string>
<string name="title_advanced_encrypt_method">Default encryption method</string> <string name="title_advanced_encrypt_method">Default encryption method</string>
<string name="title_advanced_openpgp">OpenPGP provider</string> <string name="title_advanced_openpgp">OpenPGP provider</string>
<string name="title_advanced_autocrypt">Use Autocrypt</string>
<string name="title_advanced_autocrypt_mutual">Autocrypt mutual mode</string> <string name="title_advanced_autocrypt_mutual">Autocrypt mutual mode</string>
<string name="title_advanced_sign_default">Sign by default</string> <string name="title_advanced_sign_default">Sign by default</string>
<string name="title_advanced_encrypt_default">Encrypt by default</string> <string name="title_advanced_encrypt_default">Encrypt by default</string>