1
0
Fork 0

expanding the special chars now works

This commit is contained in:
sspanak 2025-05-08 18:47:48 +03:00 committed by Dimo Karaivanov
parent aecc350b91
commit fb90217610
20 changed files with 111 additions and 87 deletions

View file

@ -17,6 +17,7 @@ import io.github.sspanak.tt9.ui.main.ResizableMainView;
import io.github.sspanak.tt9.ui.tray.SuggestionsBar; import io.github.sspanak.tt9.ui.tray.SuggestionsBar;
import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.util.ConsumerCompat;
import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.util.Text;
import io.github.sspanak.tt9.util.chars.Characters;
public class SuggestionOps { public class SuggestionOps {
@NonNull private final Handler delayedAcceptHandler; @NonNull private final Handler delayedAcceptHandler;
@ -112,6 +113,10 @@ public class SuggestionOps {
public String acceptCurrent() { public String acceptCurrent() {
String word = getCurrent(); String word = getCurrent();
if (Characters.PLACEHOLDER.equals(word)) {
return "";
}
if (!word.isEmpty()) { if (!word.isEmpty()) {
commitCurrent(true, true); commitCurrent(true, true);
} }
@ -122,6 +127,10 @@ public class SuggestionOps {
public String acceptIncomplete() { public String acceptIncomplete() {
String currentWord = this.getCurrent(); String currentWord = this.getCurrent();
if (Characters.PLACEHOLDER.equals(currentWord)) {
return "";
}
commitCurrent(false, true); commitCurrent(false, true);
return currentWord; return currentWord;
@ -129,6 +138,10 @@ public class SuggestionOps {
public String acceptIncompleteAndKeepList() { public String acceptIncompleteAndKeepList() {
if (Characters.PLACEHOLDER.equals(this.getCurrent())) {
return "";
}
commitCurrent(false, false); commitCurrent(false, false);
return this.getCurrent(); return this.getCurrent();
} }
@ -140,6 +153,9 @@ public class SuggestionOps {
} }
String lastComposingText = getCurrent(language, sequenceLength - 1); String lastComposingText = getCurrent(language, sequenceLength - 1);
if (Characters.PLACEHOLDER.equals(lastComposingText)) {
return "";
}
commitCurrent(false, true); commitCurrent(false, true);
return lastComposingText; return lastComposingText;
} }

View file

@ -86,14 +86,23 @@ abstract public class InputMode {
public void onAcceptSuggestion(@NonNull String word) { onAcceptSuggestion(word, false); } public void onAcceptSuggestion(@NonNull String word) { onAcceptSuggestion(word, false); }
public void onAcceptSuggestion(@NonNull String word, boolean preserveWordList) {} public void onAcceptSuggestion(@NonNull String word, boolean preserveWordList) {}
public void onCursorMove(@NonNull String word) { if (!digitSequence.isEmpty()) onAcceptSuggestion(word); } public void onCursorMove(@NonNull String word) { if (!digitSequence.isEmpty()) onAcceptSuggestion(word); }
public void onReplaceSuggestion(@NonNull String rawWord) { public boolean onReplaceSuggestion(@NonNull String rawWord) {
if (SuggestionsBar.SHOW_SPECIAL_CHARS_SUGGESTION.equals(rawWord)) { reset();
Logger.d("InputMode", "Loading special characters for: " + seq.SPECIAL_CHAR_SEQUENCE);
boolean result = false;
if (rawWord.equals(SuggestionsBar.SHOW_SPECIAL_CHARS_SUGGESTION)) {
digitSequence = seq.SPECIAL_CHAR_SEQUENCE;
loadSpecialCharacters();
result = true;
} else if (rawWord.equals(SuggestionsBar.SHOW_CURRENCIES_SUGGESTION)) {
digitSequence = seq.CURRENCY_SEQUENCE;
loadSpecialCharacters();
result = true;
} }
if (SuggestionsBar.SHOW_CURRENCIES_SUGGESTION.equals(rawWord)) { onSuggestionsUpdated.run();
Logger.d("InputMode", "Loading special characters for: " + seq.CURRENCY_SEQUENCE); return result;
}
} }
/** /**
@ -208,9 +217,20 @@ abstract public class InputMode {
} }
/**
* 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.
*/
protected boolean loadSpecialCharacters() { protected boolean loadSpecialCharacters() {
suggestions.clear(); suggestions.clear();
suggestions.addAll(settings.getOrderedKeyChars(language, digitSequence.charAt(0) - '0'));
if (digitSequence.equals(seq.SPECIAL_CHAR_SEQUENCE) || digitSequence.equals(seq.PUNCTUATION_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());
}
return true; return true;
} }

View file

@ -70,9 +70,9 @@ public class ModeBopomofo extends ModePinyin {
@Override @Override
protected void onNumberPress(int nextNumber) { protected void onNumberPress(int nextNumber) {
if (digitSequence.startsWith(seq.PUNCTUATION_SEQUENCE)) { if (seq.startsWithEmojiSequence(digitSequence)) {
digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, nextNumber); digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, nextNumber);
} else { } else if (!seq.SPECIAL_CHAR_SEQUENCE.equals(digitSequence) && !seq.CURRENCY_SEQUENCE.equals(digitSequence)) {
digitSequence += String.valueOf(nextNumber); digitSequence += String.valueOf(nextNumber);
} }
} }

View file

@ -99,7 +99,9 @@ class ModeCheonjiin extends InputMode {
@Override @Override
public boolean onBackspace() { public boolean onBackspace() {
if (digitSequence.equals(seq.PUNCTUATION_SEQUENCE)) { if (digitSequence.equals(seq.CURRENCY_SEQUENCE) || digitSequence.equals(seq.SPECIAL_CHAR_SEQUENCE)) {
digitSequence = seq.WHITESPACE_SEQUENCE;
} else if (digitSequence.equals(seq.PUNCTUATION_SEQUENCE)) {
digitSequence = ""; digitSequence = "";
} else if (digitSequence.equals(seq.WHITESPACE_SEQUENCE) || (!digitSequence.startsWith(seq.PUNCTUATION_SEQUENCE) && Cheonjiin.isSingleJamo(digitSequence))) { } else if (digitSequence.equals(seq.WHITESPACE_SEQUENCE) || (!digitSequence.startsWith(seq.PUNCTUATION_SEQUENCE) && Cheonjiin.isSingleJamo(digitSequence))) {
digitSequence = ""; digitSequence = "";
@ -148,23 +150,27 @@ class ModeCheonjiin extends InputMode {
digitSequence = digitSequence.substring(0, digitSequence.length() - rewindAmount); digitSequence = digitSequence.substring(0, digitSequence.length() - rewindAmount);
} }
if (digitSequence.startsWith(seq.PUNCTUATION_SEQUENCE)) { if (seq.startsWithEmojiSequence(digitSequence)) {
digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, nextNumber); digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, nextNumber);
} else { } else if (!seq.SPECIAL_CHAR_SEQUENCE.equals(digitSequence) && !seq.CURRENCY_SEQUENCE.equals(digitSequence)) {
digitSequence += String.valueOf(nextNumber); digitSequence += String.valueOf(nextNumber);
} }
if (seq.PREFERRED_CHAR_SEQUENCE.equals(digitSequence)) {
autoAcceptTimeout = 0;
}
} }
private int shouldRewindRepeatingNumbers(int nextNumber) { protected int shouldRewindRepeatingNumbers(int nextNumber) {
if (seq.isAnySpecialCharSequence(digitSequence)) {
return 0;
}
final int nextChar = nextNumber + '0'; final int nextChar = nextNumber + '0';
final int repeatingDigits = digitSequence.length() > 1 && digitSequence.charAt(digitSequence.length() - 1) == nextChar ? Cheonjiin.getRepeatingEndingDigits(digitSequence) : 0; final int repeatingDigits = digitSequence.length() > 1 && digitSequence.charAt(digitSequence.length() - 1) == nextChar ? Cheonjiin.getRepeatingEndingDigits(digitSequence) : 0;
final int keyCharsCount = nextNumber == 0 ? 2 : language.getKeyCharacters(nextNumber).size(); final int keyCharsCount = nextNumber == 0 ? 2 : language.getKeyCharacters(nextNumber).size();
if (seq.WHITESPACE_SEQUENCE.equals(digitSequence)) {
return seq.WHITESPACE_SEQUENCE.length();
}
if (repeatingDigits == 0 || keyCharsCount < 2) { if (repeatingDigits == 0 || keyCharsCount < 2) {
return 0; return 0;
} }
@ -246,11 +252,13 @@ class ModeCheonjiin extends InputMode {
return false; return false;
} }
int number = digitSequence.isEmpty() ? Integer.MAX_VALUE : digitSequence.charAt(digitSequence.length() - 1) - '0'; if (digitSequence.equals(seq.WHITESPACE_SEQUENCE) || digitSequence.equals(seq.PUNCTUATION_SEQUENCE)) {
if (KEY_CHARACTERS.size() > number) { int number = digitSequence.isEmpty() ? Integer.MAX_VALUE : digitSequence.charAt(digitSequence.length() - 1) - '0';
suggestions.clear(); if (KEY_CHARACTERS.size() > number) {
suggestions.addAll(KEY_CHARACTERS.get(number)); suggestions.clear();
return true; suggestions.addAll(KEY_CHARACTERS.get(number));
return true;
}
} }
return super.loadSpecialCharacters(); return super.loadSpecialCharacters();
@ -258,7 +266,11 @@ class ModeCheonjiin extends InputMode {
protected boolean shouldDisplaySpecialCharacters() { protected boolean shouldDisplaySpecialCharacters() {
return digitSequence.equals(seq.PUNCTUATION_SEQUENCE) || digitSequence.equals(seq.WHITESPACE_SEQUENCE); return
digitSequence.equals(seq.PUNCTUATION_SEQUENCE)
|| digitSequence.equals(seq.WHITESPACE_SEQUENCE)
|| digitSequence.equals(seq.CURRENCY_SEQUENCE)
|| digitSequence.equals(seq.SPECIAL_CHAR_SEQUENCE);
} }
@ -324,8 +336,8 @@ class ModeCheonjiin extends InputMode {
public boolean shouldAcceptPreviousSuggestion(int nextKey, boolean hold) { public boolean shouldAcceptPreviousSuggestion(int nextKey, boolean hold) {
return return
(hold && !digitSequence.isEmpty()) (hold && !digitSequence.isEmpty())
|| (digitSequence.equals(seq.WHITESPACE_SEQUENCE) && nextKey != 0) || (nextKey != Sequences.SPECIAL_CHAR_KEY && digitSequence.startsWith(seq.WHITESPACE_SEQUENCE))
|| (digitSequence.startsWith(seq.PUNCTUATION_SEQUENCE) && nextKey != 1); || (nextKey != Sequences.PUNCTUATION_KEY && digitSequence.startsWith(seq.PUNCTUATION_SEQUENCE));
} }

View file

@ -176,16 +176,21 @@ public class ModeIdeograms extends ModeWords {
* the given Latin word. * the given Latin word.
*/ */
@Override @Override
public void onReplaceSuggestion(@NonNull String word) { public boolean onReplaceSuggestion(@NonNull String word) {
if (word.isEmpty() || new Text(word).isNumeric()) { if (word.isEmpty() || new Text(word).isNumeric()) {
reset(); reset();
Logger.i(LOG_TAG, "Can not replace an empty or numeric word."); Logger.i(LOG_TAG, "Can not replace an empty or numeric word.");
return; return false;
}
if (super.onReplaceSuggestion(word)) {
return true;
} }
isFiltering = false; isFiltering = false;
stem = word; stem = word;
loadSuggestions(""); loadSuggestions("");
return true;
} }

View file

@ -65,7 +65,7 @@ public class ModePinyin extends ModeIdeograms {
// In East Asian languages, Space must accept the current word, or type a space when there is no word. // In East Asian languages, Space must accept the current word, or type a space when there is no word.
// Here, we handle the case when 0-key is Space, unlike the Space hotkey in HotkeyHandler, // Here, we handle the case when 0-key is Space, unlike the Space hotkey in HotkeyHandler,
// which could be a different key, assigned by the user. // which could be a different key, assigned by the user.
if (!digitSequence.isEmpty() && !digitSequence.endsWith(seq.WHITESPACE_SEQUENCE) && nextKey == Sequences.SPECIAL_CHAR_KEY) { if (!digitSequence.isEmpty() && !digitSequence.equals(seq.WHITESPACE_SEQUENCE) && nextKey == Sequences.SPECIAL_CHAR_KEY) {
ignoreNextSpace = true; ignoreNextSpace = true;
} }

View file

@ -19,6 +19,7 @@ import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Logger;
import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.util.Text;
import io.github.sspanak.tt9.util.TextTools; import io.github.sspanak.tt9.util.TextTools;
import io.github.sspanak.tt9.util.chars.Characters;
class ModeWords extends ModeCheonjiin { class ModeWords extends ModeCheonjiin {
private final String LOG_TAG = getClass().getSimpleName(); private final String LOG_TAG = getClass().getSimpleName();
@ -68,7 +69,12 @@ class ModeWords extends ModeCheonjiin {
return false; return false;
} }
digitSequence = digitSequence.substring(0, digitSequence.length() - 1); if (digitSequence.equals(seq.CURRENCY_SEQUENCE) || digitSequence.equals(seq.SPECIAL_CHAR_SEQUENCE)) {
digitSequence = seq.WHITESPACE_SEQUENCE;
} else {
digitSequence = digitSequence.substring(0, digitSequence.length() - 1);
}
if (digitSequence.isEmpty()) { if (digitSequence.isEmpty()) {
clearWordStem(); clearWordStem();
} else if (stem.length() > digitSequence.length()) { } else if (stem.length() > digitSequence.length()) {
@ -93,16 +99,6 @@ class ModeWords extends ModeCheonjiin {
} }
@Override
protected void onNumberPress(int number) {
digitSequence = EmojiLanguage.validateEmojiSequence(seq, digitSequence, number);
if (digitSequence.equals(seq.PREFERRED_CHAR_SEQUENCE)) {
autoAcceptTimeout = 0;
}
}
@Override @Override
public boolean changeLanguage(@Nullable Language newLanguage) { public boolean changeLanguage(@Nullable Language newLanguage) {
if (newLanguage != null && newLanguage.isTranscribed()) { if (newLanguage != null && newLanguage.isTranscribed()) {
@ -222,7 +218,7 @@ class ModeWords extends ModeCheonjiin {
} }
try { try {
digitSequence = language.getDigitSequenceForWord(newStem); digitSequence = Characters.getWhitespaces(language).contains(newStem) ? seq.WHITESPACE_SEQUENCE : language.getDigitSequenceForWord(newStem);
isStemFuzzy = !exact; isStemFuzzy = !exact;
stem = newStem.toLowerCase(language.getLocale()); stem = newStem.toLowerCase(language.getLocale());
@ -287,7 +283,7 @@ class ModeWords extends ModeCheonjiin {
protected boolean loadPreferredChar() { protected boolean loadPreferredChar() {
if (digitSequence.startsWith(seq.PREFERRED_CHAR_SEQUENCE)) { if (digitSequence.equals(seq.PREFERRED_CHAR_SEQUENCE)) {
suggestions.clear(); suggestions.clear();
suggestions.add(getPreferredChar()); suggestions.add(getPreferredChar());
return true; return true;
@ -408,7 +404,9 @@ class ModeWords extends ModeCheonjiin {
// Prevent typing the preferred character when the user has scrolled the special char suggestions. // 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 // For example, it makes more sense to allow typing "+ " with 0 + scroll + 0, instead of clearing
// the "+" and replacing it with the preferred character. // the "+" and replacing it with the preferred character.
if (!stem.isEmpty() && nextKey == Sequences.SPECIAL_CHAR_KEY && digitSequence.charAt(0) == Sequences.SPECIAL_CHAR_CODE) { boolean specialOrCurrency = digitSequence.equals(seq.SPECIAL_CHAR_SEQUENCE) || digitSequence.equals(seq.CURRENCY_SEQUENCE);
boolean isWhitespaceAndScrolled = digitSequence.equals(seq.WHITESPACE_SEQUENCE) && !stem.isEmpty();
if (nextKey == Sequences.SPECIAL_CHAR_KEY && (isWhitespaceAndScrolled || specialOrCurrency)) {
return true; return true;
} }
@ -466,6 +464,9 @@ class ModeWords extends ModeCheonjiin {
} }
@Override protected int shouldRewindRepeatingNumbers(int nextNumber) { return 0; }
@NonNull @NonNull
@Override @Override
public String toString() { public String toString() {

View file

@ -40,6 +40,12 @@ public class Sequences {
CURRENCY_SEQUENCE = SPECIAL_CHAR_SEQUENCE + SPECIAL_CHAR_KEY; CURRENCY_SEQUENCE = SPECIAL_CHAR_SEQUENCE + SPECIAL_CHAR_KEY;
} }
public boolean startsWithEmojiSequence(String sequence) {
return
sequence != null
&& (sequence.startsWith(EMOJI_SEQUENCE) || sequence.startsWith(CUSTOM_EMOJI_SEQUENCE));
}
public boolean isAnySpecialCharSequence(String sequence) { public boolean isAnySpecialCharSequence(String sequence) {
if (sequence == null) { if (sequence == null) {
return false; return false;

View file

@ -109,10 +109,10 @@ public class SoftKeyNumber2to9 extends SoftKeyNumber {
*/ */
private String abbreviateCharList(String chars, String abbreviationSign, Locale locale, boolean isUppercase) { private String abbreviateCharList(String chars, String abbreviationSign, Locale locale, boolean isUppercase) {
String firstLetter = chars.substring(0, 1); String firstLetter = chars.substring(0, 1);
firstLetter = TextTools.isCombining(firstLetter) ? Characters.PLACEHOLDER + firstLetter : firstLetter; firstLetter = TextTools.isCombining(firstLetter) ? Characters.COMBINING_BASE + firstLetter : firstLetter;
String lastLetter = chars.substring(chars.length() - 1); String lastLetter = chars.substring(chars.length() - 1);
lastLetter = TextTools.isCombining(lastLetter) ? Characters.PLACEHOLDER + lastLetter : lastLetter; lastLetter = TextTools.isCombining(lastLetter) ? Characters.COMBINING_BASE + lastLetter : lastLetter;
String list = firstLetter + abbreviationSign + lastLetter; String list = firstLetter + abbreviationSign + lastLetter;
return isUppercase ? list.toUpperCase(locale) : list; return isUppercase ? list.toUpperCase(locale) : list;

View file

@ -27,8 +27,8 @@ import io.github.sspanak.tt9.util.TextTools;
import io.github.sspanak.tt9.util.chars.Characters; import io.github.sspanak.tt9.util.chars.Characters;
public class SuggestionsBar { public class SuggestionsBar {
public static final String SHOW_SPECIAL_CHARS_SUGGESTION = "(@#*…)"; public static final String SHOW_SPECIAL_CHARS_SUGGESTION = "#%…";
public static final String SHOW_CURRENCIES_SUGGESTION = "($€£…)"; public static final String SHOW_CURRENCIES_SUGGESTION = "$€…";
private final String SHOW_MORE_SUGGESTION = "(...)"; private final String SHOW_MORE_SUGGESTION = "(...)";
private final String STEM_SUFFIX = "… +"; private final String STEM_SUFFIX = "… +";
@ -165,7 +165,7 @@ public class SuggestionsBar {
// "..." prefix // "..." prefix
int startIndex = 0; int startIndex = 0;
String[] prefixes = {STEM_VARIATION_PREFIX, STEM_PUNCTUATION_VARIATION_PREFIX, Characters.PLACEHOLDER}; String[] prefixes = {STEM_VARIATION_PREFIX, STEM_PUNCTUATION_VARIATION_PREFIX, Characters.COMBINING_BASE};
for (String prefix : prefixes) { for (String prefix : prefixes) {
int prefixIndex = suggestion.indexOf(prefix) + 1; int prefixIndex = suggestion.indexOf(prefix) + 1;
if (prefixIndex < endIndex) { // do not match the prefix chars when they are part of STEM_SUFFIX if (prefixIndex < endIndex) { // do not match the prefix chars when they are part of STEM_SUFFIX
@ -324,7 +324,7 @@ public class SuggestionsBar {
private String formatUnreadableSuggestion(String suggestion) { private String formatUnreadableSuggestion(String suggestion) {
if (TextTools.isCombining(suggestion)) { if (TextTools.isCombining(suggestion)) {
return Characters.PLACEHOLDER + suggestion; return Characters.COMBINING_BASE + suggestion;
} }
return switch (suggestion) { return switch (suggestion) {

View file

@ -10,9 +10,10 @@ import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.languages.LanguageKind; import io.github.sspanak.tt9.languages.LanguageKind;
public class Characters extends Emoji { public class Characters extends Emoji {
public static final String PLACEHOLDER = ""; public static final String COMBINING_BASE = "";
public static final String IDEOGRAPHIC_SPACE = " "; public static final String IDEOGRAPHIC_SPACE = " ";
public static final String TAB = ""; public static final String PLACEHOLDER = "\u200A";
public static final String TAB = "Tab";
public static final ArrayList<String> Currency = new ArrayList<>(Arrays.asList( public static final ArrayList<String> Currency = new ArrayList<>(Arrays.asList(

View file

@ -69,20 +69,16 @@ _**Hinweis 2:** Um Nachrichten mit OK in Nachrichtenanwendungen zu senden, müss
- **Im 123 Modus:** - **Im 123 Modus:**
- **Drücken:** tippt „0“. - **Drücken:** tippt „0“.
- **Halten:** tippt Sonder-/Mathematikzeichen. - **Halten:** tippt Sonder-/Mathematikzeichen.
- **Halten der „0“ und Drücken der Umschalt-Taste (Standard: Halten der „0“, Drücken von „✱“):** tippt Währungszeichen
- **Im ABC Modus:** - **Im ABC Modus:**
- **Drücken:** tippt Leerzeichen, neue Zeile oder Sonder-/Mathematikzeichen. - **Drücken:** tippt Leerzeichen, neue Zeile oder Sonder-/Mathematikzeichen.
- **Halten:** tippt „0“. - **Halten:** tippt „0“.
- **Drücken „0“ und Drücken der Umschalt-Taste (Standard: Drücken „0“, „✱“):** tippt Währungszeichen
- **Im Prädiktiven Modus:** - **Im Prädiktiven Modus:**
- **Drücken:** tippt Leerzeichen, neue Zeile oder Sonder-/Mathematikzeichen. - **Drücken:** tippt Leerzeichen, neue Zeile oder Sonder-/Mathematikzeichen.
- **Doppeldruck:** tippt das Zeichen, das in den Einstellungen für den Prädiktiven Modus zugewiesen wurde (Standard: „.“) - **Doppeldruck:** tippt das Zeichen, das in den Einstellungen für den Prädiktiven Modus zugewiesen wurde (Standard: „.“)
- **Halten:** tippt „0“. - **Halten:** tippt „0“.
- **Drücken „0“ und Drücken der Umschalt-Taste (Standard: Drücken „0“, „✱“):** tippt Währungszeichen
- **Im Cheonjiin-Modus (Koreanisch):** - **Im Cheonjiin-Modus (Koreanisch):**
- **Drücken:** Gibt "ㅇ" und "ㅁ" ein. - **Drücken:** Gibt "ㅇ" und "ㅁ" ein.
- **Halten:** Gibt Leerzeichen, neue Zeilen, "0" oder Sonder-/Mathematikzeichen ein. - **Halten:** Gibt Leerzeichen, neue Zeilen, "0" oder Sonder-/Mathematikzeichen ein.
- **Halten von "0" und Drücken von Shift (Standard: Halten von "0", Drücken von "✱"):** Gibt Währungszeichen ein.
#### 1-Taste: #### 1-Taste:
- **Im 123 Modus:** - **Im 123 Modus:**

View file

@ -69,20 +69,16 @@ _**Note 2:** To send messages with OK in messaging applications, you must enable
- **In 123 mode:** - **In 123 mode:**
- **Press:** type "0". - **Press:** type "0".
- **Hold:** type special/math characters. - **Hold:** type special/math characters.
- **Hold "0", then press Shift (Default: hold "0", press "✱"):** type currency characters.
- **In ABC mode:** - **In ABC mode:**
- **Press:** type space, newline, or special/math characters. - **Press:** type space, newline, or special/math characters.
- **Hold:** type "0". - **Hold:** type "0".
- **Press "0", then press Shift (Default: press "0", "✱"):** type currency characters.
- **In Predictive mode:** - **In Predictive mode:**
- **Press:** type space, newline, or special/math characters. - **Press:** type space, newline, or special/math characters.
- **Double press:** type the character assigned in Predictive mode settings. (Default: ".") - **Double press:** type the character assigned in Predictive mode settings. (Default: ".")
- **Hold:** type "0". - **Hold:** type "0".
- **Press "0", then press Shift (Default: press "0", "✱"):** type currency characters.
- **In Cheonjiin mode (Korean):** - **In Cheonjiin mode (Korean):**
- **Press:** type "ㅇ" and "ㅁ". - **Press:** type "ㅇ" and "ㅁ".
- **Hold:** type space, newline, 0, or special/math characters. - **Hold:** type space, newline, 0, or special/math characters.
- **Hold "0", then press Shift (Default: hold "0", press "✱"):** type currency characters.
#### 1-key: #### 1-key:
- **In 123 mode:** - **In 123 mode:**

View file

@ -69,20 +69,16 @@ _**Nota 2:** Para enviar mensajes con OK en aplicaciones de mensajería, debes h
- **En modo 123:** - **En modo 123:**
- **Presione:** escribir "0". - **Presione:** escribir "0".
- **Mantenga presionado:** escribir caracteres especiales/matemáticos. - **Mantenga presionado:** escribir caracteres especiales/matemáticos.
- **Mantenga presionado "0", luego presione Shift (Por Defecto: mantenga presionado "0", presione "✱")**: escribir caracteres de moneda.
- **En modo ABC:** - **En modo ABC:**
- **Presione:** escribir un espacio, nueva línea o caracteres especiales/matemáticos. - **Presione:** escribir un espacio, nueva línea o caracteres especiales/matemáticos.
- **Mantenga presionado:** escribir "0". - **Mantenga presionado:** escribir "0".
- **Presione "0", luego presione Shift (Por Defecto: presione "0", "✱")**: escribir caracteres de moneda.
- **En modo Predictivo:** - **En modo Predictivo:**
- **Presione:** escribir un espacio, nueva línea o caracteres especiales/matemáticos. - **Presione:** escribir un espacio, nueva línea o caracteres especiales/matemáticos.
- **Presione dos veces:** escribir el carácter asignado en la configuración de modo predictivo. (Por Defecto: ".") - **Presione dos veces:** escribir el carácter asignado en la configuración de modo predictivo. (Por Defecto: ".")
- **Mantenga presionado:** escribir "0". - **Mantenga presionado:** escribir "0".
- **Presione "0", luego presione Shift (Por Defecto: presione "0", "✱")**: escribir caracteres de moneda.
- **En modo Cheonjiin (Coreano):** - **En modo Cheonjiin (Coreano):**
- **Presione:** escribir "ㅇ" y "ㅁ". - **Presione:** escribir "ㅇ" y "ㅁ".
- **Mantenga presionado:** escribir espacio, nueva línea, "0" o caracteres especiales/matemáticos. - **Mantenga presionado:** escribir espacio, nueva línea, "0" o caracteres especiales/matemáticos.
- **Mantenga presionado "0", luego presione Shift (Por Defecto: Mantenga presionado "0", presione "✱"):** escribir caracteres de moneda.
#### Tecla 1: #### Tecla 1:
- **En modo 123:** - **En modo 123:**

View file

@ -69,20 +69,16 @@ _**Remarque 2** : Pour envoyer des messages avec OK dans les applications de mes
- **En mode 123 :** - **En mode 123 :**
- **Appui** : tape "0". - **Appui** : tape "0".
- **Appui long** : tape des caractères spéciaux/mathématiques. - **Appui long** : tape des caractères spéciaux/mathématiques.
- **Appui long sur "0", puis appui sur Maj (par défaut : appui long sur "0", puis sur "✱") :** tape des symboles monétaires.
- **En mode ABC :** - **En mode ABC :**
- **Appui** : tape espace, nouvelle ligne, ou caractères spéciaux/mathématiques. - **Appui** : tape espace, nouvelle ligne, ou caractères spéciaux/mathématiques.
- **Appui long** : tape "0". - **Appui long** : tape "0".
- **Appui sur "0", puis appui sur Maj (par défaut : appui sur "0", "✱") :** tape des symboles monétaires.
- **En mode Prédictif :** - **En mode Prédictif :**
- **Appui** : tape un espace, une nouvelle ligne, ou caractères spéciaux/mathématiques. - **Appui** : tape un espace, une nouvelle ligne, ou caractères spéciaux/mathématiques.
- **Double appui** : tape le caractère attribué dans les paramètres du mode Prédictif (par défaut : "."). - **Double appui** : tape le caractère attribué dans les paramètres du mode Prédictif (par défaut : ".").
- **Appui long** : tape "0". - **Appui long** : tape "0".
- **Appui sur "0", puis appui sur Maj (par défaut : appui sur "0", "✱") :** tape des symboles monétaires.
- **En mode Cheonjiin (Coréen) :** - **En mode Cheonjiin (Coréen) :**
- **Appui :** tape "ㅇ" et "ㅁ". - **Appui :** tape "ㅇ" et "ㅁ".
- **Appui long :** tape un espace, une nouvelle ligne, "0" ou des caractères spéciaux/mathématiques. - **Appui long :** tape un espace, une nouvelle ligne, "0" ou des caractères spéciaux/mathématiques.
- **Appui long sur "0", puis appui sur Maj (Par défaut : appui long sur "0", appuyer sur "✱") :** tape des symboles monétaires.
#### Touche 1 : #### Touche 1 :
- **En mode 123 :** - **En mode 123 :**

View file

@ -69,20 +69,16 @@ _**Nota 2:** Per inviare messaggi con OK nelle applicazioni di messaggistica, è
- **In modalità 123:** - **In modalità 123:**
- **Premere:** digita "0". - **Premere:** digita "0".
- **Tenere premuto:** digita caratteri speciali/matematici. - **Tenere premuto:** digita caratteri speciali/matematici.
- **Tenere premuto "0", quindi premere Maiusc (Default: tenere premuto "0", premere "✱"):** digita caratteri di valuta
- **In modalità ABC:** - **In modalità ABC:**
- **Premere:** digita spazio, nuova riga o caratteri speciali/matematici. - **Premere:** digita spazio, nuova riga o caratteri speciali/matematici.
- **Tenere premuto:** digita "0". - **Tenere premuto:** digita "0".
- **Premere "0", quindi premere Maiusc (Default: premere "0", "✱"):** digita caratteri di valuta
- **In modalità Predittiva:** - **In modalità Predittiva:**
- **Premere:** digita uno spazio, una nuova linea, "0" o caratteri speciali/matematici. - **Premere:** digita uno spazio, una nuova linea, "0" o caratteri speciali/matematici.
- **Premere due volte:** digita il carattere assegnato nelle impostazioni della modalità predittiva. (Default: ".") - **Premere due volte:** digita il carattere assegnato nelle impostazioni della modalità predittiva. (Default: ".")
- **Tenere premuto:** digita "0". - **Tenere premuto:** digita "0".
- **Premere "0", quindi premere Maiusc (Default: premere "0", "✱"):** digita caratteri di valuta
- **In modalità Cheonjiin (Coreano):** - **In modalità Cheonjiin (Coreano):**
- **Premere:** digita "ㅇ" e "ㅁ". - **Premere:** digita "ㅇ" e "ㅁ".
- **Tenere premuto:** digita uno spazio, una nuova linea, "0" o caratteri speciali/matematici. - **Tenere premuto:** digita uno spazio, una nuova linea, "0" o caratteri speciali/matematici.
- **Tenere premuto "0", poi premere Maiusc (Predefinito: tenere premuto "0", premere "✱"):** Digita caratteri monetari.
#### Tasto 1: #### Tasto 1:
- **In modalità 123:** - **In modalità 123:**

View file

@ -69,21 +69,16 @@ _**Nota 2**: Para enviar mensagens com OK em aplicativos de mensagens, você dev
- **No modo 123:** - **No modo 123:**
- **Toque**: insere "0". - **Toque**: insere "0".
- **Pressione e segure**: insere caracteres especiais/matemáticos. - **Pressione e segure**: insere caracteres especiais/matemáticos.
- **Pressione e segure "0", depois pressione Shift (padrão: pressione e segure "0", depois "*")**: insere símbolos monetários.
- **No modo ABC:** - **No modo ABC:**
- **Toque**: insere espaço, nova linha, ou caracteres especiais/matemáticos. - **Toque**: insere espaço, nova linha, ou caracteres especiais/matemáticos.
- **Pressione e segure**: insere "0". - **Pressione e segure**: insere "0".
- **Pressione "0", depois pressione Shift (padrão: pressione "0", "*")**: insere símbolos monetários.
- **No modo Preditivo:** - **No modo Preditivo:**
- **Toque**: insere espaço, nova linha, ou caracteres especiais/matemáticos. - **Toque**: insere espaço, nova linha, ou caracteres especiais/matemáticos.
- **Toque duas vezes**: insere o caractere atribuído nas configurações do modo Preditivo (padrão: "."). - **Toque duas vezes**: insere o caractere atribuído nas configurações do modo Preditivo (padrão: ".").
- **Pressione e segure**: insere "0". - **Pressione e segure**: insere "0".
- **Pressione "0", depois pressione Shift (padrão: pressione "0", "✱")**: insere símbolos monetários.
- **No modo Cheonjiin (Coreano):** - **No modo Cheonjiin (Coreano):**
- **Pressione:** insere "ㅇ" e "ㅁ". - **Pressione:** insere "ㅇ" e "ㅁ".
- **Segure:** insere espaço, nova linha, "0" ou caracteres especiais/matemáticos. - **Segure:** insere espaço, nova linha, "0" ou caracteres especiais/matemáticos.
- **Segure "0", depois pressione Shift (Padrão: segure "0", pressione "✱")**: insere símbolos monetários.
#### Tecla 1: #### Tecla 1:
- **No modo 123:** - **No modo 123:**

View file

@ -69,20 +69,16 @@ _**Примечание 2:** Чтобы отправлять сообщения
- **В режиме 123:** - **В режиме 123:**
- **Нажатие:** ввести "0". - **Нажатие:** ввести "0".
- **Удержание:** ввести специальные/математические символы. - **Удержание:** ввести специальные/математические символы.
- **Удержание "0", затем нажатие Shift (По умолчанию: удержание "0", нажатие "✱")**: ввести символы валют
- **В режиме ABC:** - **В режиме ABC:**
- **Нажатие:** ввести пробел, новую строку или специальные/математические символы. - **Нажатие:** ввести пробел, новую строку или специальные/математические символы.
- **Удержание:** ввести "0". - **Удержание:** ввести "0".
- **Нажатие "0", затем нажатие Shift (По умолчанию: нажатие "0", "✱")**: ввести символы валют
- **В режиме Предсказания:** - **В режиме Предсказания:**
- **Нажатие:** ввести пробел, новую строку или специальные/математические символы. - **Нажатие:** ввести пробел, новую строку или специальные/математические символы.
- **Двойное нажатие:** ввести символ, назначенный в настройках режима Предсказания (по умолчанию: "."). - **Двойное нажатие:** ввести символ, назначенный в настройках режима Предсказания (по умолчанию: ".").
- **Удержание:** ввести "0". - **Удержание:** ввести "0".
- **Нажатие "0", затем нажатие Shift (По умолчанию: нажатие "0", "✱")**: ввести символы валют
- **В режиме Чонджиин (Корейский):** - **В режиме Чонджиин (Корейский):**
- **Нажатие:** ввести "ㅇ" и "ㅁ". - **Нажатие:** ввести "ㅇ" и "ㅁ".
- **Удержание:** ввести пробел, новую строку, "0" или специальные/математические символы. - **Удержание:** ввести пробел, новую строку, "0" или специальные/математические символы.
- **Удержание "0", затем нажатие Shift (По умолчанию: удержание "0", нажатие "✱")**: ввести валютные символы.
#### Клавиша 1: #### Клавиша 1:
- **В режиме 123:** - **В режиме 123:**

View file

@ -69,20 +69,16 @@ _**Not 2:** Mesajlaşma uygulamalarında OK ile mesaj göndermek için, uygulama
- **123 modunda:** - **123 modunda:**
- **Bas:** "0" yaz. - **Bas:** "0" yaz.
- **Basılı tut:** özel/matematik karakterleri yaz. - **Basılı tut:** özel/matematik karakterleri yaz.
- **"0" basılı tut, ardından Shift'e bas (Varsayılan: "0"u basılı tut, "✱"e bas):** para birimi karakterleri yaz.
- **ABC modunda:** - **ABC modunda:**
- **Bas:** boşluk, yeni satır veya özel/matematik karakterleri yaz. - **Bas:** boşluk, yeni satır veya özel/matematik karakterleri yaz.
- **Basılı tut:** "0" yaz. - **Basılı tut:** "0" yaz.
- **"0" bas, ardından Shift'e bas (Varsayılan: "0" bas, "✱"e bas):** para birimi karakterleri yaz.
- **Tahmin modunda:** - **Tahmin modunda:**
- **Bas:** boşluk, yeni satır veya özel/matematik karakterleri yaz. - **Bas:** boşluk, yeni satır veya özel/matematik karakterleri yaz.
- **Çift bas:** Tahmin modunda ayarlanan karakteri yaz. (Varsayılan: ".") - **Çift bas:** Tahmin modunda ayarlanan karakteri yaz. (Varsayılan: ".")
- **Basılı tut:** "0" yaz. - **Basılı tut:** "0" yaz.
- **"0" bas, ardından Shift'e bas (Varsayılan: "0" bas, "✱"e bas):** para birimi karakterleri yaz.
- **Cheonjiin modunda (Korece):** - **Cheonjiin modunda (Korece):**
- **Bas:** "ㅇ" ve "ㅁ" yaz. - **Bas:** "ㅇ" ve "ㅁ" yaz.
- **Basılı tut:** boşluk, yeni satır, "0" veya özel/matematiksel karakterler yaz. - **Basılı tut:** boşluk, yeni satır, "0" veya özel/matematiksel karakterler yaz.
- **"0" tuşuna basılı tut, ardından Shift'e bas (Varsayılan: "0" tuşunu basılı tutun, "✱"ye basın):** Para birimi karakterleri yazar.
#### 1-tușu: #### 1-tușu:
- **123 modunda:** - **123 modunda:**

View file

@ -69,20 +69,16 @@ _**Примітка 2:** Для відправлення повідомлень
- **У режимі 123:** - **У режимі 123:**
- **Натискання:** вводить "0". - **Натискання:** вводить "0".
- **Утримування:** вводить спеціальні/математичні символи. - **Утримування:** вводить спеціальні/математичні символи.
- **Утримування "0", потім натискання Shift (за замовчуванням: утримування "0", натискання "✱")**: вводить символи валюти.
- **У режимі ABC:** - **У режимі ABC:**
- **Натискання:** вводить пробіл, новий рядок або спеціальні/математичні символи. - **Натискання:** вводить пробіл, новий рядок або спеціальні/математичні символи.
- **Утримування:** вводить "0". - **Утримування:** вводить "0".
- **Натискання "0", потім натискання Shift (за замовчуванням: натискання "0", "✱")**: вводить символи валюти.
- **У режимі Прогнозування:** - **У режимі Прогнозування:**
- **Натискання:** вводить пробіл, новий рядок або спеціальні/математичні символи. - **Натискання:** вводить пробіл, новий рядок або спеціальні/математичні символи.
- **Подвійне натискання:** вводить символ, призначений у налаштуваннях режиму Прогнозування (за замовчуванням "."). - **Подвійне натискання:** вводить символ, призначений у налаштуваннях режиму Прогнозування (за замовчуванням ".").
- **Утримування:** вводить "0". - **Утримування:** вводить "0".
- **Натискання "0", потім натискання Shift (за замовчуванням: натискання "0", "✱")**: вводить символи валюти.
- **У режимі Чонджиін (Корейська):** - **У режимі Чонджиін (Корейська):**
- **Натискання:** вводить "ㅇ" та "ㅁ". - **Натискання:** вводить "ㅇ" та "ㅁ".
- **Утримування:** вводить пробіл, новий рядок, "0" або спеціальні/математичні символи. - **Утримування:** вводить пробіл, новий рядок, "0" або спеціальні/математичні символи.
- **Утримування "0", потім натискання Shift (за замовчуванням: утримування "0", натискання "✱"):** вводить символи валюти.
#### Клавіша 1: #### Клавіша 1:
- **У режимі 123:** - **У режимі 123:**