From 11a6c97afa6feb84eaf38bd5c72d0003db2ca7b8 Mon Sep 17 00:00:00 2001 From: sspanak Date: Fri, 30 Aug 2024 12:26:29 +0300 Subject: [PATCH] fixed text flashing when recomposing --- .../github/sspanak/tt9/ime/TypingHandler.java | 8 +++++--- .../sspanak/tt9/ime/helpers/TextField.java | 17 +++++++++++++++++ .../sspanak/tt9/ime/modes/ModePredictive.java | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) 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 4b1507e4..5e625960 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 @@ -134,9 +134,11 @@ public abstract class TypingHandler extends KeyPadHandler { textField.deleteChars(prevChars); } - if (!hold && suggestionOps.isEmpty() && mInputMode.recompose(textField.getWordBeforeCursor())) { - textField.deleteChars(mInputMode.getSequenceLength()); - getSuggestions(); + if (settings.getBackspaceRecomposing() && !hold && suggestionOps.isEmpty()) { + String previousWord = textField.getWordBeforeCursor(); + if (textField.recompose(previousWord) && mInputMode.recompose(previousWord)) { + getSuggestions(); + } } return true; diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java index 9178d106..09ea6eb0 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/TextField.java @@ -187,6 +187,23 @@ public class TextField extends InputField { } + /** + * Erases the previous N characters and sets the given "text" as composing text. N is the length of + * the given "text". Returns "true" if the operation was successful, "false" otherwise. + */ + public boolean recompose(String text) { + if (connection == null || !isComposingSupported) { + return false; + } + + connection.beginBatchEdit(); + boolean success = connection.deleteSurroundingText(text.length(), 0) && connection.setComposingText(text, 1); + connection.endBatchEdit(); + + return success; + } + + /** * setText * A fail-safe setter that appends text to the field, ignoring NULL input. diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java index cc66be97..0f23a516 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModePredictive.java @@ -126,7 +126,7 @@ public class ModePredictive extends InputMode { @Override public boolean recompose(String word) { - if (!settings.getBackspaceRecomposing() || word == null || word.length() < 2 || word.contains(" ")) { + if (word == null || word.length() < 2 || word.contains(" ")) { Logger.d(LOG_TAG, "Not recomposing invalid word: '" + word + "'"); textCase = CASE_CAPITALIZE; return false;