From cde32927745075407e39a529d5b89019e34e7a06 Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 8 Jan 2025 15:53:13 +0200 Subject: [PATCH] disabled Automatic Capitalizations in email and URL fields, as well as in text fields that do request no word suggestions --- .../io/github/sspanak/tt9/hacks/InputType.java | 5 +++-- .../tt9/ime/helpers/StandardInputType.java | 15 +++++++++------ .../github/sspanak/tt9/ime/modes/InputMode.java | 2 +- .../io/github/sspanak/tt9/ime/modes/Mode123.java | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/hacks/InputType.java b/app/src/main/java/io/github/sspanak/tt9/hacks/InputType.java index e3173ef1..e891f93d 100644 --- a/app/src/main/java/io/github/sspanak/tt9/hacks/InputType.java +++ b/app/src/main/java/io/github/sspanak/tt9/hacks/InputType.java @@ -186,13 +186,14 @@ public class InputType extends StandardInputType { /** - * Detects incorrectly defined text fields that miss the EditorInfo.TYPE_TEXT flag. + * Detects incorrectly defined text fields. */ @Override - protected boolean isDefectiveText() { + public boolean isDefectiveText() { return isDuoLingoReportBug() || isContactsAndroid15Field(); } + /** * isAppField * Detects a particular input field of a particular application. diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/StandardInputType.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/StandardInputType.java index 096f9d57..192c291e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/StandardInputType.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/StandardInputType.java @@ -112,8 +112,11 @@ abstract public class StandardInputType { } - abstract protected boolean isDefectiveText(); + abstract public boolean isDefectiveText(); + private boolean isNoSuggestionsText() { + return isText() && (field.inputType & InputType.TYPE_MASK_FLAGS & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS) == InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; + } public boolean isMultilineText() { return field != null && (field.inputType & TYPE_MULTILINE_TEXT) == TYPE_MULTILINE_TEXT; @@ -169,7 +172,7 @@ abstract public class StandardInputType { default: // Enable predictions for incorrectly defined text fields. - if (isDefectiveText() && !isPassword()) { + if (isDefectiveText()) { allowedModes.add(InputMode.MODE_PREDICTIVE); } @@ -192,14 +195,14 @@ abstract public class StandardInputType { return InputMode.CASE_UNDEFINED; } - if (isSpecialized()) { - return InputMode.CASE_LOWER; - } - if (isPersonName()) { return InputMode.CASE_CAPITALIZE; } + if (isSpecialized() || isNoSuggestionsText()) { + return InputMode.CASE_LOWER; + } + return switch (field.inputType & InputType.TYPE_MASK_FLAGS) { case InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS -> InputMode.CASE_UPPER; case InputType.TYPE_TEXT_FLAG_CAP_WORDS -> InputMode.CASE_CAPITALIZE; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java index a78cdf67..6c7d2de6 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java @@ -42,7 +42,7 @@ abstract public class InputMode { protected InputMode(SettingsStore settings, InputType inputType) { - isEmailMode = inputType != null && inputType.isEmail(); + isEmailMode = inputType != null && inputType.isEmail() && !inputType.isDefectiveText(); this.settings = settings; } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java index 0feaa4f9..d178e55f 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/Mode123.java @@ -29,7 +29,7 @@ class Mode123 extends ModePassthrough { setSpecificSpecialCharacters(Characters.Phone, false); } else if (inputType.isNumeric()) { setSpecificSpecialCharacters(Characters.getNumberSpecialCharacters(inputType.isDecimal(), inputType.isSignedNumber()), false); - } else if (inputType.isEmail()) { + } else if (isEmailMode) { setSpecificSpecialCharacters(Characters.Email, true); } else { setDefaultSpecialCharacters();