Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions app/src/main/java/helium314/keyboard/latin/InputAttributes.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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 &&
Expand All @@ -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 {
Expand Down
82 changes: 82 additions & 0 deletions app/src/test/java/helium314/keyboard/latin/InputAttributesTest.kt
Original file line number Diff line number Diff line change
@@ -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)
}
}