diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java
index f1c18899..da16e0ce 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/InputAttributes.java
@@ -89,7 +89,7 @@ public final class InputAttributes {
// TODO: Have a helper method in InputTypeUtils
// Make sure that passwords are not displayed in {@link SuggestionStripView}.
- mShouldShowSuggestions = !mIsPasswordField;
+ mShouldShowSuggestions = !mIsPasswordField && !flagNoSuggestions;
mShouldInsertSpacesAutomatically = InputTypeUtils.isAutoSpaceFriendlyType(inputType);
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java
index f6057798..a5611375 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java
@@ -844,7 +844,7 @@ public final class InputLogic {
|| mWordComposer.isComposingWord() // emoji will be part of the word in this case, better do nothing
|| !settingsValues.mBigramPredictionEnabled // this is only for next word suggestions, so they need to be enabled
|| settingsValues.mIncognitoModeEnabled
- || !settingsValues.mInputAttributes.mShouldShowSuggestions // see comment in performAdditionToUserHistoryDictionary
+ || !settingsValues.isSuggestionsEnabledPerUserSettings() // see comment in performAdditionToUserHistoryDictionary
|| !StringUtilsKt.isEmoji(text)
) return;
if (mConnection.hasSlowInputConnection()) {
@@ -1524,8 +1524,8 @@ public final class InputLogic {
// If correction is not enabled, we don't add words to the user history dictionary.
// That's to avoid unintended additions in some sensitive fields, or fields that
// expect to receive non-words.
- // mInputTypeNoAutoCorrect changed to !mShouldShowSuggestions because this was cancelling learning way too often
- if (!settingsValues.mInputAttributes.mShouldShowSuggestions || settingsValues.mIncognitoModeEnabled || TextUtils.isEmpty(suggestion))
+ // mInputTypeNoAutoCorrect changed to !isSuggestionsEnabledPerUserSettings because this was cancelling learning way too often
+ if (!settingsValues.isSuggestionsEnabledPerUserSettings() || settingsValues.mIncognitoModeEnabled || TextUtils.isEmpty(suggestion))
return;
final boolean wasAutoCapitalized = mWordComposer.wasAutoCapitalized() && !mWordComposer.isMostlyCaps();
final String word = stripWordSeparatorsFromEnd(suggestion, settingsValues);
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/CorrectionSettingsFragment.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/CorrectionSettingsFragment.java
index cf233816..13480e43 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/CorrectionSettingsFragment.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/CorrectionSettingsFragment.java
@@ -29,20 +29,6 @@ import org.dslul.openboard.inputmethod.latin.userdictionary.UserDictionarySettin
import java.util.TreeSet;
-/**
- * "Text correction" settings sub screen.
- *
- * This settings sub screen handles the following text correction preferences.
- * - Personal dictionary
- * - Add-on dictionaries
- * - Block offensive words
- * - Auto-correction
- * - Auto-correction confidence
- * - Show correction suggestions
- * - Personalized suggestions
- * - Suggest Contact names
- * - Next-word suggestions
- */
public final class CorrectionSettingsFragment extends SubScreenFragment
implements SharedPreferences.OnSharedPreferenceChangeListener,
PermissionsManager.PermissionsResultCallback {
@@ -86,6 +72,8 @@ public final class CorrectionSettingsFragment extends SubScreenFragment
.setPositiveButton(android.R.string.ok, null)
.setOnCancelListener(dialogInterface -> ((TwoStatePreference) findPreference(key)).setChecked(true))
.show();
+ } else if (Settings.PREF_SHOW_SUGGESTIONS.equals(key) && !prefs.getBoolean(key, true)) {
+ ((TwoStatePreference)findPreference(Settings.PREF_ALWAYS_SHOW_SUGGESTIONS)).setChecked(false);
}
refreshEnabledSettings();
}
@@ -106,9 +94,9 @@ public final class CorrectionSettingsFragment extends SubScreenFragment
}
private void refreshEnabledSettings() {
- setPreferenceVisible(Settings.PREF_AUTO_CORRECTION_CONFIDENCE,
- Settings.readAutoCorrectEnabled(getSharedPreferences()));
+ setPreferenceVisible(Settings.PREF_AUTO_CORRECTION_CONFIDENCE, Settings.readAutoCorrectEnabled(getSharedPreferences()));
setPreferenceVisible(Settings.PREF_ADD_TO_PERSONAL_DICTIONARY, getSharedPreferences().getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true));
+ setPreferenceVisible(Settings.PREF_ALWAYS_SHOW_SUGGESTIONS, getSharedPreferences().getBoolean(Settings.PREF_SHOW_SUGGESTIONS, true));
turnOffLookupContactsIfNoPermission();
}
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java
index 1b2f7d70..da78c06d 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java
@@ -83,6 +83,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_AUTO_CORRECTION = "pref_key_auto_correction";
public static final String PREF_AUTO_CORRECTION_CONFIDENCE = "pref_key_auto_correction_confidence";
public static final String PREF_SHOW_SUGGESTIONS = "show_suggestions";
+ public static final String PREF_ALWAYS_SHOW_SUGGESTIONS = "pref_always_show_suggestions";
public static final String PREF_KEY_USE_PERSONALIZED_DICTS = "pref_key_use_personalized_dicts";
public static final String PREF_KEY_USE_DOUBLE_SPACE_PERIOD = "pref_key_use_double_space_period";
public static final String PREF_BLOCK_POTENTIALLY_OFFENSIVE = "pref_key_block_potentially_offensive";
diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java
index 5dfb37b5..f941057f 100644
--- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java
+++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java
@@ -192,8 +192,8 @@ public class SettingsValues {
&& prefs.getBoolean(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true);
mAutoCorrectionEnabledPerUserSettings = mAutoCorrectEnabled;
//&& !mInputAttributes.mInputTypeNoAutoCorrect; // follow that request or not?
- mSuggestionsEnabledPerUserSettings = !mInputAttributes.mIsPasswordField &&
- readSuggestionsEnabled(prefs);
+ mSuggestionsEnabledPerUserSettings = (mInputAttributes.mShouldShowSuggestions && readSuggestionsEnabled(prefs))
+ || (!mInputAttributes.mIsPasswordField && readSuggestionsOverrideEnabled(prefs));
mIncognitoModeEnabled = Settings.readAlwaysIncognitoMode(prefs) || mInputAttributes.mNoLearning
|| mInputAttributes.mIsPasswordField;
mKeyboardHeightScale = prefs.getFloat(Settings.PREF_KEYBOARD_HEIGHT_SCALE, DEFAULT_SIZE_SCALE);
@@ -252,8 +252,7 @@ public class SettingsValues {
}
public boolean needsToLookupSuggestions() {
- return mInputAttributes.mShouldShowSuggestions
- && (mAutoCorrectionEnabledPerUserSettings || isSuggestionsEnabledPerUserSettings());
+ return mAutoCorrectionEnabledPerUserSettings || isSuggestionsEnabledPerUserSettings();
}
public boolean isSuggestionsEnabledPerUserSettings() {
@@ -312,6 +311,10 @@ public class SettingsValues {
return prefs.getBoolean(Settings.PREF_SHOW_SUGGESTIONS, true);
}
+ private static boolean readSuggestionsOverrideEnabled(final SharedPreferences prefs) {
+ return prefs.getBoolean(Settings.PREF_ALWAYS_SHOW_SUGGESTIONS, false);
+ }
+
private static boolean readBigramPredictionEnabled(final SharedPreferences prefs,
final Resources res) {
return prefs.getBoolean(Settings.PREF_BIGRAM_PREDICTIONS, res.getBoolean(
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9f378abf..3aebdcc1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -101,6 +101,10 @@
Show correction suggestions
Display suggested words while typing
+
+ Always show suggestions
+
+ Ignore other apps’ request to disable suggestions
Block offensive words
diff --git a/app/src/main/res/xml/prefs_screen_correction.xml b/app/src/main/res/xml/prefs_screen_correction.xml
index 29253edb..a625786a 100644
--- a/app/src/main/res/xml/prefs_screen_correction.xml
+++ b/app/src/main/res/xml/prefs_screen_correction.xml
@@ -71,6 +71,13 @@
android:defaultValue="true"
android:persistent="true" />
+
+