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 da620583..3fcb5641 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 @@ -158,6 +158,20 @@ public class InputType extends StandardInputType { } + /** + * isTeams + * M$ Teams seems to control the keyboard visibility on its own. Initially, it always reports + * the input fields as TYPE_NULL, but once the keyboard accepts the show request, it switches to + * TYPE_CLASS_TEXT. This method used to enforce us to stay active at all times in Teams. + * The problem does not occur on all Android versions. I was able to reproduce it only on Unihertz + * Atom L (Android 11), but not on Energizer H620S (Android 10). The bug report also suggests it + * occurs on newer versions. See: #749. + */ + public boolean isTeams() { + return isAppField("com.microsoft.teams", EditorInfo.TYPE_NULL); + } + + public boolean isUs() { return isUs; } 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 ed466928..5b467fa9 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 @@ -289,7 +289,7 @@ public abstract class TypingHandler extends KeyPadHandler { * We do not want to handle any of these, hence we pass through all input to the system. */ protected int determineInputModeId() { - if (!inputType.isValid() || (inputType.isLimited() && !inputType.isTermux())) { + if (!inputType.isValid() || (inputType.isLimited() && !inputType.isTeams() && !inputType.isTermux())) { return InputMode.MODE_PASSTHROUGH; }