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 2233b5ec..ad5fa2f5 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 @@ -12,8 +12,18 @@ public class InputType extends StandardInputType { } + /** + * isDuoLingoReportBug + * When reporting a bug in the Duolingo app, the text field is missing the TYPE_TEXT flag, which + * causes us to detect it as a numeric field. This effectively disables Predictive mode, which is + * actually desired there. Here, we detect this particular case and treat it as a text field. + */ private boolean isDuoLingoReportBug() { - return isAppField("com.duolingo", EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS); + return + field != null + && "com.duolingo".equals(field.packageName) + && field.inputType == EditorInfo.TYPE_TEXT_FLAG_NO_SUGGESTIONS + && field.imeOptions == EditorInfo.IME_ACTION_DONE; } 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 2977d8b5..223df098 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 @@ -6,6 +6,8 @@ import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Set; import io.github.sspanak.tt9.ime.modes.InputMode; @@ -131,11 +133,11 @@ abstract public class StandardInputType { * @return ArrayList */ public ArrayList determineInputModes(Context context) { - ArrayList allowedModes = new ArrayList<>(); + Set allowedModes = new HashSet<>(); if (field == null) { allowedModes.add(InputMode.MODE_PASSTHROUGH); - return allowedModes; + return new ArrayList<>(allowedModes); } // Calculators (only 0-9 and math) and Dialer (0-9, "#" and "*") fields @@ -143,7 +145,7 @@ abstract public class StandardInputType { // Note: A Dialer field is not a Phone number field. if (isSpecialNumeric(context)) { allowedModes.add(InputMode.MODE_PASSTHROUGH); - return allowedModes; + return new ArrayList<>(allowedModes); } switch (field.inputType & InputType.TYPE_MASK_CLASS) { @@ -153,7 +155,7 @@ abstract public class StandardInputType { // Numbers, dates and phone numbers default to the numeric keyboard, // with no extra features. allowedModes.add(InputMode.MODE_123); - return allowedModes; + return new ArrayList<>(allowedModes); case InputType.TYPE_CLASS_TEXT: // This is general text editing. We will default to the @@ -177,7 +179,7 @@ abstract public class StandardInputType { allowedModes.add(InputMode.MODE_123); allowedModes.add(InputMode.MODE_ABC); - return allowedModes; + return new ArrayList<>(allowedModes); } }