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 5bba24693..d6adb825b 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 @@ -2119,7 +2119,9 @@ public final class InputLogic { private boolean textBeforeCursorMayBeUrlOrSimilar(final SettingsValues settingsValues) { final EditorInfo ei = getCurrentInputEditorInfo(); // URL field and no space -> may be URL - if (ei != null && (ei.inputType & InputType.TYPE_TEXT_VARIATION_URI) != 0 && !mConnection.spaceBeforeCursor()) + // for whatever absurd reason long message, postal address and email subject have type values that return true when filtering for URI, see https://developer.android.com/reference/android/text/InputType + // so we really need to specifically require URI as only type variation + if (ei != null && (ei.inputType & 0x000000f0) == 0x00000010 && !mConnection.spaceBeforeCursor()) return true; // already contains a SometimesWordConnector -> may be URL (not so sure, only do with detection enabled if (settingsValues.mUrlDetectionEnabled && settingsValues.mSpacingAndPunctuations.containsSometimesWordConnector(mWordComposer.getTypedWord())) diff --git a/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt b/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt index d35ae123c..4c68c8703 100644 --- a/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt +++ b/app/src/test/java/org/dslul/openboard/inputmethod/latin/InputLogicTest.kt @@ -416,6 +416,15 @@ class InputLogicTest { assertEquals("bla.com/img.jpg", composingText) } + @Test fun `don't accidentally detect some other text fields as URI`() { + // see comment in InputLogic.textBeforeCursorMayBeUrlOrSimilar + reset() + DeviceProtectedUtils.getSharedPreferences(latinIME).edit { putBoolean(Settings.PREF_AUTOSPACE_AFTER_PUNCTUATION, true) } + setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE) + chainInput("Hey,why") + assertEquals("Hey, why", text) + } + // ------- helper functions --------- // should be called before every test, so the same state is guaranteed