diff --git a/app/src/main/java/helium314/keyboard/latin/InputAttributes.kt b/app/src/main/java/helium314/keyboard/latin/InputAttributes.kt index b1ae7291c..6196f1b20 100644 --- a/app/src/main/java/helium314/keyboard/latin/InputAttributes.kt +++ b/app/src/main/java/helium314/keyboard/latin/InputAttributes.kt @@ -67,7 +67,6 @@ class InputAttributes( } else { val variation = mInputType and InputType.TYPE_MASK_VARIATION val flagNoSuggestions = 0 != (mInputType and InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) - val flagMultiLine = 0 != (mInputType and InputType.TYPE_TEXT_FLAG_MULTI_LINE) val flagAutoCorrect = 0 != (mInputType and InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) val flagAutoComplete = 0 != (mInputType and InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE) @@ -83,14 +82,6 @@ class InputAttributes( mDisableGestureFloatingPreviewText = inPrivateImeOptions(mPackageNameForPrivateImeOptions, NO_FLOATING_GESTURE_PREVIEW, editorInfo) - mInputTypeShouldAutoCorrect = flagAutoCorrect || (flagMultiLine && - variation != InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT && - variation != InputType.TYPE_TEXT_VARIATION_URI && - !InputTypeUtils.isEmailVariation(variation) && - !flagNoSuggestions) - - mApplicationSpecifiedCompletionOn = flagAutoComplete && isFullscreenMode - mIsGeneralTextInput = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS != variation && InputType.TYPE_TEXT_VARIATION_PASSWORD != variation && InputType.TYPE_TEXT_VARIATION_PHONETIC != variation && @@ -99,6 +90,13 @@ class InputAttributes( InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS != variation && InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD != variation + mInputTypeShouldAutoCorrect = flagAutoCorrect || ( + mIsGeneralTextInput && + variation != InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT && + !flagNoSuggestions) + + mApplicationSpecifiedCompletionOn = flagAutoComplete && isFullscreenMode + mNoLearning = if (AppQuirksManager.isNonIncognitoApp(mTargetApplicationPackageName)) { false } else { diff --git a/app/src/test/java/helium314/keyboard/latin/InputAttributesTest.kt b/app/src/test/java/helium314/keyboard/latin/InputAttributesTest.kt new file mode 100644 index 000000000..39500590c --- /dev/null +++ b/app/src/test/java/helium314/keyboard/latin/InputAttributesTest.kt @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: GPL-3.0-only +package helium314.keyboard.latin + +import android.text.InputType +import android.view.inputmethod.EditorInfo +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +class InputAttributesTest { + + private fun createAttributes(inputType: Int, packageName: String = "com.example.app"): InputAttributes { + val editorInfo = EditorInfo().apply { + this.inputType = inputType + this.packageName = packageName + } + return InputAttributes(editorInfo, false, null) + } + + @Test + fun testStandardSingleLineTextInputShouldAutoCorrect() { + val attrs = createAttributes(InputType.TYPE_CLASS_TEXT) + assertTrue("Standard single-line text input should autocorrect", attrs.mInputTypeShouldAutoCorrect) + } + + @Test + fun testMultiLineTextInputShouldAutoCorrect() { + val attrs = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_MULTI_LINE) + assertTrue("Multi-line text input should autocorrect", attrs.mInputTypeShouldAutoCorrect) + } + + @Test + fun testShortMessageTextInputShouldAutoCorrect() { + val attrs = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE) + assertTrue("Short message text input should autocorrect", attrs.mInputTypeShouldAutoCorrect) + } + + @Test + fun testPasswordFieldsShouldNotAutoCorrect() { + val attrsPassword = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD) + assertFalse(attrsPassword.mInputTypeShouldAutoCorrect) + + val attrsVisiblePassword = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) + assertFalse(attrsVisiblePassword.mInputTypeShouldAutoCorrect) + + val attrsWebPassword = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD) + assertFalse(attrsWebPassword.mInputTypeShouldAutoCorrect) + } + + @Test + fun testEmailAndUriFieldsShouldNotAutoCorrect() { + val attrsEmail = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS) + assertFalse(attrsEmail.mInputTypeShouldAutoCorrect) + + val attrsWebEmail = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS) + assertFalse(attrsWebEmail.mInputTypeShouldAutoCorrect) + + val attrsUri = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_URI) + assertFalse(attrsUri.mInputTypeShouldAutoCorrect) + } + + @Test + fun testWebEditTextShouldNotAutoCorrectUnlessExplicit() { + val attrsWeb = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT) + assertFalse(attrsWeb.mInputTypeShouldAutoCorrect) + } + + @Test + fun testNoSuggestionsFlagShouldNotAutoCorrect() { + val attrs = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) + assertFalse(attrs.mInputTypeShouldAutoCorrect) + } + + @Test + fun testExplicitAutoCorrectFlagShouldAutoCorrect() { + val attrs = createAttributes(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) + assertTrue(attrs.mInputTypeShouldAutoCorrect) + } +}