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