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 8ac82572..d4808503 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 @@ -185,6 +185,7 @@ abstract public class CommandHandler extends TextEditingHandler { validateLanguages(); detectRTL(); + settings.setDefaultCharOrder(mLanguage, false); // for languages that do not have ABC or Predictive, make sure we remain in valid state if (mInputMode.changeLanguage(mLanguage)) { 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 df9a5670..4ffc0344 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 @@ -68,6 +68,7 @@ public abstract class TypingHandler extends KeyPadHandler { return false; } + settings.setDefaultCharOrder(mLanguage, true); resetKeyRepeat(); mInputMode = determineInputMode(); determineTextCase(); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/ItemRestoreDefaultPunctuation.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/ItemRestoreDefaultPunctuation.java index 2cd7adc2..1c41ab24 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/ItemRestoreDefaultPunctuation.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/punctuation/ItemRestoreDefaultPunctuation.java @@ -7,7 +7,6 @@ import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.preferences.items.ItemClickable; import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.util.ConsumerCompat; -import io.github.sspanak.tt9.util.chars.Characters; class ItemRestoreDefaultPunctuation extends ItemClickable { public static final String NAME = "punctuation_order_reset_defaults"; @@ -33,21 +32,7 @@ class ItemRestoreDefaultPunctuation extends ItemClickable { return false; } - settings.saveChars0( - language, - String.join("", language.getKeyCharacters(0)) - ); - - settings.saveChars1( - language, - String.join("", language.getKeyCharacters(1)) - ); - - settings.saveCharsExtra( - language, - SettingsStore.CHARS_GROUP_0, - String.join("", Characters.getCurrencies(language)) - ); + settings.setDefaultCharOrder(language, true); if (onClick != null) { onClick.accept(String.valueOf(language.getId())); diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java index 2e27b3b1..7654dda7 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsPunctuation.java @@ -29,6 +29,33 @@ class SettingsPunctuation extends SettingsInput { } + public void setDefaultCharOrder(@NonNull Language language, boolean overwrite) { + if (overwrite || noDefault0Chars(language)) { + String chars = new String(FORBIDDEN_CHARS_0) + String.join("", language.getKeyCharacters(0)); + final int splitPosition = 7; + saveChars0(language, String.join("", chars.substring(0, splitPosition))); + saveCharsExtra(language, CHARS_GROUP_0, String.join("", Characters.getCurrencies(language))); + saveCharsExtra(language, CHARS_AFTER_GROUP_0, chars.substring(splitPosition)); + } + + if (overwrite || noDefault1Chars(language)) { + saveChars1(language, String.join("", language.getKeyCharacters(1))); + saveCharsExtra(language, CHARS_GROUP_1, ""); + saveCharsExtra(language, CHARS_AFTER_GROUP_1, ""); + } + } + + + private boolean noDefault0Chars(Language language) { + return prefs.getString(CHARS_0_PREFIX + language.getId(), null) == null; + } + + + private boolean noDefault1Chars(Language language) { + return prefs.getString(CHARS_1_PREFIX + language.getId(), null) == null; + } + + public char[] getMandatoryChars0(Language language) { return LanguageKind.isCyrillic(language) || LanguageKind.isLatinBased(language) ? MANDATORY_CHARS_1_EU : new char[0]; }