From 252c3e557dad20b57f529db6410e0a4832623952 Mon Sep 17 00:00:00 2001 From: sspanak Date: Thu, 12 Jun 2025 12:37:57 +0300 Subject: [PATCH] regression: fixed the text case not being preserved when changing the language --- .../io/github/sspanak/tt9/ime/CommandHandler.java | 9 +++------ .../io/github/sspanak/tt9/ime/modes/InputMode.java | 14 ++++++++++++++ .../main/java/io/github/sspanak/tt9/util/Text.java | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java index b90f6dd1..3a23b79d 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java @@ -187,12 +187,9 @@ abstract public class CommandHandler extends TextEditingHandler { settings.setDefaultCharOrder(mLanguage, false); // initialize default order, if missing // for languages that do not have ABC or Predictive, make sure we remain in valid state - final String digits = mInputMode.getSequence(); - mInputMode = InputMode.getInstance(settings, mLanguage, inputType, textField, determineInputModeId()); - if (!InputModeKind.isNumeric(mInputMode)) { - mInputMode.setSequence(digits); - mInputMode.determineNextWordTextCase(-1); - } + mInputMode = InputMode + .getInstance(settings, mLanguage, inputType, textField, determineInputModeId()) + .copy(mInputMode); getSuggestions(null); setStatusIcon(mInputMode, mLanguage); diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java index 835fbd3b..bb38bb81 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/InputMode.java @@ -79,6 +79,20 @@ abstract public class InputMode { } } + + public InputMode copy(InputMode other) { + if (other == null || InputModeKind.isNumeric(this) || InputModeKind.isNumeric(other)) { + return this; + } + + autoAcceptTimeout = -1; + textCase = other.textCase; + setSequence(other.digitSequence); + + return this; + } + + // Key handlers. Return "true" when handling the key or "false", when is nothing to do. public boolean onBackspace() { return false; } abstract public boolean onNumber(int number, boolean hold, int repeat); diff --git a/app/src/main/java/io/github/sspanak/tt9/util/Text.java b/app/src/main/java/io/github/sspanak/tt9/util/Text.java index 2b6f3fe5..d568d7ae 100644 --- a/app/src/main/java/io/github/sspanak/tt9/util/Text.java +++ b/app/src/main/java/io/github/sspanak/tt9/util/Text.java @@ -165,7 +165,7 @@ public class Text extends TextTools { public boolean isUpperCase() { - return language != null && text != null && text.toUpperCase(language.getLocale()).equals(text); + return language != null && text != null && language.hasUpperCase() && text.toUpperCase(language.getLocale()).equals(text); }