From a42c1ed1ee13f29d68fe101871658b78945274df Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 17 Apr 2024 17:19:13 +0300 Subject: [PATCH] fixed backspace not working in constrained input fields where composing text can not be displayed --- .../io/github/sspanak/tt9/ime/SuggestionOps.java | 4 ++++ .../io/github/sspanak/tt9/ime/TypingHandler.java | 5 ++--- .../github/sspanak/tt9/ime/helpers/AppHacks.java | 5 +++-- .../io/github/sspanak/tt9/ime/modes/Mode123.java | 15 +++++++++++++-- .../io/github/sspanak/tt9/ime/modes/ModeABC.java | 6 +++++- 5 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/SuggestionOps.java b/app/src/main/java/io/github/sspanak/tt9/ime/SuggestionOps.java index ce7c5df8..c963fd7d 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/SuggestionOps.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/SuggestionOps.java @@ -85,6 +85,10 @@ public class SuggestionOps { String acceptPrevious(int sequenceLength) { + if (sequenceLength <= 0) { + set(null); + } + String lastComposingText = getCurrent(sequenceLength - 1); commitCurrent(false); return lastComposingText; 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 486472c7..4747dfe3 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 @@ -98,6 +98,7 @@ public abstract class TypingHandler extends KeyPadHandler { } + @Override public boolean onBackspace() { // Dialer fields seem to handle backspace on their own and we must ignore it, // otherwise, keyDown race condition occur for all keys. @@ -105,9 +106,7 @@ public abstract class TypingHandler extends KeyPadHandler { return false; } - // * Some app may need special treatment, so let them be. - // * When there is no text, allow double function keys to function normally (e.g. "Back" navigates back) - if (appHacks.onBackspace(mInputMode) || textField.getStringBeforeCursor(1).isEmpty()) { + if (appHacks.onBackspace(mInputMode)) { mInputMode.reset(); return false; } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java index ebed762d..55f157fc 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/AppHacks.java @@ -138,10 +138,11 @@ public class AppHacks { if (isKindleInvertedTextField()) { inputMode.clearWordStem(); } else if (isTermux()) { - sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL); + return false; } - return false; + // When there is no text, allow double function keys to function normally (e.g. "Back" navigates back) + return inputMode.getSuggestions().isEmpty() && textField.getStringBeforeCursor(1).isEmpty(); } 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 aa19b9ca..3efcc9e7 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 @@ -17,7 +17,6 @@ public class Mode123 extends ModePassthrough { @Override public final boolean is123() { return true; } @Override public boolean isPassthrough() { return false; } - @Override public int getSequenceLength() { return 1; } @Override public boolean shouldAcceptPreviousSuggestion(int nextKey) { return true; } private final ArrayList> KEY_CHARACTERS = new ArrayList<>(); @@ -86,6 +85,16 @@ public class Mode123 extends ModePassthrough { return digitSequence.equals(NaturalLanguage.SPECIAL_CHARS_KEY) && super.nextSpecialCharacters(); } + + @Override public boolean onBackspace() { + if (suggestions.isEmpty()) { + return false; + } + + reset(); + return true; + } + @Override public boolean onNumber(int number, boolean hold, int repeat) { reset(); digitSequence = String.valueOf(number); @@ -100,7 +109,6 @@ public class Mode123 extends ModePassthrough { return true; } - /** * shouldIgnoreText * Since this is a numeric mode, we allow typing only numbers and: @@ -120,6 +128,9 @@ public class Mode123 extends ModePassthrough { ); } + @Override public void onAcceptSuggestion(@NonNull String ignored, boolean ignored2) { + reset(); + } @Override public void reset() { super.reset(); diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java index b03968d8..17daba37 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeABC.java @@ -20,8 +20,12 @@ public class ModeABC extends InputMode { @Override public boolean onBackspace() { + if (suggestions.isEmpty()) { + return false; + } + reset(); - return false; + return true; } @Override