diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java
index 2367132c0e..8b1f199b30 100644
--- a/app/src/main/java/eu/faircode/email/FragmentMessages.java
+++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java
@@ -4557,10 +4557,20 @@ public class FragmentMessages extends FragmentBase
aargs.putLongArray("ids", Helper.toLongArray(ids));
aargs.putBoolean("warning", true);
- FragmentDialogAsk ask = new FragmentDialogAsk();
- ask.setArguments(aargs);
- ask.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGES_DELETE);
- ask.show(getParentFragmentManager(), "messages:delete");
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+ boolean delete_confirmation = prefs.getBoolean("delete_confirmation", true);
+
+ if (delete_confirmation) {
+ FragmentDialogAsk ask = new FragmentDialogAsk();
+ ask.setArguments(aargs);
+ ask.setTargetFragment(FragmentMessages.this, REQUEST_MESSAGES_DELETE);
+ ask.show(getParentFragmentManager(), "messages:delete");
+ } else {
+ Intent data = new Intent();
+ data.putExtra("args", aargs);
+ onActivityResult(REQUEST_MESSAGES_DELETE, RESULT_OK, data);
+ return;
+ }
}
@Override
@@ -4909,7 +4919,9 @@ public class FragmentMessages extends FragmentBase
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean delete_asked = prefs.getBoolean("delete_asked", false);
- if (leave_deleted && delete_asked) {
+ boolean delete_confirmation = prefs.getBoolean("delete_confirmation", true);
+
+ if (leave_deleted ? delete_asked : !delete_confirmation) {
Intent data = new Intent();
data.putExtra("args", aargs);
onActivityResult(REQUEST_MESSAGES_DELETE, RESULT_OK, data);
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index 25a90e84ac..9a28ac088f 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
@@ -240,6 +240,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
private SwitchCompat swDupMsgId;
private SwitchCompat swThreadByRef;
private SwitchCompat swMdn;
+ private SwitchCompat swDeleteConfirmation;
private EditText etKeywords;
private SwitchCompat swTestIab;
private Button btnImportProviders;
@@ -302,7 +303,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
"max_backoff_power", "logarithmic_backoff",
"exact_alarms",
"native_dkim", "native_arc", "native_arc_whitelist",
- "infra", "tld_flags", "dup_msgids", "thread_byref", "mdn", "global_keywords", "test_iab"
+ "infra", "tld_flags", "dup_msgids", "thread_byref", "mdn", "delete_confirmation", "global_keywords", "test_iab"
};
private final static String[] RESET_QUESTIONS = new String[]{
@@ -491,6 +492,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swDupMsgId = view.findViewById(R.id.swDupMsgId);
swThreadByRef = view.findViewById(R.id.swThreadByRef);
swMdn = view.findViewById(R.id.swMdn);
+ swDeleteConfirmation = view.findViewById(R.id.swDeleteConfirmation);
etKeywords = view.findViewById(R.id.etKeywords);
swTestIab = view.findViewById(R.id.swTestIab);
btnImportProviders = view.findViewById(R.id.btnImportProviders);
@@ -1857,6 +1859,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
+ swDeleteConfirmation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("delete_confirmation", checked).apply();
+ }
+ });
+
etKeywords.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -2603,6 +2612,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
swDupMsgId.setChecked(prefs.getBoolean("dup_msgids", false));
swThreadByRef.setChecked(prefs.getBoolean("thread_byref", true));
swMdn.setChecked(prefs.getBoolean("mdn", swExperiments.isChecked()));
+ swDeleteConfirmation.setChecked(prefs.getBoolean("delete_confirmation", true));
etKeywords.setText(prefs.getString("global_keywords", null));
swTestIab.setChecked(prefs.getBoolean("test_iab", false));
diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml
index 8a4a4e446f..d67e4deab6 100644
--- a/app/src/main/res/layout/fragment_options_misc.xml
+++ b/app/src/main/res/layout/fragment_options_misc.xml
@@ -2283,6 +2283,31 @@
app:layout_constraintTop_toBottomOf="@id/swThreadByRef"
app:switchPadding="12dp" />
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/tvDeleteConfirmationHint" />
Duplicates by message ID
Thread by common reference
Process MDNs
+ Permanent deletion confirmation
+ If you turn this off, please do not complain if you accidentally delete messages irreversibly
Global keywords
Test IAB
Import providers