From fcf9e575dc8567f59f51efc25444c0603b917aa1 Mon Sep 17 00:00:00 2001 From: sspanak Date: Fri, 16 May 2025 12:30:39 +0300 Subject: [PATCH] fixed some Katakana words not being displayed correctly when filtering is on --- .../sspanak/tt9/ime/modes/ModeIdeograms.java | 1 + .../sspanak/tt9/ime/modes/ModeKanji.java | 31 +++++++++++++++++-- .../sspanak/tt9/ui/tray/SuggestionsBar.java | 5 +-- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeIdeograms.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeIdeograms.java index f6c41e04..d90e7042 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeIdeograms.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeIdeograms.java @@ -31,6 +31,7 @@ public class ModeIdeograms extends ModeWords { @Override protected String adjustSuggestionTextCase(String word, int newTextCase) { return word; } @Override public void determineNextWordTextCase() {} + @Override public boolean nextTextCase() { return false; } @Override diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeKanji.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeKanji.java index 5316f8f1..bde4b706 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeKanji.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeKanji.java @@ -1,7 +1,10 @@ package io.github.sspanak.tt9.ime.modes; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import java.util.ArrayList; + import io.github.sspanak.tt9.hacks.InputType; import io.github.sspanak.tt9.ime.helpers.TextField; import io.github.sspanak.tt9.languages.Language; @@ -14,11 +17,29 @@ public class ModeKanji extends ModePinyin { NAME = language.getName().replace(" / ローマ字", ""); } + + @NonNull @Override - public boolean validateLanguage(@Nullable Language newLanguage) { - return LanguageKind.isJapanese(newLanguage); + public ArrayList getSuggestions() { + ArrayList newSuggestions = new ArrayList<>(); + for (String s : suggestions) { + // "Ql" is the transcription of "—" in the database, as defined in Japanese.yml. However, this + // has only technical meaning. When displaying the suggestions, we want to show "—" for better + // readability. + newSuggestions.add(s.replaceAll("Ql", "—")); + } + + return newSuggestions; } + + @Override + public boolean onReplaceSuggestion(@NonNull String word) { + // revert to the transcription, so that filtering works correctly + return super.onReplaceSuggestion(word.replaceAll("—", "Ql")); + } + + @Override public boolean shouldAcceptPreviousSuggestion(int nextKey, boolean hold) { if (digitSequence.isEmpty()) { @@ -32,4 +53,10 @@ public class ModeKanji extends ModePinyin { return super.shouldAcceptPreviousSuggestion(nextKey, hold); } + + + @Override + public boolean validateLanguage(@Nullable Language newLanguage) { + return LanguageKind.isJapanese(newLanguage); + } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java index 87d35657..b63bc241 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java @@ -183,11 +183,12 @@ public class SuggestionsBar { @NonNull public String getRaw(int id) { - if (id < 0 || id >= visibleSuggestions.size()) { + final int index = containsStem() ? id - 1 : id; + if (index < 0 || suggestions == null || index >= suggestions.size()) { return ""; } - return visibleSuggestions.get(id); + return suggestions.get(index); }