diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 33625db15d..3eaa34a64e 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -8206,16 +8206,17 @@ public class AdapterMessage extends RecyclerView.Adapter() { @Override public void onChanged(TupleKeyword.Persisted data) { + String global = prefs.getString("global_keywords", null); + if (global != null) { + List available = new ArrayList<>(); + available.addAll(Arrays.asList(global.split(" "))); + if (data != null && data.available != null) + available.addAll(Arrays.asList(data.available)); + data.available = available.toArray(new String[0]); + } pbWait.setVisibility(View.GONE); - adapter.set(id, TupleKeyword.from(getContext(), data)); + adapter.set(id, TupleKeyword.from(context, data)); } }); - return new AlertDialog.Builder(getContext()) + return new AlertDialog.Builder(context) .setIcon(R.drawable.twotone_label_important_24) .setTitle(R.string.title_manage_keywords) .setView(dview) diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index 6425ec1378..5ead8da062 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -197,6 +197,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private SwitchCompat swExactAlarms; private SwitchCompat swInfra; private SwitchCompat swDupMsgId; + private EditText etKeywords; private SwitchCompat swTestIab; private Button btnImportProviders; private TextView tvProcessors; @@ -243,7 +244,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "use_modseq", "uid_command", "perform_expunge", "uid_expunge", "auth_plain", "auth_login", "auth_ntlm", "auth_sasl", "auth_apop", "use_top", "keep_alive_poll", "empty_pool", "idle_done", "logarithmic_backoff", - "exact_alarms", "infra", "dkim_verify", "dup_msgids", "test_iab" + "exact_alarms", "infra", "dkim_verify", "dup_msgids", "global_keywords", "test_iab" }; private final static String[] RESET_QUESTIONS = new String[]{ @@ -392,6 +393,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swExactAlarms = view.findViewById(R.id.swExactAlarms); swInfra = view.findViewById(R.id.swInfra); swDupMsgId = view.findViewById(R.id.swDupMsgId); + etKeywords = view.findViewById(R.id.etKeywords); swTestIab = view.findViewById(R.id.swTestIab); btnImportProviders = view.findViewById(R.id.btnImportProviders); tvProcessors = view.findViewById(R.id.tvProcessors); @@ -1347,6 +1349,32 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc } }); + etKeywords.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // Do nothing + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // Do nothing + } + + @Override + public void afterTextChanged(Editable s) { + String keywords = s.toString().trim(); + String[] keyword = keywords.replaceAll("\\s+", " ").split(" "); + for (int i = 0; i < keyword.length; i++) + keyword[i] = MessageHelper.sanitizeKeyword(keyword[i]); + keywords = String.join(" ", keyword); + + if (TextUtils.isEmpty(keywords)) + prefs.edit().remove("global_keywords").apply(); + else + prefs.edit().putString("global_keywords", keywords).apply(); + } + }); + swTestIab.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -1754,6 +1782,9 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc if ("vt_apikey".equals(key) || "send_host".equals(key)) return; + if ("global_keywords".equals(key)) + return; + setOptions(); } @@ -1974,6 +2005,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swExactAlarms.setChecked(prefs.getBoolean("exact_alarms", true)); swInfra.setChecked(prefs.getBoolean("infra", false)); swDupMsgId.setChecked(prefs.getBoolean("dup_msgids", false)); + etKeywords.setText(prefs.getString("global_keywords", null)); swTestIab.setChecked(prefs.getBoolean("test_iab", false)); tvProcessors.setText(getString(R.string.title_advanced_processors, Runtime.getRuntime().availableProcessors())); diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index 956ffebb62..6b9b1bc2d7 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -322,10 +322,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="6dp" - app:drawableTint="?attr/colorWarning" android:text="@string/title_advanced_privacy_risk" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?attr/colorWarning" + app:drawableTint="?attr/colorWarning" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swLanguageTool" /> @@ -336,10 +336,10 @@ android:layout_marginTop="12dp" android:drawableEnd="@drawable/twotone_open_in_new_12" android:drawablePadding="6dp" - app:drawableTint="?android:attr/textColorLink" android:text="@string/title_privacy_policy" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" + app:drawableTint="?android:attr/textColorLink" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvLanguageToolHint" /> @@ -372,10 +372,10 @@ android:layout_marginTop="12dp" android:drawableEnd="@drawable/twotone_open_in_new_12" android:drawablePadding="6dp" - app:drawableTint="?android:attr/textColorLink" android:text="@string/title_privacy_policy" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" + app:drawableTint="?android:attr/textColorLink" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swDeepL" /> @@ -408,10 +408,10 @@ android:layout_marginTop="12dp" android:drawableEnd="@drawable/twotone_open_in_new_12" android:drawablePadding="6dp" - app:drawableTint="?android:attr/textColorLink" android:text="@string/title_privacy_policy" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" + app:drawableTint="?android:attr/textColorLink" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swVirusTotal" /> @@ -620,10 +620,10 @@ android:layout_marginTop="12dp" android:drawableEnd="@drawable/twotone_open_in_new_12" android:drawablePadding="6dp" - app:drawableTint="?android:attr/textColorLink" android:text="@string/title_advanced_sdcard" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" + app:drawableTint="?android:attr/textColorLink" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tvLastCleanup" /> @@ -672,12 +672,12 @@ android:layout_height="wrap_content" android:drawableStart="@drawable/twotone_warning_24" android:drawablePadding="6dp" - app:drawableTint="?attr/colorWarning" android:gravity="center" android:text="@string/title_setup_advanced" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textColor="?attr/colorWarning" android:textStyle="bold" + app:drawableTint="?attr/colorWarning" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -716,10 +716,10 @@ android:layout_marginTop="6dp" android:drawableEnd="@drawable/twotone_open_in_new_12" android:drawablePadding="6dp" - app:drawableTint="?android:attr/textColorLink" android:text="@string/title_advanced_experiments_hint" android:textAppearance="@style/TextAppearance.AppCompat.Small" android:textColor="?android:attr/textColorLink" + app:drawableTint="?android:attr/textColorLink" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swExperiments" /> @@ -910,11 +910,11 @@ android:drawableStart="@drawable/twotone_warning_24" android:drawableEnd="@drawable/twotone_warning_24" android:drawablePadding="6dp" - app:drawableTint="?attr/colorWarning" android:gravity="center" android:text="@string/title_advanced_caption_debug" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textStyle="bold" + app:drawableTint="?attr/colorWarning" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -962,8 +962,8 @@ android:layout_marginTop="12dp" android:drawableStart="@drawable/twotone_warning_24" android:drawablePadding="6dp" - app:drawableTint="?attr/colorWarning" android:text="@string/title_advanced_external_storage" + app:drawableTint="?attr/colorWarning" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/swWorkManager" @@ -1648,6 +1648,7 @@ android:id="@+id/tvDkimVerifyHint" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginTop="6dp" android:layout_marginEnd="48dp" android:text="@string/title_advanced_usage_hint" android:textAppearance="@style/TextAppearance.AppCompat.Small" @@ -1668,6 +1669,18 @@ app:layout_constraintTop_toBottomOf="@id/tvDkimVerifyHint" app:switchPadding="12dp" /> + +