diff --git a/app/src/main/java/eu/faircode/email/FixedEditText.java b/app/src/main/java/eu/faircode/email/FixedEditText.java
index 85d904058c..4fb7e20bd5 100644
--- a/app/src/main/java/eu/faircode/email/FixedEditText.java
+++ b/app/src/main/java/eu/faircode/email/FixedEditText.java
@@ -20,6 +20,7 @@ package eu.faircode.email;
*/
import android.content.Context;
+import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.os.Build;
import android.util.AttributeSet;
@@ -32,6 +33,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.widget.AppCompatEditText;
+import androidx.preference.PreferenceManager;
public class FixedEditText extends AppCompatEditText {
public FixedEditText(@NonNull Context context) {
@@ -274,6 +276,8 @@ public class FixedEditText extends AppCompatEditText {
@Override
public ActionMode startActionMode(ActionMode.Callback callback) {
try {
+ if (skipActionMode())
+ return null;
return super.startActionMode(callback);
} catch (Throwable ex) {
Log.e(ex);
@@ -285,6 +289,8 @@ public class FixedEditText extends AppCompatEditText {
public ActionMode startActionMode(ActionMode.Callback callback, int type) {
try {
// callback class: android.widget.Editor$TextActionModeCallback
+ if (skipActionMode())
+ return null;
return super.startActionMode(callback, type);
} catch (Throwable ex) {
Log.e(ex);
@@ -292,6 +298,20 @@ public class FixedEditText extends AppCompatEditText {
}
}
+ private boolean skipActionMode() {
+ try {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+ if (!prefs.contains("skip_action_mode")) {
+ if ("fuxi_eea".equals(Build.PRODUCT) && Build.VERSION.SDK_INT == Build.VERSION_CODES.TIRAMISU)
+ return true;
+ }
+ return prefs.getBoolean("skip_action_mode", false);
+ } catch (Throwable ex) {
+ Log.e(ex);
+ return false;
+ }
+ }
+
@NonNull
@Override
@RequiresApi(api = Build.VERSION_CODES.O)
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java
index 25a90e84ac..9d9952d4b7 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 swSkipActionMode;
private EditText etKeywords;
private SwitchCompat swTestIab;
private Button btnImportProviders;
@@ -302,7 +303,8 @@ 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", "skip_action_mode",
+ "global_keywords", "test_iab"
};
private final static String[] RESET_QUESTIONS = new String[]{
@@ -491,6 +493,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);
+ swSkipActionMode = view.findViewById(R.id.swSkipActionMode);
etKeywords = view.findViewById(R.id.etKeywords);
swTestIab = view.findViewById(R.id.swTestIab);
btnImportProviders = view.findViewById(R.id.btnImportProviders);
@@ -1857,6 +1860,13 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
}
});
+ swSkipActionMode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
+ prefs.edit().putBoolean("skip_action_mode", checked).apply();
+ }
+ });
+
etKeywords.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -2603,6 +2613,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()));
+ swSkipActionMode.setChecked(prefs.getBoolean("skip_action_mode", false));
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..f8408095fe 100644
--- a/app/src/main/res/layout/fragment_options_misc.xml
+++ b/app/src/main/res/layout/fragment_options_misc.xml
@@ -2283,6 +2283,17 @@
app:layout_constraintTop_toBottomOf="@id/swThreadByRef"
app:switchPadding="12dp" />
+
+
+ app:layout_constraintTop_toBottomOf="@id/swSkipActionMode" />
Duplicates by message ID
Thread by common reference
Process MDNs
+ Skip action mode
Global keywords
Test IAB
Import providers