diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java index e6f602a4..b5259697 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java @@ -10,6 +10,7 @@ import io.github.sspanak.tt9.ime.modes.InputModeKind; import io.github.sspanak.tt9.languages.LanguageKind; import io.github.sspanak.tt9.ui.UI; import io.github.sspanak.tt9.util.Ternary; +import io.github.sspanak.tt9.util.chars.Characters; public abstract class HotkeyHandler extends CommandHandler { @Override @@ -411,7 +412,7 @@ public abstract class HotkeyHandler extends CommandHandler { } // type a space when there is nothing to accept - return onText(" ", validateOnly); + return onText(Characters.getSpace(mLanguage), validateOnly); } 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 982ff9d3..765c8fac 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 @@ -29,7 +29,7 @@ class Mode123 extends ModePassthrough { if (inputType.isPhoneNumber()) { setSpecificSpecialCharacters(Characters.Phone, false); } else if (inputType.isNumeric()) { - setSpecificSpecialCharacters(Characters.getNumberSpecialCharacters(inputType.isDecimal(), inputType.isSignedNumber()), false); + setSpecificSpecialCharacters(Characters.getSpecialForNumbers(inputType.isDecimal(), inputType.isSignedNumber()), false); } else if (isEmailMode) { setSpecificSpecialCharacters(Characters.Email, true); } else { diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeBopomofo.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeBopomofo.java index 3370f4ee..6e6cd77a 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeBopomofo.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeBopomofo.java @@ -47,7 +47,7 @@ public class ModeBopomofo extends ModePinyin { */ protected void setCustomSpecialCharacters() { // special - KEY_CHARACTERS.add(TextTools.removeLettersFromList(applyPunctuationOrder(Characters.Special, 0))); + KEY_CHARACTERS.add(TextTools.removeLettersFromList(applyPunctuationOrder(Characters.getSpecial(language), 0))); KEY_CHARACTERS.get(0).add(0, "0"); // punctuation diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeCheonjiin.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeCheonjiin.java index b3d1096d..f1567453 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeCheonjiin.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/ModeCheonjiin.java @@ -68,7 +68,7 @@ class ModeCheonjiin extends InputMode { */ protected void setCustomSpecialCharacters() { // special - KEY_CHARACTERS.add(TextTools.removeLettersFromList(applyPunctuationOrder(Characters.Special, 0))); + KEY_CHARACTERS.add(TextTools.removeLettersFromList(applyPunctuationOrder(Characters.getSpecial(language), 0))); KEY_CHARACTERS.get(0).add(0, "0"); // punctuation 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 1a36f7f0..38ecc1b3 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 @@ -12,7 +12,6 @@ import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.util.TextTools; -import io.github.sspanak.tt9.util.chars.Characters; public class ModeIdeograms extends ModeWords { private static final String LOG_TAG = ModeIdeograms.class.getSimpleName(); @@ -50,16 +49,6 @@ public class ModeIdeograms extends ModeWords { isFiltering = false; } - - @Override - protected void setCustomSpecialCharacters() { - KEY_CHARACTERS.add(applyPunctuationOrder(Characters.Special, 0)); - int spaceIndex = KEY_CHARACTERS.get(0).indexOf(" "); - if (spaceIndex >= 0) { - KEY_CHARACTERS.get(0).set(spaceIndex, Characters.IDEOGRAPHIC_SPACE); - } - } - /******************************* LOAD SUGGESTIONS *********************************/ @Override diff --git a/app/src/main/java/io/github/sspanak/tt9/languages/NaturalLanguage.java b/app/src/main/java/io/github/sspanak/tt9/languages/NaturalLanguage.java index 68bf98e4..560d554b 100644 --- a/app/src/main/java/io/github/sspanak/tt9/languages/NaturalLanguage.java +++ b/app/src/main/java/io/github/sspanak/tt9/languages/NaturalLanguage.java @@ -84,7 +84,7 @@ public class NaturalLanguage extends TranscribedLanguage { final String PUNCTUATION_PLACEHOLDER = "PUNCTUATION"; final Map> specialChars = new HashMap<>(); - specialChars.put(SPECIAL_CHARS_PLACEHOLDER, Characters.Special); + specialChars.put(SPECIAL_CHARS_PLACEHOLDER, Characters.getSpecial(this)); specialChars.put(PUNCTUATION_PLACEHOLDER, Characters.PunctuationEnglish); specialChars.put(PUNCTUATION_PLACEHOLDER + "_AR", Characters.PunctuationArabic); specialChars.put(PUNCTUATION_PLACEHOLDER + "_ZH", Characters.PunctuationChinese); diff --git a/app/src/main/java/io/github/sspanak/tt9/util/chars/Characters.java b/app/src/main/java/io/github/sspanak/tt9/util/chars/Characters.java index c6f57891..7932dfcf 100644 --- a/app/src/main/java/io/github/sspanak/tt9/util/chars/Characters.java +++ b/app/src/main/java/io/github/sspanak/tt9/util/chars/Characters.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import io.github.sspanak.tt9.languages.Language; +import io.github.sspanak.tt9.languages.LanguageKind; public class Characters extends Emoji { public static final String COMBINING_ZERO_BASE = "◌"; @@ -13,10 +14,6 @@ public class Characters extends Emoji { "$", "€", "₿", "¢", "¤", "₱", "¥", "£" )); - final public static ArrayList Special = new ArrayList<>(Arrays.asList( - " ", "\n", "@", "_", "#", "%", "[", "]", "{", "}", "§", "|", "^", "<", ">", "\\", "/", "=", "*", "+" - )); - /** * The English punctuation filtered to contain only valid email characters. */ @@ -34,10 +31,27 @@ public class Characters extends Emoji { new ArrayList<>(Arrays.asList("-", "(", ")", ".", ";", ",")) )); + /** + * Returns the language-specific space character. + */ + public static String getSpace(Language language) { + return LanguageKind.isChinese(language) || LanguageKind.isJapanese(language) ? IDEOGRAPHIC_SPACE : " "; + } + + /** + * Standard special characters with automatic Space selection based on the language. Useful for + * text fields. + */ + public static ArrayList getSpecial(Language language) { + return new ArrayList<>(Arrays.asList( + getSpace(language), "\n", "@", "_", "#", "%", "[", "]", "{", "}", "§", "|", "^", "<", ">", "\\", "/", "=", "*", "+" + )); + } + /** * Special characters for all kinds of numeric fields: integer, decimal with +/- included as necessary. */ - public static ArrayList> getNumberSpecialCharacters(boolean decimal, boolean signed) { + public static ArrayList> getSpecialForNumbers(boolean decimal, boolean signed) { ArrayList> keyCharacters = new ArrayList<>(); keyCharacters.add(signed ? new ArrayList<>(Arrays.asList("-", "+")) : new ArrayList<>()); if (decimal) {