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,