From 33fb98a9965ea75d3899e90eff4f00ce769343c5 Mon Sep 17 00:00:00 2001 From: sspanak Date: Wed, 18 Sep 2024 11:06:37 +0300 Subject: [PATCH] fixed some issues with the Greek question mark and optimized the generation of the new line character in the suggestions --- .../tt9/ime/modes/helpers/AutoSpace.java | 6 ++-- .../tt9/ui/main/keys/SoftKeyPunctuation.java | 33 ++++++++++++------- .../sspanak/tt9/ui/tray/SuggestionsBar.java | 4 +-- .../github/sspanak/tt9/util/Characters.java | 16 +++------ 4 files changed, 31 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java index 74035251..84381918 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java @@ -13,9 +13,9 @@ import io.github.sspanak.tt9.util.Text; public class AutoSpace { private static final Set PRECEDING_SPACE_PUNCTUATION = Set.of('(', '«', '„'); private static final Set PRECEDING_SPACE_FRENCH_PUNCTUATION = Set.of(';', ':', '!', '?', '»'); - private static final Set TRAILING_SPACE_PUNCTUATION = Set.of('.', ',', ';', '!', '?', ')', '%', '»', '؟', '“'); + private static final Set TRAILING_SPACE_PUNCTUATION = Set.of('.', ',', ';', '!', '?', ')', '%', '»', '؟', '“', Characters.GR_QUESTION_MARK.charAt(0)); - private static final Set NO_PRECEDING_SPACE_PUNCTUATION = Set.of('.', ',', ')', '\'', '@', '“', '؟'); + private static final Set NO_PRECEDING_SPACE_PUNCTUATION = Set.of('.', ',', ')', '\'', '@', '“', '؟', Characters.GR_QUESTION_MARK.charAt(0)); private static final Set NOT_FRENCH_NO_PRECEDING_SPACE_PUNCTUATION = Set.of(';', ':', '!', '?', '»'); private final SettingsStore settings; @@ -103,10 +103,10 @@ public class AutoSpace { && !nextChars.startsWithNumber() && ( TRAILING_SPACE_PUNCTUATION.contains(previousChar) - || (previousChar == ':' && !Character.isDigit(penultimateChar)) || (isLanguageFrench && previousChar == '«') || (penultimateChar == ' ' && previousChar == '-') || (penultimateChar == ' ' && previousChar == '/') + || (!Character.isDigit(penultimateChar) && previousChar == ':') || (Character.isDigit(penultimateChar) && Characters.Currency.contains(String.valueOf(previousChar))) ); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java index 2ef904bb..bcde8990 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java @@ -5,6 +5,7 @@ import android.util.AttributeSet; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.languages.LanguageKind; +import io.github.sspanak.tt9.util.Characters; public class SoftKeyPunctuation extends SoftKey { public SoftKeyPunctuation(Context context) { @@ -43,19 +44,29 @@ public class SoftKeyPunctuation extends SoftKey { } int keyId = getId(); - if (tt9.isInputModePhone()) { - if (keyId == R.id.soft_key_punctuation_1) return "*"; - if (keyId == R.id.soft_key_punctuation_2) return "#"; - } else if (tt9.isInputModeNumeric()) { - if (keyId == R.id.soft_key_punctuation_1) return ","; - if (keyId == R.id.soft_key_punctuation_2) return "."; - } else { - if (keyId == R.id.soft_key_punctuation_1) return "!"; - if (keyId == R.id.soft_key_punctuation_2) { - return LanguageKind.isArabic(tt9.getLanguage()) ? "؟" : "?"; - } + if (keyId == R.id.soft_key_punctuation_1) { + return getKey1Char(); + } else if (keyId == R.id.soft_key_punctuation_2) { + return getKey2Char(); } return ""; } + + private String getKey1Char() { + if (tt9.isInputModePhone()) return "*"; + if (tt9.isInputModeNumeric()) return ","; + + return "!"; + } + + private String getKey2Char() { + if (tt9.isInputModePhone()) return "#"; + if (tt9.isInputModeNumeric()) return "."; + + if (LanguageKind.isArabic(tt9.getLanguage())) return "؟"; + if (LanguageKind.isGreek(tt9.getLanguage())) return Characters.GR_QUESTION_MARK; + + return "?"; + } } 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 0996e2ea..043d1408 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 @@ -134,7 +134,7 @@ public class SuggestionsBar { return stem + suggestions.get(id).substring(STEM_PUNCTUATION_VARIATION_PREFIX.length()); } - return suggestions.get(id).equals(Characters.getNewLine()) ? "\n" : suggestions.get(id); + return suggestions.get(id).equals(Characters.NEW_LINE) ? "\n" : suggestions.get(id); } @@ -199,7 +199,7 @@ public class SuggestionsBar { } // make the new line better readable else if (suggestion.equals("\n")) { - suggestions.add(Characters.getNewLine()); + suggestions.add(Characters.NEW_LINE); } // or add any other suggestion as is else { diff --git a/app/src/main/java/io/github/sspanak/tt9/util/Characters.java b/app/src/main/java/io/github/sspanak/tt9/util/Characters.java index eab081a5..61b5738c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/util/Characters.java +++ b/app/src/main/java/io/github/sspanak/tt9/util/Characters.java @@ -10,8 +10,8 @@ import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageKind; public class Characters { - private static String NEW_LINE_CHARACTER = null; - + public static final String GR_QUESTION_MARK = ";"; + public static final String NEW_LINE = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && new Paint().hasGlyph("⏎") ? "⏎" : "\\n"; final public static ArrayList ArabicNumbers = new ArrayList<>(Arrays.asList( "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" @@ -23,7 +23,7 @@ public class Characters { final public static ArrayList CombiningPunctuationHebrew = new ArrayList<>(Arrays.asList( ',' , '-', '\'', ':', ';', '!', '?', '.', '"', - '·', ';', // Greek + '·', GR_QUESTION_MARK.charAt(0), // Greek '،', '؛', ':', '!', '؟' // Arabic )); @@ -44,7 +44,7 @@ public class Characters { )); final public static ArrayList PunctuationGreek = new ArrayList<>(Arrays.asList( - ",", ".", "-", "«", "»", "(", ")", "&", "~", "`", "'", "\"", "·", ":", "!", ";" + ",", ".", "-", "«", "»", "(", ")", "&", "~", "`", "'", "\"", "·", ":", "!", GR_QUESTION_MARK )); final public static ArrayList Currency = new ArrayList<>(Arrays.asList( @@ -148,14 +148,6 @@ public class Characters { return Emoji.size(); } - public static String getNewLine() { - if (NEW_LINE_CHARACTER == null) { - NEW_LINE_CHARACTER = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && new Paint().hasGlyph("⏎") ? "⏎" : "\\n"; - } - - return NEW_LINE_CHARACTER; - } - public static boolean isCombiningPunctuation(Language language, char ch) { return CombiningPunctuation.contains(ch)