new way of special char grouping
This commit is contained in:
parent
d7004a1a1e
commit
0164e951cd
25 changed files with 251 additions and 127 deletions
|
|
@ -87,13 +87,12 @@ abstract public class InputMode {
|
|||
public void onAcceptSuggestion(@NonNull String word, boolean preserveWordList) {}
|
||||
public void onCursorMove(@NonNull String word) { if (!digitSequence.isEmpty()) onAcceptSuggestion(word); }
|
||||
public boolean onReplaceSuggestion(@NonNull String rawWord) {
|
||||
String newSequence = switch(rawWord) {
|
||||
case SuggestionsBar.SHOW_SPECIAL_CHARS_SUGGESTION -> seq.CHARS_GROUP_0_SEQUENCE;
|
||||
case SuggestionsBar.SHOW_CURRENCIES_SUGGESTION -> seq.CURRENCY_SEQUENCE;
|
||||
default -> null;
|
||||
};
|
||||
|
||||
if (newSequence == null) {
|
||||
String newSequence;
|
||||
if (SuggestionsBar.SHOW_GROUP_0_SUGGESTION.equalsIgnoreCase(rawWord)) {
|
||||
newSequence = seq.CHARS_GROUP_0_SEQUENCE;
|
||||
} else if (SuggestionsBar.SHOW_GROUP_1_SUGGESTION.equalsIgnoreCase(rawWord)) {
|
||||
newSequence = seq.CHARS_GROUP_1_SEQUENCE;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -209,18 +208,6 @@ abstract public class InputMode {
|
|||
protected String adjustSuggestionTextCase(String word, int newTextCase) { return word; }
|
||||
|
||||
|
||||
protected ArrayList<String> getAbbreviatedSpecialChars() {
|
||||
ArrayList<String> special = Characters.getWhitespaces(language);
|
||||
if (!Characters.getCurrencies(language).isEmpty()) {
|
||||
special.add(SuggestionsBar.SHOW_CURRENCIES_SUGGESTION);
|
||||
}
|
||||
if (!settings.getChars0(language).isEmpty()) {
|
||||
special.add(SuggestionsBar.SHOW_SPECIAL_CHARS_SUGGESTION);
|
||||
}
|
||||
return special;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Loads the special characters for 0-key or 1-key. For 0-key, this could be a minimized (show more)
|
||||
* special character list, or the whitespace list.
|
||||
|
|
@ -228,12 +215,12 @@ abstract public class InputMode {
|
|||
protected boolean loadSpecialCharacters() {
|
||||
suggestions.clear();
|
||||
|
||||
if (digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE) || digitSequence.equals(seq.CHARS_1_SEQUENCE)) {
|
||||
if (digitSequence.equals(seq.CHARS_0_SEQUENCE) || digitSequence.equals(seq.CHARS_1_SEQUENCE)) {
|
||||
suggestions.addAll(settings.getOrderedKeyChars(language, digitSequence.charAt(0) - '0'));
|
||||
} else if (digitSequence.equals(seq.CURRENCY_SEQUENCE)) {
|
||||
suggestions.addAll(Characters.getCurrencies(language));
|
||||
} else {
|
||||
suggestions.addAll(getAbbreviatedSpecialChars());
|
||||
} else if (digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE)) {
|
||||
suggestions.addAll(settings.getCharsExtraAsList(language, SettingsStore.CHARS_GROUP_0));
|
||||
} else if (digitSequence.equals(seq.CHARS_GROUP_1_SEQUENCE)) {
|
||||
suggestions.addAll(settings.getCharsExtraAsList(language, SettingsStore.CHARS_GROUP_1));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -55,7 +55,9 @@ class Mode123 extends ModePassthrough {
|
|||
*/
|
||||
private void setDefaultSpecialCharacters() {
|
||||
Language english = LanguageCollection.getByLocale("en");
|
||||
KEY_CHARACTERS.add(getAbbreviatedSpecialChars());
|
||||
KEY_CHARACTERS.add(
|
||||
TextTools.removeLettersFromList(orderCharsForNumericField(settings.getOrderedKeyChars(english, 0), null))
|
||||
);
|
||||
KEY_CHARACTERS.add(
|
||||
TextTools.removeLettersFromList(orderCharsForNumericField(settings.getOrderedKeyChars(english, 1), null))
|
||||
);
|
||||
|
|
|
|||
|
|
@ -87,8 +87,6 @@ class ModeABC extends InputMode {
|
|||
if (isEmailMode) {
|
||||
KEY_CHARACTERS.add(Characters.orderByList(Characters.Email.get(0), settings.getOrderedKeyChars(language, 0), true));
|
||||
KEY_CHARACTERS.add(Characters.orderByList(Characters.Email.get(1), settings.getOrderedKeyChars(language, 1), true));
|
||||
} else {
|
||||
KEY_CHARACTERS.add(getAbbreviatedSpecialChars());
|
||||
}
|
||||
|
||||
refreshSuggestions();
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class ModeBopomofo extends ModePinyin {
|
|||
*/
|
||||
protected void setCustomSpecialCharacters() {
|
||||
// special
|
||||
KEY_CHARACTERS.add(getAbbreviatedSpecialChars());
|
||||
KEY_CHARACTERS.add(TextTools.removeLettersFromList(Characters.orderByList(Characters.Special, settings.getOrderedKeyChars(language, 0), false)));
|
||||
KEY_CHARACTERS.get(0).add(0, "0");
|
||||
|
||||
// punctuation
|
||||
|
|
@ -72,7 +72,7 @@ public class ModeBopomofo extends ModePinyin {
|
|||
protected void onNumberPress(int nextNumber) {
|
||||
if (seq.startsWithEmojiSequence(digitSequence)) {
|
||||
digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, nextNumber);
|
||||
} else if (!seq.CHARS_GROUP_0_SEQUENCE.equals(digitSequence) && !seq.CURRENCY_SEQUENCE.equals(digitSequence)) {
|
||||
} else if (!seq.CHARS_GROUP_0_SEQUENCE.equals(digitSequence) && !seq.CHARS_GROUP_1_SEQUENCE.equals(digitSequence)) {
|
||||
digitSequence += String.valueOf(nextNumber);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,12 +62,12 @@ class ModeCheonjiin extends InputMode {
|
|||
*/
|
||||
protected void setCustomSpecialCharacters() {
|
||||
// special
|
||||
KEY_CHARACTERS.add(getAbbreviatedSpecialChars());
|
||||
KEY_CHARACTERS.add(TextTools.removeLettersFromList(settings.getOrderedKeyChars(language, 0)));
|
||||
KEY_CHARACTERS.get(0).add(0, "0");
|
||||
|
||||
// punctuation
|
||||
KEY_CHARACTERS.add(
|
||||
TextTools.removeLettersFromList(Characters.orderByList(Characters.PunctuationKorean, settings.getOrderedKeyChars(language, 1), false))
|
||||
TextTools.removeLettersFromList(settings.getOrderedKeyChars(language, 1))
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -99,11 +99,11 @@ class ModeCheonjiin extends InputMode {
|
|||
|
||||
@Override
|
||||
public boolean onBackspace() {
|
||||
if (digitSequence.equals(seq.CURRENCY_SEQUENCE) || digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE)) {
|
||||
if (digitSequence.equals(seq.CHARS_GROUP_1_SEQUENCE)) {
|
||||
digitSequence = seq.CHARS_1_SEQUENCE;
|
||||
} else if (digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE)) {
|
||||
digitSequence = seq.CHARS_0_SEQUENCE;
|
||||
} else if (digitSequence.equals(seq.CHARS_1_SEQUENCE)) {
|
||||
digitSequence = "";
|
||||
} else if (digitSequence.equals(seq.CHARS_0_SEQUENCE) || (!digitSequence.startsWith(seq.CHARS_1_SEQUENCE) && Cheonjiin.isSingleJamo(digitSequence))) {
|
||||
} else if (digitSequence.equals(seq.CHARS_0_SEQUENCE) || digitSequence.equals(seq.CHARS_1_SEQUENCE) || (!digitSequence.startsWith(seq.CHARS_1_SEQUENCE) && Cheonjiin.isSingleJamo(digitSequence))) {
|
||||
digitSequence = "";
|
||||
} else if (!digitSequence.isEmpty()) {
|
||||
digitSequence = digitSequence.substring(0, digitSequence.length() - 1);
|
||||
|
|
@ -152,7 +152,7 @@ class ModeCheonjiin extends InputMode {
|
|||
|
||||
if (seq.startsWithEmojiSequence(digitSequence)) {
|
||||
digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, nextNumber);
|
||||
} else if (!seq.CHARS_GROUP_0_SEQUENCE.equals(digitSequence) && !seq.CURRENCY_SEQUENCE.equals(digitSequence)) {
|
||||
} else if (!seq.CHARS_GROUP_0_SEQUENCE.equals(digitSequence) && !seq.CHARS_GROUP_1_SEQUENCE.equals(digitSequence)) {
|
||||
digitSequence += String.valueOf(nextNumber);
|
||||
}
|
||||
|
||||
|
|
@ -269,7 +269,7 @@ class ModeCheonjiin extends InputMode {
|
|||
return
|
||||
digitSequence.equals(seq.CHARS_1_SEQUENCE)
|
||||
|| digitSequence.equals(seq.CHARS_0_SEQUENCE)
|
||||
|| digitSequence.equals(seq.CURRENCY_SEQUENCE)
|
||||
|| digitSequence.equals(seq.CHARS_GROUP_1_SEQUENCE)
|
||||
|| digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,10 +47,7 @@ class ModeWords extends ModeCheonjiin {
|
|||
determineTextFieldTextCase();
|
||||
}
|
||||
|
||||
|
||||
@Override protected void setCustomSpecialCharacters() {
|
||||
KEY_CHARACTERS.add(getAbbreviatedSpecialChars()); // special
|
||||
}
|
||||
@Override protected void setCustomSpecialCharacters() {} // use defaults
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -69,7 +66,9 @@ class ModeWords extends ModeCheonjiin {
|
|||
return false;
|
||||
}
|
||||
|
||||
if (digitSequence.equals(seq.CURRENCY_SEQUENCE) || digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE)) {
|
||||
if (digitSequence.equals(seq.CHARS_GROUP_1_SEQUENCE)) {
|
||||
digitSequence = seq.CHARS_1_SEQUENCE;
|
||||
} else if (digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE)) {
|
||||
digitSequence = seq.CHARS_0_SEQUENCE;
|
||||
} else {
|
||||
digitSequence = digitSequence.substring(0, digitSequence.length() - 1);
|
||||
|
|
@ -404,7 +403,7 @@ class ModeWords extends ModeCheonjiin {
|
|||
// Prevent typing the preferred character when the user has scrolled the special char suggestions.
|
||||
// For example, it makes more sense to allow typing "+ " with 0 + scroll + 0, instead of clearing
|
||||
// the "+" and replacing it with the preferred character.
|
||||
boolean specialOrCurrency = digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE) || digitSequence.equals(seq.CURRENCY_SEQUENCE);
|
||||
boolean specialOrCurrency = digitSequence.equals(seq.CHARS_GROUP_0_SEQUENCE) || digitSequence.equals(seq.CHARS_GROUP_1_SEQUENCE);
|
||||
boolean isWhitespaceAndScrolled = digitSequence.equals(seq.CHARS_0_SEQUENCE) && !stem.isEmpty();
|
||||
if (nextKey == Sequences.CHARS_0_KEY && (isWhitespaceAndScrolled || specialOrCurrency)) {
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -14,11 +14,11 @@ public class Sequences {
|
|||
@NonNull public final String CHARS_1_SEQUENCE;
|
||||
@NonNull public final String EMOJI_SEQUENCE;
|
||||
@NonNull public final String CUSTOM_EMOJI_SEQUENCE;
|
||||
@NonNull public final String CHARS_GROUP_1_SEQUENCE;
|
||||
|
||||
@NonNull public final String CURRENCY_SEQUENCE;
|
||||
@NonNull public final String CHARS_0_SEQUENCE;
|
||||
@NonNull public final String PREFERRED_CHAR_SEQUENCE;
|
||||
@NonNull public final String CHARS_GROUP_0_SEQUENCE;
|
||||
@NonNull public final String CHARS_0_SEQUENCE;
|
||||
|
||||
public Sequences() {
|
||||
this(null, null);
|
||||
|
|
@ -33,11 +33,11 @@ public class Sequences {
|
|||
|
||||
EMOJI_SEQUENCE = CHARS_1_SEQUENCE + CHARS_1_KEY;
|
||||
CUSTOM_EMOJI_SEQUENCE = EMOJI_SEQUENCE + CUSTOM_EMOJI_KEY;
|
||||
CHARS_GROUP_1_SEQUENCE = CHARS_1_SEQUENCE + 'G' + CHARS_1_KEY;
|
||||
|
||||
CHARS_0_SEQUENCE = CHARS_0_PREFIX + CHARS_0_KEY;
|
||||
PREFERRED_CHAR_SEQUENCE = CHARS_0_SEQUENCE + CHARS_0_KEY;
|
||||
CHARS_GROUP_0_SEQUENCE = CHARS_0_PREFIX + CHARS_0_KEY + CHARS_0_KEY + CHARS_0_KEY;
|
||||
CURRENCY_SEQUENCE = CHARS_GROUP_0_SEQUENCE + CHARS_0_KEY;
|
||||
CHARS_GROUP_0_SEQUENCE = CHARS_0_SEQUENCE + 'G' + CHARS_0_KEY;
|
||||
}
|
||||
|
||||
public boolean startsWithEmojiSequence(String sequence) {
|
||||
|
|
@ -57,7 +57,7 @@ public class Sequences {
|
|||
|| sequence.equals(EMOJI_SEQUENCE)
|
||||
|| sequence.equals(PREFERRED_CHAR_SEQUENCE)
|
||||
|| sequence.equals(CHARS_GROUP_0_SEQUENCE)
|
||||
|| sequence.equals(CURRENCY_SEQUENCE);
|
||||
|| sequence.equals(CHARS_GROUP_1_SEQUENCE);
|
||||
}
|
||||
|
||||
public boolean startsWithAnySpecialCharSequence(String sequence) {
|
||||
|
|
@ -71,6 +71,6 @@ public class Sequences {
|
|||
|| sequence.startsWith(EMOJI_SEQUENCE)
|
||||
|| sequence.startsWith(PREFERRED_CHAR_SEQUENCE)
|
||||
|| sequence.startsWith(CHARS_GROUP_0_SEQUENCE)
|
||||
|| sequence.startsWith(CURRENCY_SEQUENCE);
|
||||
|| sequence.startsWith(CHARS_GROUP_1_SEQUENCE);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
package io.github.sspanak.tt9.preferences.screens.punctuation;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
|
||||
public class PreferenceCharsExtra extends AbstractPreferenceCharList {
|
||||
public static final String[] NAMES = {
|
||||
SettingsStore.CHARS_GROUP_0,
|
||||
SettingsStore.CHARS_AFTER_GROUP_0,
|
||||
SettingsStore.CHARS_GROUP_1,
|
||||
SettingsStore.CHARS_AFTER_GROUP_1
|
||||
};
|
||||
|
||||
|
||||
private char[] forbiddenChars;
|
||||
|
||||
public PreferenceCharsExtra(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); }
|
||||
public PreferenceCharsExtra(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
|
||||
public PreferenceCharsExtra(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); }
|
||||
public PreferenceCharsExtra(@NonNull Context context) { super(context); }
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected String getChars() {
|
||||
return getSettings().getCharsExtra(language, getKey());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected char[] getForbiddenChars() {
|
||||
if (forbiddenChars == null) {
|
||||
char[] mandatoryChars = getSettings().getMandatoryChars0(language);
|
||||
|
||||
forbiddenChars = new char[mandatoryChars.length + SettingsStore.FORBIDDEN_CHARS_0.length];
|
||||
System.arraycopy(mandatoryChars, 0, forbiddenChars, 0, mandatoryChars.length);
|
||||
System.arraycopy(SettingsStore.FORBIDDEN_CHARS_0, 0, forbiddenChars, mandatoryChars.length, SettingsStore.FORBIDDEN_CHARS_0.length);
|
||||
}
|
||||
|
||||
return forbiddenChars;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
protected char[] getMandatoryChars() {
|
||||
return new char[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean validateCurrentChars() {
|
||||
String error = validateForbiddenChars();
|
||||
setError(error);
|
||||
return error.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveCurrentChars() {
|
||||
getSettings().saveCharsExtra(language, getKey(), currentChars);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,8 @@ package io.github.sspanak.tt9.preferences.screens.punctuation;
|
|||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.Preference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import io.github.sspanak.tt9.R;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.languages.LanguageCollection;
|
||||
|
|
@ -14,8 +16,7 @@ public class PunctuationScreen extends BaseScreenFragment {
|
|||
public static final String NAME = "Punctuation";
|
||||
private ItemPunctuationOrderLanguage languageList;
|
||||
private ItemRestoreDefaultPunctuation restoreDefaults;
|
||||
private PreferenceChars0 charList0;
|
||||
private PreferenceChars1 charList1;
|
||||
private final ArrayList<AbstractPreferenceCharList> charLists = new ArrayList<>();
|
||||
|
||||
public PunctuationScreen() { init(); }
|
||||
public PunctuationScreen(PreferencesActivity activity) { init(activity); }
|
||||
|
|
@ -44,8 +45,11 @@ public class PunctuationScreen extends BaseScreenFragment {
|
|||
|
||||
@Override
|
||||
protected void onCreate() {
|
||||
charList0 = findPreference(PreferenceChars0.NAME);
|
||||
charList1 = findPreference(PreferenceChars1.NAME);
|
||||
charLists.add(findPreference(PreferenceChars0.NAME));
|
||||
charLists.add(findPreference(PreferenceChars1.NAME));
|
||||
for (int i = 0; i < PreferenceCharsExtra.NAMES.length; i++) {
|
||||
charLists.add(findPreference(PreferenceCharsExtra.NAMES[i]));
|
||||
}
|
||||
|
||||
initLanguageList();
|
||||
initResetDefaults();
|
||||
|
|
@ -87,11 +91,15 @@ public class PunctuationScreen extends BaseScreenFragment {
|
|||
|
||||
|
||||
private void onSaveOrdering() {
|
||||
if (charList0 == null || !charList0.validateCurrentChars() || charList1 == null || !charList1.validateCurrentChars()) {
|
||||
UI.toastShortSingle(activity, R.string.punctuation_order_save_error);
|
||||
} else {
|
||||
charList0.saveCurrentChars();
|
||||
charList1.saveCurrentChars();
|
||||
for (AbstractPreferenceCharList charList : charLists) {
|
||||
if (charList == null || !charList.validateCurrentChars()) {
|
||||
UI.toastShortSingle(activity, R.string.punctuation_order_save_error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (AbstractPreferenceCharList charList : charLists) {
|
||||
charList.saveCurrentChars();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -101,30 +109,23 @@ public class PunctuationScreen extends BaseScreenFragment {
|
|||
|
||||
restoreDefaults.setLanguage(language);
|
||||
|
||||
if (charList0 != null) {
|
||||
charList0.onLanguageChange(language);
|
||||
}
|
||||
|
||||
if (charList1 != null) {
|
||||
charList1.onLanguageChange(language);
|
||||
for (AbstractPreferenceCharList list : charLists) {
|
||||
if (list != null) {
|
||||
list.onLanguageChange(language);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void loadCharLists() {
|
||||
loadCharList(findPreference(PreferenceChars0.NAME));
|
||||
loadCharList(findPreference(PreferenceChars1.NAME));
|
||||
}
|
||||
|
||||
|
||||
private void loadCharList(AbstractPreferenceCharList list) {
|
||||
if (list == null) {
|
||||
return;
|
||||
for (AbstractPreferenceCharList list : charLists) {
|
||||
if (list == null) {
|
||||
continue;
|
||||
}
|
||||
list.setOnRender(() -> {
|
||||
list.setOnRender(null);
|
||||
onLanguageChanged(languageList.getValue());
|
||||
});
|
||||
}
|
||||
|
||||
list.setOnRender(() -> {
|
||||
list.setOnRender(null);
|
||||
onLanguageChanged(languageList.getValue());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,11 +8,18 @@ import java.util.ArrayList;
|
|||
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.languages.LanguageKind;
|
||||
import io.github.sspanak.tt9.ui.tray.SuggestionsBar;
|
||||
import io.github.sspanak.tt9.util.chars.Characters;
|
||||
|
||||
class SettingsPunctuation extends SettingsInput {
|
||||
private final static String CHARS_1_PREFIX = "pref_punctuation_";
|
||||
public final static String CHARS_GROUP_1 = "punctuation_order_key_1_group";
|
||||
public final static String CHARS_AFTER_GROUP_1 = "punctuation_order_key_1_after_group";
|
||||
|
||||
private final static String CHARS_0_PREFIX = "pref_special_chars_";
|
||||
public final static String CHARS_GROUP_0 = "punctuation_order_key_0_group";
|
||||
public final static String CHARS_AFTER_GROUP_0 = "punctuation_order_key_0_after_group";
|
||||
|
||||
private final static char[] MANDATORY_CHARS_1_EU = new char[] {'\'', '"', '-'};
|
||||
public final static char[] FORBIDDEN_CHARS_0 = new char[] {' ', '\n', '\t'};
|
||||
|
||||
|
|
@ -27,14 +34,14 @@ class SettingsPunctuation extends SettingsInput {
|
|||
}
|
||||
|
||||
|
||||
public void saveChars1(@NonNull Language language, @NonNull String punctuation) {
|
||||
prefsEditor.putString(CHARS_1_PREFIX + language.getId(), punctuation);
|
||||
public void saveChars1(@NonNull Language language, @NonNull String chars) {
|
||||
prefsEditor.putString(CHARS_1_PREFIX + language.getId(), chars);
|
||||
prefsEditor.apply();
|
||||
}
|
||||
|
||||
|
||||
public void saveChars0(@NonNull Language language, @NonNull String specialChars) {
|
||||
String safeChars = specialChars
|
||||
public void saveChars0(@NonNull Language language, @NonNull String chars) {
|
||||
String safeChars = chars
|
||||
.replace("\n", "⏎")
|
||||
.replace("\t", Characters.TAB);
|
||||
prefsEditor.putString(CHARS_0_PREFIX + language.getId(), safeChars);
|
||||
|
|
@ -42,6 +49,12 @@ class SettingsPunctuation extends SettingsInput {
|
|||
}
|
||||
|
||||
|
||||
public void saveCharsExtra(@NonNull Language language, @NonNull String listKey, @NonNull String chars) {
|
||||
prefsEditor.putString(listKey + "_" + language.getId(), chars);
|
||||
prefsEditor.apply();
|
||||
}
|
||||
|
||||
|
||||
@NonNull public String getChars1(Language language) {
|
||||
return String.join("", getChars1AsList(language));
|
||||
}
|
||||
|
|
@ -52,6 +65,11 @@ class SettingsPunctuation extends SettingsInput {
|
|||
}
|
||||
|
||||
|
||||
@NonNull public String getCharsExtra(Language language, String listKey) {
|
||||
return prefs.getString(listKey + "_" + language.getId(), "");
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
public ArrayList<String> getChars1AsList(Language language) {
|
||||
if (language == null) {
|
||||
|
|
@ -80,13 +98,40 @@ class SettingsPunctuation extends SettingsInput {
|
|||
}
|
||||
|
||||
|
||||
public ArrayList<String> getCharsExtraAsList(Language language, String listKey) {
|
||||
return getCharsAsList(getCharsExtra(language, listKey), new ArrayList<>());
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
public ArrayList<String> getOrderedKeyChars(Language language, int number) {
|
||||
return switch (number) {
|
||||
case 0 -> getChars0AsList(language);
|
||||
case 1 -> getChars1AsList(language);
|
||||
default -> language != null ? language.getKeyCharacters(number) : new ArrayList<>();
|
||||
};
|
||||
if (language == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
ArrayList<String> chars;
|
||||
|
||||
switch (number) {
|
||||
case 0 -> {
|
||||
chars = getChars0AsList(language);
|
||||
if (!getCharsExtra(language, CHARS_GROUP_0).isEmpty()) {
|
||||
chars.add(SuggestionsBar.SHOW_GROUP_0_SUGGESTION);
|
||||
}
|
||||
chars.addAll(getCharsExtraAsList(language, CHARS_AFTER_GROUP_0));
|
||||
}
|
||||
case 1 -> {
|
||||
chars = getChars1AsList(language);
|
||||
if (!getCharsExtra(language, CHARS_GROUP_1).isEmpty()) {
|
||||
chars.add(SuggestionsBar.SHOW_GROUP_1_SUGGESTION);
|
||||
}
|
||||
chars.addAll(getCharsExtraAsList(language, CHARS_AFTER_GROUP_1));
|
||||
}
|
||||
default -> {
|
||||
return language.getKeyCharacters(number);
|
||||
}
|
||||
}
|
||||
|
||||
return chars;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import io.github.sspanak.tt9.util.TextTools;
|
|||
import io.github.sspanak.tt9.util.chars.Characters;
|
||||
|
||||
public class SuggestionsBar {
|
||||
public static final String SHOW_SPECIAL_CHARS_SUGGESTION = "#%…";
|
||||
public static final String SHOW_CURRENCIES_SUGGESTION = "$€…";
|
||||
public static final String SHOW_GROUP_0_SUGGESTION = "(…\u200A)";
|
||||
public static final String SHOW_GROUP_1_SUGGESTION = "(…\u200B)";
|
||||
|
||||
private final String SHOW_MORE_SUGGESTION = "(...)";
|
||||
private final String STEM_SUFFIX = "… +";
|
||||
|
|
@ -146,7 +146,7 @@ public class SuggestionsBar {
|
|||
String suggestion = getRaw(id);
|
||||
|
||||
// show more...
|
||||
if (suggestion.equals(SHOW_MORE_SUGGESTION) || suggestion.equals(SHOW_CURRENCIES_SUGGESTION) || suggestion.equals(SHOW_SPECIAL_CHARS_SUGGESTION)) {
|
||||
if (suggestion.equals(SHOW_MORE_SUGGESTION) || suggestion.equalsIgnoreCase(SHOW_GROUP_1_SUGGESTION) || suggestion.equalsIgnoreCase(SHOW_GROUP_0_SUGGESTION)) {
|
||||
return Characters.PLACEHOLDER;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -200,8 +200,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Липсва задължителен символ:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Липсват задължителни символи:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Неуспешно запазване на реда на знаците.</string>
|
||||
<string name="punctuation_order_sentence">Ред на символите на клавиш 1</string>
|
||||
<string name="punctuation_order_special">Ред на символите на клавиш 0</string>
|
||||
<string name="punctuation_order_key_1">Ред на символите на клавиш 1</string>
|
||||
<string name="punctuation_order_key_0">Ред на символите на клавиш 0</string>
|
||||
<string name="restore_default_order">Възстанови реда по подразбиране</string>
|
||||
<string name="language">Език</string>
|
||||
<string name="punctuation_order_save">Запази подредбата</string>
|
||||
|
|
|
|||
|
|
@ -188,8 +188,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Fehlendes erforderliches Zeichen:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Fehlende erforderliche Zeichen:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Zeichenreihenfolge konnte nicht gespeichert werden.</string>
|
||||
<string name="punctuation_order_sentence">Zeichenreihenfolge der 1-Taste</string>
|
||||
<string name="punctuation_order_special">Zeichenreihenfolge der 0-Taste</string>
|
||||
<string name="punctuation_order_key_1">Zeichenreihenfolge der 1-Taste</string>
|
||||
<string name="punctuation_order_key_0">Zeichenreihenfolge der 0-Taste</string>
|
||||
<string name="restore_default_order">Standardreihenfolge wiederherstellen</string>
|
||||
<string name="language">Sprache</string>
|
||||
<string name="punctuation_order_save">Reihenfolge speichern</string>
|
||||
|
|
|
|||
|
|
@ -199,8 +199,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Falta carácter obligatorio:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Faltan caracteres obligatorios:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Error al guardar el orden de los caracteres.</string>
|
||||
<string name="punctuation_order_sentence">Orden de caracteres de la tecla 1</string>
|
||||
<string name="punctuation_order_special">Orden de caracteres de la tecla 0</string>
|
||||
<string name="punctuation_order_key_1">Orden de caracteres de la tecla 1</string>
|
||||
<string name="punctuation_order_key_0">Orden de caracteres de la tecla 0</string>
|
||||
<string name="restore_default_order">Restaurar el orden predeterminado</string>
|
||||
<string name="language">Idioma</string>
|
||||
<string name="punctuation_order_save">Guardar orden</string>
|
||||
|
|
|
|||
|
|
@ -197,8 +197,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Caractère obligatoire manquant :%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Caractères obligatoires manquants :%1$s</string>
|
||||
<string name="punctuation_order_save_error">Échec de l’enregistrement de l’ordre des caractères.</string>
|
||||
<string name="punctuation_order_sentence">Ordre des caractères de la touche 1</string>
|
||||
<string name="punctuation_order_special">Ordre des caractères de la touche 0</string>
|
||||
<string name="punctuation_order_key_1">Ordre des caractères de la touche 1</string>
|
||||
<string name="punctuation_order_key_0">Ordre des caractères de la touche 0</string>
|
||||
<string name="restore_default_order">Restaurer l’ordre par défaut</string>
|
||||
<string name="language">Langue</string>
|
||||
<string name="punctuation_order_save">Enregistrer l’ordre</string>
|
||||
|
|
|
|||
|
|
@ -186,8 +186,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Carattere obbligatorio mancante:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Caratteri obbligatori mancanti:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Salvataggio dell’ordine dei caratteri non riuscito.</string>
|
||||
<string name="punctuation_order_sentence">Ordine dei caratteri del tasto 1</string>
|
||||
<string name="punctuation_order_special">Ordine dei caratteri del tasto 0</string>
|
||||
<string name="punctuation_order_key_1">Ordine dei caratteri del tasto 1</string>
|
||||
<string name="punctuation_order_key_0">Ordine dei caratteri del tasto 0</string>
|
||||
<string name="restore_default_order">Ripristina ordine predefinito</string>
|
||||
<string name="language">Lingua</string>
|
||||
<string name="punctuation_order_save">Salvare l\'ordine</string>
|
||||
|
|
|
|||
|
|
@ -200,8 +200,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">תו חובה חסר: %1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">תווי חובה חסרים:%1$s</string>
|
||||
<string name="punctuation_order_save_error">שמירת סדר התווים נכשלה.</string>
|
||||
<string name="punctuation_order_sentence">סדר התווים של מקש 1</string>
|
||||
<string name="punctuation_order_special">סדר התווים של מקש 0</string>
|
||||
<string name="punctuation_order_key_1">סדר התווים של מקש 1</string>
|
||||
<string name="punctuation_order_key_0">סדר התווים של מקש 0</string>
|
||||
<string name="restore_default_order">שחזר את הסדר המוגדר כברירת מחדל</string>
|
||||
<string name="language">שפה</string>
|
||||
<string name="punctuation_order_save">שמור את הסדר</string>
|
||||
|
|
|
|||
|
|
@ -208,8 +208,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Trūksta privalomo simbolio:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Trūksta privalomų simbolių:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Nepavyko išsaugoti simbolių tvarkos.</string>
|
||||
<string name="punctuation_order_sentence">Simbolių tvarka ant klavišo 1</string>
|
||||
<string name="punctuation_order_special">Simbolių tvarka ant klavišo 0</string>
|
||||
<string name="punctuation_order_key_1">Simbolių tvarka ant klavišo 1</string>
|
||||
<string name="punctuation_order_key_0">Simbolių tvarka ant klavišo 0</string>
|
||||
<string name="restore_default_order">Atkurti numatytąją tvarką</string>
|
||||
<string name="language">Kalba</string>
|
||||
<string name="punctuation_order_save">Išsaugoti tvarką</string>
|
||||
|
|
|
|||
|
|
@ -188,8 +188,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Ontbrekend verplicht teken:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Ontbrekende verplichte tekens:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Opslaan van de tekenvolgorde mislukt.</string>
|
||||
<string name="punctuation_order_sentence">Tekenvolgorde van de 1-toets</string>
|
||||
<string name="punctuation_order_special">Tekenvolgorde van de 0-toets</string>
|
||||
<string name="punctuation_order_key_1">Tekenvolgorde van de 1-toets</string>
|
||||
<string name="punctuation_order_key_0">Tekenvolgorde van de 0-toets</string>
|
||||
<string name="restore_default_order">Standaardvolgorde herstellen</string>
|
||||
<string name="language">Taal</string>
|
||||
<string name="punctuation_order_save">Volgorde opslaan</string>
|
||||
|
|
|
|||
|
|
@ -201,8 +201,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Caractere obrigatório ausente:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Caracteres obrigatórios ausentes:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Falha ao salvar a ordem dos caracteres.</string>
|
||||
<string name="punctuation_order_sentence">Ordem de caracteres da tecla 1</string>
|
||||
<string name="punctuation_order_special">Ordem de caracteres da tecla 0</string>
|
||||
<string name="punctuation_order_key_1">Ordem de caracteres da tecla 1</string>
|
||||
<string name="punctuation_order_key_0">Ordem de caracteres da tecla 0</string>
|
||||
<string name="restore_default_order">Restaurar ordem padrão</string>
|
||||
<string name="language">Idioma</string>
|
||||
<string name="punctuation_order_save">Salvar ordem</string>
|
||||
|
|
|
|||
|
|
@ -199,8 +199,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Отсутствует обязательный символ:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Отсутствуют обязательные символы:%1$s</string>
|
||||
<string name="punctuation_order_save_error">е удалось сохранить порядок символов.</string>
|
||||
<string name="punctuation_order_sentence">Порядок символов на клавише 1</string>
|
||||
<string name="punctuation_order_special">Порядок символов на клавише 0</string>
|
||||
<string name="punctuation_order_key_1">Порядок символов на клавише 1</string>
|
||||
<string name="punctuation_order_key_0">Порядок символов на клавише 0</string>
|
||||
<string name="restore_default_order">Восстановить порядок по умолчанию</string>
|
||||
<string name="language">Язык</string>
|
||||
<string name="punctuation_order_save">Сохранить порядок</string>
|
||||
|
|
|
|||
|
|
@ -201,8 +201,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Zorunlu karakter eksik:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Zorunlu karakterler eksik:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Karakter sırası kaydedilemedi.</string>
|
||||
<string name="punctuation_order_sentence">1 tuşunun karakter sırası</string>
|
||||
<string name="punctuation_order_special">0 tuşunun karakter sırası</string>
|
||||
<string name="punctuation_order_key_1">1 tuşunun karakter sırası</string>
|
||||
<string name="punctuation_order_key_0">0 tuşunun karakter sırası</string>
|
||||
<string name="restore_default_order">Varsayılan sırayı geri yükle</string>
|
||||
<string name="language">Dil</string>
|
||||
<string name="punctuation_order_save">Sıralamayı kaydet</string>
|
||||
|
|
|
|||
|
|
@ -210,8 +210,8 @@
|
|||
<string name="punctuation_order_mandatory_char_missing">Відсутній обов’язковий символ:%1$s</string>
|
||||
<string name="punctuation_order_mandatory_chars_missing">Відсутні обов’язкові символи:%1$s</string>
|
||||
<string name="punctuation_order_save_error">Не вдалося зберегти порядок символів.</string>
|
||||
<string name="punctuation_order_sentence">Порядок символів на клавіші 1</string>
|
||||
<string name="punctuation_order_special">Порядок символів на клавіші 0</string>
|
||||
<string name="punctuation_order_key_1">Порядок символів на клавіші 1</string>
|
||||
<string name="punctuation_order_key_0">Порядок символів на клавіші 0</string>
|
||||
<string name="restore_default_order">Відновити початковий порядок</string>
|
||||
<string name="language">Мова</string>
|
||||
<string name="punctuation_order_save">Зберегти порядок</string>
|
||||
|
|
|
|||
|
|
@ -211,8 +211,11 @@
|
|||
<string name="punctuation_order_forbidden_chars">Forbidden characters:%1$s</string>
|
||||
<string name="punctuation_order_save">Save Order</string>
|
||||
<string name="punctuation_order_save_error">Failed saving the character order.</string>
|
||||
<string name="punctuation_order_sentence">1-key Character Order</string>
|
||||
<string name="punctuation_order_special">0-key Character Order</string>
|
||||
<string name="punctuation_order_key_1">1-key Character Order</string>
|
||||
<string name="punctuation_order_key_0">0-key Character Order</string>
|
||||
<string name="punctuation_order_initial">Initial characters</string>
|
||||
<string name="punctuation_order_group">Grouped characters (optional)</string>
|
||||
<string name="punctuation_order_after_group">After the group (optional)</string>
|
||||
|
||||
<string name="setup_keyboard_status">Status</string>
|
||||
<string name="setup_default_keyboard">Select Default Keyboard</string>
|
||||
|
|
|
|||
|
|
@ -5,20 +5,45 @@
|
|||
android:key="punctuation_order_language"
|
||||
android:title="@string/language" />
|
||||
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceChars1
|
||||
android:key="punctuation_order_sentence"
|
||||
android:title="@string/punctuation_order_sentence" />
|
||||
<PreferenceCategory
|
||||
android:title="@string/punctuation_order_key_1">
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceChars1
|
||||
android:key="punctuation_order_sentence"
|
||||
android:title="@string/punctuation_order_initial" />
|
||||
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceChars0
|
||||
android:key="punctuation_order_special_chars"
|
||||
android:title="@string/punctuation_order_special"/>
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceCharsExtra
|
||||
android:key="punctuation_order_key_1_group"
|
||||
android:title="@string/punctuation_order_group"/>
|
||||
|
||||
<Preference
|
||||
android:key="punctuation_order_reset_defaults"
|
||||
android:title="@string/restore_default_order" />
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceCharsExtra
|
||||
android:key="punctuation_order_key_1_after_group"
|
||||
android:title="@string/punctuation_order_after_group"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<Preference
|
||||
android:key="punctuation_order_save"
|
||||
android:title="@string/punctuation_order_save" />
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/punctuation_order_key_0">
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceChars0
|
||||
android:key="punctuation_order_special_chars"
|
||||
android:title="@string/punctuation_order_initial"/>
|
||||
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceCharsExtra
|
||||
android:key="punctuation_order_key_0_group"
|
||||
android:title="@string/punctuation_order_group"/>
|
||||
|
||||
<io.github.sspanak.tt9.preferences.screens.punctuation.PreferenceCharsExtra
|
||||
android:key="punctuation_order_key_0_after_group"
|
||||
android:title="@string/punctuation_order_after_group"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory>
|
||||
<Preference
|
||||
android:key="punctuation_order_reset_defaults"
|
||||
android:title="@string/restore_default_order" />
|
||||
|
||||
<Preference
|
||||
android:key="punctuation_order_save"
|
||||
android:title="@string/punctuation_order_save" />
|
||||
</PreferenceCategory>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue