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 3a8d8054..009982e1 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 @@ -41,6 +41,11 @@ public class InputType extends StandardInputType { } + public boolean isDumbPhoneDialer(Context context) { + return field.packageName.equals("com.android.dialer") && !DeviceInfo.noKeyboard(context); + } + + public boolean isLgX100SDialer() { int imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_ENTER_ACTION; return @@ -114,11 +119,13 @@ public class InputType extends StandardInputType { * the initial GitHub issue about Qin F21 Pro+ * the PR about calculators * Dialer not detected correctly on LG X100S + * [NO ISSUE] On touchscreen-only phones, in the Dialer app, we can't switch to passthrough, because + * they don't have a physical keyboard. */ - protected boolean isSpecialNumeric() { + protected boolean isSpecialNumeric(Context context) { return field.packageName.contains("com.android.calculator") // there is "calculator2", hence the contains() - || field.packageName.equals("com.android.dialer") + || isDumbPhoneDialer(context) || isLgX100SDialer(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java index 2b392f85..7acdb934 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/TypingHandler.java @@ -254,7 +254,7 @@ public abstract class TypingHandler extends KeyPadHandler { return InputMode.MODE_PASSTHROUGH; } - allowedInputModes = inputType.determineInputModes(); + allowedInputModes = inputType.determineInputModes(this); return InputModeValidator.validateMode(settings.getInputMode(), allowedInputModes); } 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 33596ebf..be10af2e 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 @@ -1,5 +1,6 @@ package io.github.sspanak.tt9.ime.helpers; +import android.content.Context; import android.text.InputType; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; @@ -65,7 +66,7 @@ abstract public class StandardInputType { } - abstract protected boolean isSpecialNumeric(); + abstract protected boolean isSpecialNumeric(Context context); public boolean isEmail() { @@ -126,7 +127,7 @@ abstract public class StandardInputType { * * @return ArrayList */ - public ArrayList determineInputModes() { + public ArrayList determineInputModes(Context context) { ArrayList allowedModes = new ArrayList<>(); if (field == null) { @@ -137,7 +138,7 @@ abstract public class StandardInputType { // Calculators (only 0-9 and math) and Dialer (0-9, "#" and "*") fields // handle all input themselves, so we are supposed to pass through all key presses. // Note: A Dialer field is not a Phone number field. - if (isSpecialNumeric()) { + if (isSpecialNumeric(context)) { allowedModes.add(InputMode.MODE_PASSTHROUGH); return allowedModes; }