fixed special characters missing in email fields when an East Asian language is selected
This commit is contained in:
parent
a7b4c44913
commit
3dc06e7061
10 changed files with 50 additions and 66 deletions
|
|
@ -188,11 +188,9 @@ abstract public class CommandHandler extends TextEditingHandler {
|
|||
settings.setDefaultCharOrder(mLanguage, false);
|
||||
|
||||
// for languages that do not have ABC or Predictive, make sure we remain in valid state
|
||||
if (mInputMode.changeLanguage(mLanguage)) {
|
||||
mInputMode.clearWordStem();
|
||||
} else {
|
||||
final String digits = mInputMode.getSequence();
|
||||
mInputMode = InputMode.getInstance(settings, mLanguage, inputType, textField, determineInputModeId());
|
||||
if (InputModeKind.isPredictive(mInputMode)) {
|
||||
mInputMode.setSequence(digits);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -145,13 +145,9 @@ abstract public class InputMode {
|
|||
* The default implementation is to switch to the new language (including NullLanguage) and
|
||||
* return "true".
|
||||
*/
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
setLanguage(newLanguage);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void setLanguage(@Nullable Language newLanguage) {
|
||||
protected boolean setLanguage(@Nullable Language newLanguage) {
|
||||
language = newLanguage != null ? newLanguage : new NullLanguage();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ class Mode123 extends ModePassthrough {
|
|||
|
||||
protected Mode123(SettingsStore settings, Language language, InputType inputType) {
|
||||
super(settings, inputType);
|
||||
changeLanguage(language);
|
||||
setLanguage(language);
|
||||
|
||||
if (inputType.isPhoneNumber()) {
|
||||
setSpecificSpecialCharacters(Characters.Phone, false);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import java.util.ArrayList;
|
|||
|
||||
import io.github.sspanak.tt9.hacks.InputType;
|
||||
import io.github.sspanak.tt9.languages.Language;
|
||||
import io.github.sspanak.tt9.languages.LanguageCollection;
|
||||
import io.github.sspanak.tt9.languages.LanguageKind;
|
||||
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
|
||||
import io.github.sspanak.tt9.util.chars.Characters;
|
||||
|
|
@ -20,7 +21,7 @@ class ModeABC extends InputMode {
|
|||
|
||||
protected ModeABC(SettingsStore settings, Language lang, InputType inputType) {
|
||||
super(settings, inputType);
|
||||
changeLanguage(lang);
|
||||
setLanguage(lang);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -70,12 +71,12 @@ class ModeABC extends InputMode {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
public boolean setLanguage(@Nullable Language newLanguage) {
|
||||
if (newLanguage != null && !newLanguage.hasABC()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setLanguage(newLanguage);
|
||||
super.setLanguage(newLanguage);
|
||||
|
||||
allowedTextCases.clear();
|
||||
allowedTextCases.add(CASE_LOWER);
|
||||
|
|
@ -85,8 +86,10 @@ class ModeABC extends InputMode {
|
|||
|
||||
KEY_CHARACTERS.clear();
|
||||
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));
|
||||
// Asian punctuation can not be used in email addresses, so we need to use the English locale.
|
||||
Language lang = LanguageKind.isCJK(language) ? LanguageCollection.getByLocale("en") : language;
|
||||
KEY_CHARACTERS.add(Characters.orderByList(Characters.Email.get(0), settings.getOrderedKeyChars(lang, 0), true));
|
||||
KEY_CHARACTERS.add(Characters.orderByList(Characters.Email.get(1), settings.getOrderedKeyChars(lang, 1), true));
|
||||
}
|
||||
|
||||
refreshSuggestions();
|
||||
|
|
|
|||
|
|
@ -21,13 +21,8 @@ public class ModeBopomofo extends ModePinyin {
|
|||
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
if (LanguageKind.isChineseBopomofo(newLanguage)) {
|
||||
setLanguage(newLanguage);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
public boolean validateLanguage(@Nullable Language newLanguage) {
|
||||
return LanguageKind.isChineseBopomofo(newLanguage);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -73,18 +73,31 @@ class ModeCheonjiin extends InputMode {
|
|||
|
||||
|
||||
@Override
|
||||
protected void setLanguage(@Nullable Language newLanguage) {
|
||||
protected boolean setLanguage(@Nullable Language newLanguage) {
|
||||
if (!validateLanguage(newLanguage)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
super.setLanguage(newLanguage);
|
||||
|
||||
autoSpace.setLanguage(language);
|
||||
|
||||
KEY_CHARACTERS.clear();
|
||||
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));
|
||||
// Asian punctuation can not be used in email addresses, so we need to use the English locale.
|
||||
Language lang = LanguageKind.isCJK(language) ? LanguageCollection.getByLocale("en") : language;
|
||||
KEY_CHARACTERS.add(Characters.orderByList(Characters.Email.get(0), settings.getOrderedKeyChars(lang, 0), true));
|
||||
KEY_CHARACTERS.add(Characters.orderByList(Characters.Email.get(1), settings.getOrderedKeyChars(lang, 1), true));
|
||||
} else {
|
||||
setCustomSpecialCharacters();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
protected boolean validateLanguage(Language newLanguage) {
|
||||
return LanguageKind.isKorean(newLanguage);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -179,12 +192,6 @@ class ModeCheonjiin extends InputMode {
|
|||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
return LanguageKind.isKorean(newLanguage);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
basicReset();
|
||||
|
|
|
|||
|
|
@ -34,13 +34,8 @@ public class ModeIdeograms extends ModeWords {
|
|||
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
if (newLanguage != null && !newLanguage.isTranscribed() || LanguageKind.isKorean(newLanguage)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setLanguage(newLanguage);
|
||||
return true;
|
||||
public boolean validateLanguage(@Nullable Language newLanguage) {
|
||||
return newLanguage != null && newLanguage.isTranscribed() && !LanguageKind.isKorean(newLanguage);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -15,13 +15,8 @@ public class ModeKanji extends ModePinyin {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
if (LanguageKind.isJapanese(newLanguage)) {
|
||||
setLanguage(newLanguage);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
public boolean validateLanguage(@Nullable Language newLanguage) {
|
||||
return LanguageKind.isJapanese(newLanguage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -20,13 +20,8 @@ public class ModePinyin extends ModeIdeograms {
|
|||
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
if (LanguageKind.isChinesePinyin(newLanguage)) {
|
||||
setLanguage(newLanguage);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
public boolean validateLanguage(@Nullable Language newLanguage) {
|
||||
return LanguageKind.isChinesePinyin(newLanguage);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class ModeWords extends ModeCheonjiin {
|
|||
autoTextCase = new AutoTextCase(settings, inputType);
|
||||
seq = new Sequences();
|
||||
|
||||
changeLanguage(lang);
|
||||
setLanguage(lang);
|
||||
defaultTextCase();
|
||||
determineTextFieldTextCase();
|
||||
}
|
||||
|
|
@ -99,28 +99,28 @@ class ModeWords extends ModeCheonjiin {
|
|||
|
||||
|
||||
@Override
|
||||
public boolean changeLanguage(@Nullable Language newLanguage) {
|
||||
if (newLanguage != null && newLanguage.isTranscribed()) {
|
||||
protected boolean setLanguage(@Nullable Language newLanguage) {
|
||||
if (!super.setLanguage(newLanguage)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
setLanguage(newLanguage);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void setLanguage(@Nullable Language newLanguage) {
|
||||
super.setLanguage(newLanguage);
|
||||
|
||||
allowedTextCases.clear();
|
||||
allowedTextCases.add(CASE_LOWER);
|
||||
if (language.hasUpperCase()) {
|
||||
allowedTextCases.add(CASE_CAPITALIZE);
|
||||
allowedTextCases.add(CASE_UPPER);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean validateLanguage(@Nullable Language newLanguage) {
|
||||
return newLanguage != null && !newLanguage.isTranscribed();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String recompose() {
|
||||
if (!language.hasSpaceBetweenWords() || language.isTranscribed()) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue