diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml index 6423c5c9f3..8970611176 100644 --- a/java/res/values/strings.xml +++ b/java/res/values/strings.xml @@ -72,6 +72,11 @@ autocorrect + + Auto-correct in address bars + + Auto-correction will apply when typing in address bars (URL, email address inputs) + Next-word suggestions diff --git a/java/src/org/futo/inputmethod/latin/InputAttributes.java b/java/src/org/futo/inputmethod/latin/InputAttributes.java index d07b68e6ba..e368d9f392 100644 --- a/java/src/org/futo/inputmethod/latin/InputAttributes.java +++ b/java/src/org/futo/inputmethod/latin/InputAttributes.java @@ -27,6 +27,7 @@ import androidx.annotation.Nullable; import org.futo.inputmethod.latin.common.StringUtils; +import org.futo.inputmethod.latin.settings.Settings; import org.futo.inputmethod.latin.utils.InputTypeUtils; import java.util.ArrayList; @@ -130,6 +131,9 @@ public InputAttributes(final EditorInfo editorInfo, final boolean isFullscreenMo final boolean forceNoSuggestionsByPrivateFlag = editorInfo.privateImeOptions != null && editorInfo.privateImeOptions.contains("org.futo.inputmethod.latin.NoSuggestions=1"); + final Settings settings = Settings.getInstance(); + final boolean forceAutocorrectInAddressBars = settings.getCurrent().isAutoCorrectAddressBarsEnabled(); + // TODO: Have a helper method in InputTypeUtils // Make sure that passwords are not displayed in {@link SuggestionStripView}. final boolean shouldSuppressSuggestions = mIsPasswordField @@ -148,8 +152,8 @@ public InputAttributes(final EditorInfo editorInfo, final boolean isFullscreenMo // TODO: This may need adjustment mInputTypeNoAutoCorrect = shouldSuppressSuggestions //|| (variation == InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT && !flagAutoCorrect) - || InputTypeUtils.isEmailVariation(variation) - || InputType.TYPE_TEXT_VARIATION_URI == variation + || (InputTypeUtils.isEmailVariation(variation) && !forceAutocorrectInAddressBars) + || (InputType.TYPE_TEXT_VARIATION_URI == variation && !forceAutocorrectInAddressBars) || InputType.TYPE_TEXT_VARIATION_FILTER == variation || (flagNoSuggestions && !flagAutoCorrect && variation != InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT) || mIsCodeField; @@ -171,12 +175,12 @@ public InputAttributes(final EditorInfo editorInfo, final boolean isFullscreenMo mApplicationSpecifiedCompletionOn = flagAutoComplete && isFullscreenMode; // If we come here, inputClass is always TYPE_CLASS_TEXT - mIsGeneralTextInput = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS != variation + mIsGeneralTextInput = (InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS != variation || forceAutocorrectInAddressBars) && InputType.TYPE_TEXT_VARIATION_PASSWORD != variation && InputType.TYPE_TEXT_VARIATION_PHONETIC != variation - && InputType.TYPE_TEXT_VARIATION_URI != variation + && (InputType.TYPE_TEXT_VARIATION_URI != variation || forceAutocorrectInAddressBars) && InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD != variation - && InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS != variation + && (InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS != variation || forceAutocorrectInAddressBars) && InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD != variation; boolean noLearning = false; diff --git a/java/src/org/futo/inputmethod/latin/settings/Settings.java b/java/src/org/futo/inputmethod/latin/settings/Settings.java index 61ac200881..82ff5b27f5 100644 --- a/java/src/org/futo/inputmethod/latin/settings/Settings.java +++ b/java/src/org/futo/inputmethod/latin/settings/Settings.java @@ -62,6 +62,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_AUTO_CORRECTION_THRESHOLD_OBSOLETE = "auto_correction_threshold"; public static final String PREF_AUTO_CORRECTION = "pref_key_auto_correction"; + public static final String PREF_AUTO_CORRECT_ADDRESS_BARS = "auto_correct_address_bars"; // PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE is obsolete. Use PREF_SHOW_SUGGESTIONS instead. public static final String PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE = "show_suggestions_setting"; public static final String PREF_SHOW_SUGGESTIONS = "show_suggestions"; diff --git a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java index e8d4eaf473..4aa5c1c762 100644 --- a/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java +++ b/java/src/org/futo/inputmethod/latin/settings/SettingsValues.java @@ -120,6 +120,7 @@ public class SettingsValues { public final float mPlausibilityThreshold; public final boolean mAutoCorrectionEnabledPerUserSettings; public final boolean mAutoCorrectionEnabledPerTextFieldSettings; + private final boolean mAutoCorrectAddressBarsEnabled; private final boolean mSuggestionsEnabledPerUserSettings; private final AsyncResultHolder mAppWorkarounds; @@ -226,6 +227,7 @@ public SettingsValues(final Context context, final SharedPreferences prefs, fina mAutoCorrectionEnabledPerUserSettings = mAutoCorrectEnabled && !mInputAttributes.mInputTypeNoAutoCorrect; mAutoCorrectionEnabledPerTextFieldSettings = !mInputAttributes.mInputTypeNoAutoCorrect; + mAutoCorrectAddressBarsEnabled = readAutoCorrectAddressBarsEnabled(prefs); mSuggestionsEnabledPerUserSettings = readSuggestionsEnabled(prefs); mIsInternal = Settings.isInternal(prefs); mHasCustomKeyPreviewAnimationParams = prefs.getBoolean( @@ -279,6 +281,10 @@ public boolean needsToLookupSuggestions() { && (mAutoCorrectionEnabledPerUserSettings || isSuggestionsEnabledPerUserSettings()); } + public boolean isAutoCorrectAddressBarsEnabled() { + return mAutoCorrectAddressBarsEnabled; + } + public boolean isSuggestionsEnabledPerUserSettings() { return mSuggestionsEnabledPerUserSettings; } @@ -363,6 +369,10 @@ public boolean isBrokenByRecorrection() { private static final String SUGGESTIONS_VISIBILITY_HIDE_VALUE_OBSOLETE = "2"; + private static boolean readAutoCorrectAddressBarsEnabled(final SharedPreferences prefs) { + return prefs.getBoolean(Settings.PREF_AUTO_CORRECT_ADDRESS_BARS, false); + } + private static boolean readSuggestionsEnabled(final SharedPreferences prefs) { if (prefs.contains(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE)) { final boolean alwaysHide = SUGGESTIONS_VISIBILITY_HIDE_VALUE_OBSOLETE.equals( diff --git a/java/src/org/futo/inputmethod/latin/uix/settings/pages/PredictiveText.kt b/java/src/org/futo/inputmethod/latin/uix/settings/pages/PredictiveText.kt index 1e70132caa..7c0ee2b8ef 100644 --- a/java/src/org/futo/inputmethod/latin/uix/settings/pages/PredictiveText.kt +++ b/java/src/org/futo/inputmethod/latin/uix/settings/pages/PredictiveText.kt @@ -86,6 +86,13 @@ val PredictiveTextMenu = UserSettingsMenu( } ).copy(searchTags = R.string.auto_correction_tags), + userSettingToggleSharedPrefs( + title = R.string.auto_correct_address_bars, + subtitle = R.string.auto_correct_address_bars_summary, + key = Settings.PREF_AUTO_CORRECT_ADDRESS_BARS, + default = {false} + ), + userSettingToggleSharedPrefs( title = R.string.prediction_settings_smart_keyhit_detection, subtitle = R.string.prediction_settings_smart_keyhit_detection_subtitle,