1
0
Fork 0

All commands can be assigned to hotkeys (#582)

This commit is contained in:
Dimo Karaivanov 2024-07-31 11:25:27 +03:00 committed by GitHub
parent 00680e804c
commit 907bb90c64
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 260 additions and 82 deletions

View file

@ -57,7 +57,7 @@ abstract public class CommandHandler extends TextEditingHandler {
showTextEditingPalette();
break;
case 8:
changeKeyboard();
selectKeyboard();
break;
}
}
@ -99,7 +99,7 @@ abstract public class CommandHandler extends TextEditingHandler {
}
public void changeKeyboard() {
public void selectKeyboard() {
suggestionOps.cancelDelayedAccept();
stopVoiceInput();
UI.showChangeKeyboardDialog(this);

View file

@ -62,10 +62,18 @@ public abstract class HotkeyHandler extends CommandHandler {
return false;
}
if (keyCode == settings.getKeyAddWord()) {
return onKeyAddWord(validateOnly);
}
if (keyCode == settings.getKeyCommandPalette()) {
return onKeyCommandPalette(validateOnly);
}
if (keyCode == settings.getKeyEditText()) {
return onKeyEditText(validateOnly);
}
if (keyCode == settings.getKeyFilterClear()) {
return onKeyFilterClear(validateOnly);
}
@ -91,13 +99,72 @@ public abstract class HotkeyHandler extends CommandHandler {
}
if (keyCode == settings.getKeyTab()) {
return onTab(validateOnly);
return onKeyTab(validateOnly);
}
if (keyCode == settings.getKeySelectKeyboard()) {
return onKeySelectKeyboard(validateOnly);
}
if (keyCode == settings.getKeyShowSettings()) {
return onKeyShowSettings(validateOnly);
}
if (keyCode == settings.getKeyVoiceInput()) {
return onKeyVoiceInput(validateOnly);
}
return false;
}
private boolean onKeyAddWord(boolean validateOnly) {
if (!isInputViewShown() || shouldBeOff()) {
return false;
}
if (!validateOnly) {
addWord();
}
return true;
}
public boolean onKeyCommandPalette(boolean validateOnly) {
if (shouldBeOff()) {
return false;
}
if (validateOnly) {
return true;
}
if (mainView.isCommandPaletteShown()) {
hideCommandPalette();
} else {
showCommandPalette();
forceShowWindow();
}
return true;
}
private boolean onKeyEditText(boolean validateOnly) {
if (!isInputViewShown() || shouldBeOff()) {
return false;
}
if (!validateOnly) {
showTextEditingPalette();
forceShowWindow();
}
return true;
}
public boolean onKeyMoveCursor(boolean backward) {
if (textSelection.isEmpty()) {
return appHacks.onMoveCursor(backward) || textField.moveCursor(backward);
@ -227,27 +294,7 @@ public abstract class HotkeyHandler extends CommandHandler {
}
public boolean onKeyCommandPalette(boolean validateOnly) {
if (shouldBeOff()) {
return false;
}
if (validateOnly) {
return true;
}
if (mainView.isCommandPaletteShown()) {
hideCommandPalette();
} else {
showCommandPalette();
forceShowWindow();
}
return true;
}
public boolean onTab(boolean validateOnly) {
public boolean onKeyTab(boolean validateOnly) {
if (shouldBeOff()) {
return false;
}
@ -264,4 +311,41 @@ public abstract class HotkeyHandler extends CommandHandler {
return true;
}
private boolean onKeySelectKeyboard(boolean validateOnly) {
if (!isInputViewShown() || shouldBeOff()) {
return false;
}
if (!validateOnly) {
selectKeyboard();
}
return true;
}
private boolean onKeyShowSettings(boolean validateOnly) {
if (!isInputViewShown() || shouldBeOff()) {
return false;
}
if (!validateOnly) {
showSettings();
}
return true;
}
private boolean onKeyVoiceInput(boolean validateOnly) {
if (!isInputViewShown() || shouldBeOff() || !voiceInputOps.isAvailable()) {
return false;
}
if (!validateOnly) {
toggleVoiceInput();
}
return true;
}
}

View file

@ -1,7 +1,7 @@
package io.github.sspanak.tt9.ime.voice;
import android.content.Context;
import android.content.Intent;
import android.inputmethodservice.InputMethodService;
import android.os.Build;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
@ -20,7 +20,7 @@ public class VoiceInputOps {
private final boolean isRecognitionAvailable;
private final InputMethodService ims;
private final Context ims;
private Language language;
private SpeechRecognizer speechRecognizer;
private final VoiceListener listener;
@ -30,7 +30,7 @@ public class VoiceInputOps {
public VoiceInputOps(
@NonNull InputMethodService ims,
@NonNull Context ims,
Runnable onStart,
ConsumerCompat<String> onStop,
ConsumerCompat<VoiceInputError> onError

View file

@ -6,10 +6,12 @@ import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.ViewConfiguration;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Set;
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.preferences.screens.hotkeys.SectionKeymap;
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
public class Hotkeys {
@ -17,7 +19,7 @@ public class Hotkeys {
private final Resources resources;
private final String holdKeyTranslation;
private final LinkedHashMap<String, String> KEYS = new LinkedHashMap<>();
private final LinkedHashMap<String, String> HARDWARE_KEYS = new LinkedHashMap<>();
public Hotkeys(Context context) {
@ -30,13 +32,13 @@ public class Hotkeys {
}
public String get(String key) {
return KEYS.get(key);
public String getHardwareKeyName(String key) {
return HARDWARE_KEYS.get(key);
}
public Set<String> toSet() {
return KEYS.keySet();
public Set<String> getHardwareKeys() {
return HARDWARE_KEYS.keySet();
}
@ -52,31 +54,50 @@ public class Hotkeys {
* Arrow keys for manipulating suggestions are also assigned only if available.
*/
public static void setDefault(SettingsStore settings) {
int backspace = KeyEvent.KEYCODE_BACK;
HashMap<String, Integer> defaultKeys = new HashMap<>();
defaultKeys.put(SectionKeymap.ITEM_ADD_WORD, KeyEvent.KEYCODE_UNKNOWN); // unassigned
defaultKeys.put(SectionKeymap.ITEM_BACKSPACE, KeyEvent.KEYCODE_BACK);
if (
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_CLEAR)
|| KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DEL)
|| settings.isMainLayoutNumpad()
) {
backspace = 0;
defaultKeys.put(SectionKeymap.ITEM_BACKSPACE, 0);
}
int clearFilter = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_DOWN) ? KeyEvent.KEYCODE_DPAD_DOWN : 0;
int filter = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_UP) ? KeyEvent.KEYCODE_DPAD_UP : 0;
int nextSuggestion = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_RIGHT) ? KeyEvent.KEYCODE_DPAD_RIGHT : 0;
int previousSuggestion = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_LEFT) ? KeyEvent.KEYCODE_DPAD_LEFT : 0;
defaultKeys.put(SectionKeymap.ITEM_COMMAND_PALETTE, KeyEvent.KEYCODE_STAR);
defaultKeys.put(SectionKeymap.ITEM_EDIT_TEXT, KeyEvent.KEYCODE_UNKNOWN);
settings.setDefaultKeys(
backspace,
KeyEvent.KEYCODE_STAR,
clearFilter,
filter,
previousSuggestion,
nextSuggestion,
KeyEvent.KEYCODE_POUND,
-KeyEvent.KEYCODE_POUND, // negative means "hold"
KeyEvent.KEYCODE_UNKNOWN // unassigned
defaultKeys.put(
SectionKeymap.ITEM_FILTER_CLEAR,
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_DOWN) ? KeyEvent.KEYCODE_DPAD_DOWN : 0
);
defaultKeys.put(
SectionKeymap.ITEM_FILTER_SUGGESTIONS,
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_UP) ? KeyEvent.KEYCODE_DPAD_UP : 0
);
defaultKeys.put(
SectionKeymap.ITEM_PREVIOUS_SUGGESTION,
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_LEFT) ? KeyEvent.KEYCODE_DPAD_LEFT : 0
);
defaultKeys.put(
SectionKeymap.ITEM_NEXT_SUGGESTION,
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DPAD_RIGHT) ? KeyEvent.KEYCODE_DPAD_RIGHT : 0
);
defaultKeys.put(SectionKeymap.ITEM_NEXT_INPUT_MODE, KeyEvent.KEYCODE_POUND);
defaultKeys.put(SectionKeymap.ITEM_NEXT_LANGUAGE, -KeyEvent.KEYCODE_POUND); // negative means "hold"
defaultKeys.put(SectionKeymap.ITEM_TAB, KeyEvent.KEYCODE_UNKNOWN);
defaultKeys.put(SectionKeymap.ITEM_SELECT_KEYBOARD, KeyEvent.KEYCODE_UNKNOWN);
defaultKeys.put(SectionKeymap.ITEM_SHOW_SETTINGS, KeyEvent.KEYCODE_UNKNOWN);
defaultKeys.put(SectionKeymap.ITEM_VOICE_INPUT, KeyEvent.KEYCODE_UNKNOWN);
settings.setDefaultKeys(defaultKeys);
}
@ -111,10 +132,10 @@ public class Hotkeys {
* No validation will be performed.
*/
private void add(int code, String name, boolean allowHold) {
KEYS.put(String.valueOf(code), name);
HARDWARE_KEYS.put(String.valueOf(code), name);
if (allowHold) {
KEYS.put(String.valueOf(-code), name + " " + holdKeyTranslation);
HARDWARE_KEYS.put(String.valueOf(-code), name + " " + holdKeyTranslation);
}
}

View file

@ -20,8 +20,10 @@ public class HotkeysScreen extends BaseScreenFragment {
@Override
public void onCreate() {
DropDownPreference[] dropDowns = {
findPreference(SectionKeymap.ITEM_ADD_WORD),
findPreference(SectionKeymap.ITEM_BACKSPACE),
findPreference(SectionKeymap.ITEM_COMMAND_PALETTE),
findPreference(SectionKeymap.ITEM_EDIT_TEXT),
findPreference(SectionKeymap.ITEM_FILTER_CLEAR),
findPreference(SectionKeymap.ITEM_FILTER_SUGGESTIONS),
findPreference(SectionKeymap.ITEM_PREVIOUS_SUGGESTION),
@ -29,6 +31,9 @@ public class HotkeysScreen extends BaseScreenFragment {
findPreference(SectionKeymap.ITEM_NEXT_INPUT_MODE),
findPreference(SectionKeymap.ITEM_NEXT_LANGUAGE),
findPreference(SectionKeymap.ITEM_TAB),
findPreference(SectionKeymap.ITEM_SELECT_KEYBOARD),
findPreference(SectionKeymap.ITEM_SHOW_SETTINGS),
findPreference(SectionKeymap.ITEM_VOICE_INPUT),
};
SectionKeymap section = new SectionKeymap(Arrays.asList(dropDowns), activity);
section.populate().activate();

View file

@ -6,14 +6,17 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;
import io.github.sspanak.tt9.ime.voice.VoiceInputOps;
import io.github.sspanak.tt9.preferences.PreferencesActivity;
import io.github.sspanak.tt9.preferences.helpers.Hotkeys;
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.util.Logger;
public class SectionKeymap {
public static final String ITEM_ADD_WORD = "key_add_word";
public static final String ITEM_BACKSPACE = "key_backspace";
public static final String ITEM_COMMAND_PALETTE = "key_command_palette";
public static final String ITEM_EDIT_TEXT = "key_edit_text";
public static final String ITEM_FILTER_CLEAR = "key_filter_clear";
public static final String ITEM_FILTER_SUGGESTIONS = "key_filter_suggestions";
public static final String ITEM_PREVIOUS_SUGGESTION = "key_previous_suggestion";
@ -21,16 +24,21 @@ public class SectionKeymap {
public static final String ITEM_NEXT_INPUT_MODE = "key_next_input_mode";
public static final String ITEM_NEXT_LANGUAGE = "key_next_language";
public static final String ITEM_TAB = "key_tab";
public static final String ITEM_SELECT_KEYBOARD = "key_select_keyboard";
public static final String ITEM_SHOW_SETTINGS = "key_show_settings";
public static final String ITEM_VOICE_INPUT = "key_voice_input";
private final Hotkeys hotkeys;
private final Collection<DropDownPreference> items;
private final SettingsStore settings;
private final boolean isVoiceInputAvailable;
public SectionKeymap(Collection<DropDownPreference> dropDowns, PreferencesActivity activity) {
items = dropDowns;
hotkeys = new Hotkeys(activity);
this.settings = activity.getSettings();
isVoiceInputAvailable = new VoiceInputOps(activity, null, null, null).isAvailable();
}
@ -74,7 +82,7 @@ public class SectionKeymap {
}
ArrayList<String> keys = new ArrayList<>();
for (String key : hotkeys.toSet()) {
for (String key : hotkeys.getHardwareKeys()) {
if (
validateKey(dropDown, String.valueOf(key))
// backspace works both when pressed short and long,
@ -87,7 +95,7 @@ public class SectionKeymap {
ArrayList<String> values = new ArrayList<>();
for (String key : keys) {
values.add(hotkeys.get(key));
values.add(hotkeys.getHardwareKeyName(key));
}
dropDown.setEntries(values.toArray(new CharSequence[0]));
@ -124,7 +132,11 @@ public class SectionKeymap {
return;
}
dropDown.setSummary(hotkeys.get(key));
dropDown.setSummary(hotkeys.getHardwareKeyName(key));
if (dropDown.getKey().equals(ITEM_VOICE_INPUT)) {
dropDown.setVisible(isVoiceInputAvailable);
}
}

View file

@ -3,38 +3,23 @@ package io.github.sspanak.tt9.preferences.settings;
import android.content.Context;
import android.view.KeyEvent;
import java.util.HashMap;
import io.github.sspanak.tt9.preferences.screens.hotkeys.SectionKeymap;
class SettingsHotkeys extends SettingsHacks {
SettingsHotkeys(Context context) { super(context); }
public boolean areHotkeysInitialized() {
return !prefs.getBoolean("hotkeys_v2_initialized", false);
return !prefs.getBoolean("hotkeys_v3_initialized", false);
}
public void setDefaultKeys(
int backspace,
int comandPalette,
int filterClear,
int filterSuggestions,
int previousSuggestion,
int nextSuggestion,
int nextInputMode,
int nextLanguage,
int tab
) {
prefsEditor
.putString(SectionKeymap.ITEM_BACKSPACE, String.valueOf(backspace))
.putString(SectionKeymap.ITEM_COMMAND_PALETTE, String.valueOf(comandPalette))
.putString(SectionKeymap.ITEM_FILTER_CLEAR, String.valueOf(filterClear))
.putString(SectionKeymap.ITEM_FILTER_SUGGESTIONS, String.valueOf(filterSuggestions))
.putString(SectionKeymap.ITEM_PREVIOUS_SUGGESTION, String.valueOf(previousSuggestion))
.putString(SectionKeymap.ITEM_NEXT_SUGGESTION, String.valueOf(nextSuggestion))
.putString(SectionKeymap.ITEM_NEXT_INPUT_MODE, String.valueOf(nextInputMode))
.putString(SectionKeymap.ITEM_NEXT_LANGUAGE, String.valueOf(nextLanguage))
.putString(SectionKeymap.ITEM_TAB, String.valueOf(tab))
.putBoolean("hotkeys_v2_initialized", true)
.apply();
public void setDefaultKeys(HashMap<String, Integer> defaultKeys) {
for (String key : defaultKeys.keySet()) {
prefsEditor.putString(key, String.valueOf(defaultKeys.get(key)));
}
prefsEditor.putBoolean("hotkeys_v3_initialized", true).apply();
}
@ -43,9 +28,18 @@ class SettingsHotkeys extends SettingsHacks {
}
public int getKeyAddWord() {
return getFunctionKey(SectionKeymap.ITEM_ADD_WORD);
}
public int getKeyBackspace() {
return getFunctionKey(SectionKeymap.ITEM_BACKSPACE);
}
public int getKeyCommandPalette() {
return getFunctionKey(SectionKeymap.ITEM_COMMAND_PALETTE);
}
public int getKeyEditText() {
return getFunctionKey(SectionKeymap.ITEM_EDIT_TEXT);
}
public int getKeyFilterClear() {
return getFunctionKey(SectionKeymap.ITEM_FILTER_CLEAR);
}
@ -64,10 +58,16 @@ class SettingsHotkeys extends SettingsHacks {
public int getKeyNextLanguage() {
return getFunctionKey(SectionKeymap.ITEM_NEXT_LANGUAGE);
}
public int getKeyCommandPalette() {
return getFunctionKey(SectionKeymap.ITEM_COMMAND_PALETTE);
}
public int getKeyTab() {
return getFunctionKey(SectionKeymap.ITEM_TAB);
}
public int getKeySelectKeyboard() {
return getFunctionKey(SectionKeymap.ITEM_SELECT_KEYBOARD);
}
public int getKeyShowSettings() {
return getFunctionKey(SectionKeymap.ITEM_SHOW_SETTINGS);
}
public int getKeyVoiceInput() {
return getFunctionKey(SectionKeymap.ITEM_VOICE_INPUT);
}
}

View file

@ -25,7 +25,7 @@ public class SoftInputModeKey extends SoftKey {
if (validateTT9Handler()) {
vibrate(Vibration.getHoldVibration());
tt9.changeKeyboard();
tt9.selectKeyboard();
}
}

View file

@ -24,7 +24,7 @@ public class SoftKeyLF2 extends SoftKey {
@Override
protected boolean handleRelease() {
return validateTT9Handler() && tt9.onTab(false);
return validateTT9Handler() && tt9.onKeyTab(false);
}
@Override

View file

@ -66,9 +66,11 @@
<string name="dictionary_update_update">Зареди</string>
<string name="donate_title">Дарете</string>
<string name="donate_summary">Ако харесвате %1$s, подкрепете разработката му на: %2$s.</string>
<string name="function_edit_text">Редактиране на текст</string>
<string name="function_backspace">Триене на текст</string>
<string name="dictionary_no_notifications">Речникови известия</string>
<string name="dictionary_no_notifications_summary">Получавайте известия за обновления на речника и за прогреса при зареждане.</string>
<string name="function_add_word">Добавяне на дума</string>
<string name="function_show_command_palette">Списък с команди</string>
<string name="function_filter_clear">Изчистване на филтър</string>
<string name="function_filter_suggestions">Филтриране на думи</string>
@ -76,6 +78,7 @@
<string name="function_next_suggestion">Следваща дума</string>
<string name="function_next_language">Следващ eзик</string>
<string name="function_next_mode">Режим на писане</string>
<string name="function_show_settings">Настройки</string>
<string name="function_reset_keys_title">Възстанови стандартните бутони</string>
<string name="function_reset_keys_done">Възстановени са стандартните „бързи“ бутони.</string>
<string name="setup_keyboard_status">Състояние</string>
@ -148,4 +151,6 @@
<string name="virtual_numpad_alignment_center">В средата</string>
<string name="virtual_numpad_alignment_left">Вляво</string>
<string name="virtual_numpad_alignment_right">Вдясно</string>
<string name="function_select_keyboard">Избор на клавиатура</string>
<string name="function_voice_input">Гласово въвеждане</string>
</resources>

View file

@ -141,4 +141,5 @@
<string name="virtual_numpad_alignment_center">In der Mitte</string>
<string name="virtual_numpad_alignment_left">Links</string>
<string name="virtual_numpad_alignment_right">Rechts</string>
<string name="function_select_keyboard">Tastaturauswahl</string>
</resources>

View file

@ -83,6 +83,8 @@
<string name="function_next_suggestion">Sugerencia siguiente</string>
<string name="function_next_language">Idioma siguiente</string>
<string name="function_next_mode">Modo de ingreso</string>
<string name="function_add_word">Agregar palabra</string>
<string name="function_show_settings">Mostrar configuración</string>
<string name="function_reset_keys_title">Restaurar valores de teclas por defecto</string>
<string name="function_reset_keys_done">Valores de teclas por defecto restaurados</string>
<string name="setup_tt9_on">%1$s está habilitado</string>
@ -148,4 +150,5 @@
<string name="virtual_numpad_alignment_center">En el centro</string>
<string name="virtual_numpad_alignment_left">A la izquierda</string>
<string name="virtual_numpad_alignment_right">A la derecha</string>
<string name="function_select_keyboard">Cambiar el teclado</string>
</resources>

View file

@ -76,6 +76,8 @@
<string name="function_next_suggestion">Mot suivant</string>
<string name="function_next_language">Langue suivante</string>
<string name="function_next_mode">Mode de saisie suivant</string>
<string name="function_add_word">Ajouter un mot</string>
<string name="function_show_settings">Afficher les paramètres</string>
<string name="function_reset_keys_title">Restaurer les paramètres par défaut</string>
<string name="function_reset_keys_done">Paramètres par défaut sont restaurés.</string>
<string name="setup_keyboard_status">État</string>
@ -146,4 +148,5 @@
<string name="virtual_numpad_alignment_center">Au milieu</string>
<string name="virtual_numpad_alignment_left">À gauche</string>
<string name="virtual_numpad_alignment_right">À droite</string>
<string name="function_select_keyboard">Choisir le clavier</string>
</resources>

View file

@ -77,6 +77,8 @@
<string name="function_backspace">לחצן מחיקה</string>
<string name="function_next_language">לחצן למעבר לשפה הבאה</string>
<string name="function_next_mode">לחצן מצב קלט</string>
<string name="function_add_word">לחצן הוספת מילה</string>
<string name="function_show_settings">לחצן הצגת הגדרות</string>
<string name="function_reset_keys_title">שחזור לחצני ברירת מחדל</string>
<string name="function_reset_keys_done">הגדרות ברירת המחדל שוחזרו.</string>
@ -151,4 +153,5 @@
<string name="virtual_numpad_alignment_center">באמצע</string>
<string name="virtual_numpad_alignment_left">שמאלה</string>
<string name="virtual_numpad_alignment_right">ימינה</string>
<string name="function_select_keyboard">בחירת מקלדת</string>
</resources>

View file

@ -86,6 +86,8 @@
<string name="function_next_suggestion">Sekantis pasiūlytas žodis</string>
<string name="function_next_language">Rašymo kalba</string>
<string name="function_next_mode">Rašymo būdas</string>
<string name="function_add_word">Pridėti žodį</string>
<string name="function_show_settings">Rodyti nustatymus</string>
<string name="function_reset_keys_title">Atkurti numatytąsias reikšmes</string>
<string name="function_reset_keys_done">Numatytosios reikšmės atkurtos.</string>
@ -157,4 +159,5 @@
<string name="virtual_numpad_alignment_center">Centre</string>
<string name="virtual_numpad_alignment_left">Kairėje</string>
<string name="virtual_numpad_alignment_right">Dešinėje</string>
<string name="function_select_keyboard">Keisti klaviatūrą</string>
</resources>

View file

@ -139,4 +139,5 @@
<string name="virtual_numpad_alignment_center">In het midden</string>
<string name="virtual_numpad_alignment_left">Links</string>
<string name="virtual_numpad_alignment_right">Rechts</string>
<string name="function_select_keyboard">Toetsenbordkeuze</string>
</resources>

View file

@ -72,6 +72,8 @@
<string name="function_backspace">Backspace</string>
<string name="function_next_language">Próximo Idioma</string>
<string name="function_next_mode">Modo de Entrada</string>
<string name="function_add_word">Adicionar palavra</string>
<string name="function_show_settings">Entrar em Configurações</string>
<string name="function_reset_keys_title">Restaurar Atalhos Padrão</string>
<string name="function_reset_keys_done">Atalhos Restaurados.</string>
@ -151,4 +153,5 @@
<string name="virtual_numpad_alignment_center">No meio</string>
<string name="virtual_numpad_alignment_left">À esquerda</string>
<string name="virtual_numpad_alignment_right">À direita</string>
<string name="function_select_keyboard">Mude o teclado</string>
</resources>

View file

@ -75,6 +75,8 @@
<string name="function_next_suggestion">Следующее слово</string>
<string name="function_next_language">Следующий язык</string>
<string name="function_next_mode">Режим ввода</string>
<string name="function_add_word">Добавить слово</string>
<string name="function_show_settings">Настройки</string>
<string name="function_reset_keys_title">Вернуть кнопки по умолчанию</string>
<string name="function_reset_keys_done">Настройки кнопок по умолчанию восстановлены.</string>
<string name="setup_keyboard_status">Состояние</string>
@ -148,4 +150,5 @@
<string name="virtual_numpad_alignment_center">Посередине</string>
<string name="virtual_numpad_alignment_left">Налево</string>
<string name="virtual_numpad_alignment_right">Направо</string>
<string name="function_select_keyboard">Выбор клавиатуры</string>
</resources>

View file

@ -130,6 +130,8 @@
<string name="function_next_suggestion">Sonraki Tahmin</string>
<string name="function_next_language">Sonraki Dil</string>
<string name="function_next_mode">Giriş Yöntemi</string>
<string name="function_add_word">Kelime ekle</string>
<string name="function_show_settings">Ayarları Göster</string>
<string name="function_reset_keys_title">Varsayılan Ayarlara Geri Dön</string>
<string name="function_reset_keys_done">Varsayılan tuş ayarlarına dönüldü.</string>
<string name="key_red">Kırmızı düğme</string>
@ -151,4 +153,5 @@
<string name="virtual_numpad_alignment_center">Ortada</string>
<string name="virtual_numpad_alignment_left">Sola</string>
<string name="virtual_numpad_alignment_right">Sağa</string>
<string name="function_select_keyboard">Klavye Seçimi</string>
</resources>

View file

@ -113,6 +113,8 @@
<string name="function_next_suggestion">Наступна пропозиція</string>
<string name="function_next_language">Наступна мова</string>
<string name="function_next_mode">Режим вводу</string>
<string name="function_add_word">Додати слово</string>
<string name="function_show_settings">Показати налаштування</string>
<string name="function_reset_keys_title">Відновити стандартні клавіші</string>
<string name="function_reset_keys_done">Стандартні налаштування клавіш відновленно.</string>
@ -159,4 +161,5 @@
<string name="virtual_numpad_alignment_center">Посередині</string>
<string name="virtual_numpad_alignment_left">Ліворуч</string>
<string name="virtual_numpad_alignment_right">Праворуч</string>
<string name="function_select_keyboard">Змінити клавіатуру</string>
</resources>

View file

@ -127,14 +127,19 @@
<string name="donate_url" translatable="false">https://www.buymeacoffee.com/sspanak</string>
<string name="donate_url_short" translatable="false">www.buymeacoffee.com</string>
<string name="function_add_word">Add Word</string>
<string name="function_backspace">Backspace</string>
<string name="function_show_command_palette">Show Command List</string>
<string name="function_filter_clear">Clear Filter</string>
<string name="function_edit_text">Edit Text</string>
<string name="function_filter_suggestions">Filter Suggestions</string>
<string name="function_previous_suggestion">Previous Suggestion</string>
<string name="function_next_suggestion">Next Suggestion</string>
<string name="function_next_language">Next Language</string>
<string name="function_next_mode">Input Mode</string>
<string name="function_select_keyboard">Select Keyboard</string>
<string name="function_show_settings">Show Settings</string>
<string name="function_voice_input">Voice Input</string>
<string name="function_reset_keys_title">Restore Default Keys</string>
<string name="function_reset_keys_done">Default key settings restored.</string>

View file

@ -2,6 +2,10 @@
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
app:orderingFromXml="true">
<DropDownPreference
app:key="key_add_word"
app:title="@string/function_add_word" />
<DropDownPreference
app:key="key_backspace"
app:title="@string/function_backspace" />
@ -14,6 +18,10 @@
app:key="key_filter_clear"
app:title="@string/function_filter_clear" />
<DropDownPreference
app:key="key_edit_text"
app:title="@string/function_edit_text" />
<DropDownPreference
app:key="key_filter_suggestions"
app:title="@string/function_filter_suggestions" />
@ -38,6 +46,18 @@
app:key="key_tab"
app:title="@string/key_tab" />
<DropDownPreference
app:key="key_select_keyboard"
app:title="@string/function_select_keyboard" />
<DropDownPreference
app:key="key_show_settings"
app:title="@string/function_show_settings" />
<DropDownPreference
app:key="key_voice_input"
app:title="@string/function_voice_input" />
<Preference
app:key="reset_keys"
app:title="@string/function_reset_keys_title" />