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" /> + +