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

View file

@ -62,10 +62,18 @@ public abstract class HotkeyHandler extends CommandHandler {
return false; return false;
} }
if (keyCode == settings.getKeyAddWord()) {
return onKeyAddWord(validateOnly);
}
if (keyCode == settings.getKeyCommandPalette()) { if (keyCode == settings.getKeyCommandPalette()) {
return onKeyCommandPalette(validateOnly); return onKeyCommandPalette(validateOnly);
} }
if (keyCode == settings.getKeyEditText()) {
return onKeyEditText(validateOnly);
}
if (keyCode == settings.getKeyFilterClear()) { if (keyCode == settings.getKeyFilterClear()) {
return onKeyFilterClear(validateOnly); return onKeyFilterClear(validateOnly);
} }
@ -91,13 +99,72 @@ public abstract class HotkeyHandler extends CommandHandler {
} }
if (keyCode == settings.getKeyTab()) { 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; 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) { public boolean onKeyMoveCursor(boolean backward) {
if (textSelection.isEmpty()) { if (textSelection.isEmpty()) {
return appHacks.onMoveCursor(backward) || textField.moveCursor(backward); return appHacks.onMoveCursor(backward) || textField.moveCursor(backward);
@ -227,27 +294,7 @@ public abstract class HotkeyHandler extends CommandHandler {
} }
public boolean onKeyCommandPalette(boolean validateOnly) { public boolean onKeyTab(boolean validateOnly) {
if (shouldBeOff()) {
return false;
}
if (validateOnly) {
return true;
}
if (mainView.isCommandPaletteShown()) {
hideCommandPalette();
} else {
showCommandPalette();
forceShowWindow();
}
return true;
}
public boolean onTab(boolean validateOnly) {
if (shouldBeOff()) { if (shouldBeOff()) {
return false; return false;
} }
@ -264,4 +311,41 @@ public abstract class HotkeyHandler extends CommandHandler {
return true; 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; package io.github.sspanak.tt9.ime.voice;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.inputmethodservice.InputMethodService;
import android.os.Build; import android.os.Build;
import android.speech.RecognizerIntent; import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer; import android.speech.SpeechRecognizer;
@ -20,7 +20,7 @@ public class VoiceInputOps {
private final boolean isRecognitionAvailable; private final boolean isRecognitionAvailable;
private final InputMethodService ims; private final Context ims;
private Language language; private Language language;
private SpeechRecognizer speechRecognizer; private SpeechRecognizer speechRecognizer;
private final VoiceListener listener; private final VoiceListener listener;
@ -30,7 +30,7 @@ public class VoiceInputOps {
public VoiceInputOps( public VoiceInputOps(
@NonNull InputMethodService ims, @NonNull Context ims,
Runnable onStart, Runnable onStart,
ConsumerCompat<String> onStop, ConsumerCompat<String> onStop,
ConsumerCompat<VoiceInputError> onError ConsumerCompat<VoiceInputError> onError

View file

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

View file

@ -6,14 +6,17 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Objects; 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.PreferencesActivity;
import io.github.sspanak.tt9.preferences.helpers.Hotkeys; import io.github.sspanak.tt9.preferences.helpers.Hotkeys;
import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Logger;
public class SectionKeymap { 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_BACKSPACE = "key_backspace";
public static final String ITEM_COMMAND_PALETTE = "key_command_palette"; 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_CLEAR = "key_filter_clear";
public static final String ITEM_FILTER_SUGGESTIONS = "key_filter_suggestions"; public static final String ITEM_FILTER_SUGGESTIONS = "key_filter_suggestions";
public static final String ITEM_PREVIOUS_SUGGESTION = "key_previous_suggestion"; 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_INPUT_MODE = "key_next_input_mode";
public static final String ITEM_NEXT_LANGUAGE = "key_next_language"; public static final String ITEM_NEXT_LANGUAGE = "key_next_language";
public static final String ITEM_TAB = "key_tab"; 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 Hotkeys hotkeys;
private final Collection<DropDownPreference> items; private final Collection<DropDownPreference> items;
private final SettingsStore settings; private final SettingsStore settings;
private final boolean isVoiceInputAvailable;
public SectionKeymap(Collection<DropDownPreference> dropDowns, PreferencesActivity activity) { public SectionKeymap(Collection<DropDownPreference> dropDowns, PreferencesActivity activity) {
items = dropDowns; items = dropDowns;
hotkeys = new Hotkeys(activity); hotkeys = new Hotkeys(activity);
this.settings = activity.getSettings(); this.settings = activity.getSettings();
isVoiceInputAvailable = new VoiceInputOps(activity, null, null, null).isAvailable();
} }
@ -74,7 +82,7 @@ public class SectionKeymap {
} }
ArrayList<String> keys = new ArrayList<>(); ArrayList<String> keys = new ArrayList<>();
for (String key : hotkeys.toSet()) { for (String key : hotkeys.getHardwareKeys()) {
if ( if (
validateKey(dropDown, String.valueOf(key)) validateKey(dropDown, String.valueOf(key))
// backspace works both when pressed short and long, // backspace works both when pressed short and long,
@ -87,7 +95,7 @@ public class SectionKeymap {
ArrayList<String> values = new ArrayList<>(); ArrayList<String> values = new ArrayList<>();
for (String key : keys) { for (String key : keys) {
values.add(hotkeys.get(key)); values.add(hotkeys.getHardwareKeyName(key));
} }
dropDown.setEntries(values.toArray(new CharSequence[0])); dropDown.setEntries(values.toArray(new CharSequence[0]));
@ -124,7 +132,11 @@ public class SectionKeymap {
return; 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.content.Context;
import android.view.KeyEvent; import android.view.KeyEvent;
import java.util.HashMap;
import io.github.sspanak.tt9.preferences.screens.hotkeys.SectionKeymap; import io.github.sspanak.tt9.preferences.screens.hotkeys.SectionKeymap;
class SettingsHotkeys extends SettingsHacks { class SettingsHotkeys extends SettingsHacks {
SettingsHotkeys(Context context) { super(context); } SettingsHotkeys(Context context) { super(context); }
public boolean areHotkeysInitialized() { public boolean areHotkeysInitialized() {
return !prefs.getBoolean("hotkeys_v2_initialized", false); return !prefs.getBoolean("hotkeys_v3_initialized", false);
} }
public void setDefaultKeys( public void setDefaultKeys(HashMap<String, Integer> defaultKeys) {
int backspace, for (String key : defaultKeys.keySet()) {
int comandPalette, prefsEditor.putString(key, String.valueOf(defaultKeys.get(key)));
int filterClear, }
int filterSuggestions,
int previousSuggestion, prefsEditor.putBoolean("hotkeys_v3_initialized", true).apply();
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();
} }
@ -43,9 +28,18 @@ class SettingsHotkeys extends SettingsHacks {
} }
public int getKeyAddWord() {
return getFunctionKey(SectionKeymap.ITEM_ADD_WORD);
}
public int getKeyBackspace() { public int getKeyBackspace() {
return getFunctionKey(SectionKeymap.ITEM_BACKSPACE); 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() { public int getKeyFilterClear() {
return getFunctionKey(SectionKeymap.ITEM_FILTER_CLEAR); return getFunctionKey(SectionKeymap.ITEM_FILTER_CLEAR);
} }
@ -64,10 +58,16 @@ class SettingsHotkeys extends SettingsHacks {
public int getKeyNextLanguage() { public int getKeyNextLanguage() {
return getFunctionKey(SectionKeymap.ITEM_NEXT_LANGUAGE); return getFunctionKey(SectionKeymap.ITEM_NEXT_LANGUAGE);
} }
public int getKeyCommandPalette() {
return getFunctionKey(SectionKeymap.ITEM_COMMAND_PALETTE);
}
public int getKeyTab() { public int getKeyTab() {
return getFunctionKey(SectionKeymap.ITEM_TAB); 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()) { if (validateTT9Handler()) {
vibrate(Vibration.getHoldVibration()); vibrate(Vibration.getHoldVibration());
tt9.changeKeyboard(); tt9.selectKeyboard();
} }
} }

View file

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

View file

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

View file

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

View file

@ -83,6 +83,8 @@
<string name="function_next_suggestion">Sugerencia siguiente</string> <string name="function_next_suggestion">Sugerencia siguiente</string>
<string name="function_next_language">Idioma siguiente</string> <string name="function_next_language">Idioma siguiente</string>
<string name="function_next_mode">Modo de ingreso</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_title">Restaurar valores de teclas por defecto</string>
<string name="function_reset_keys_done">Valores de teclas por defecto restaurados</string> <string name="function_reset_keys_done">Valores de teclas por defecto restaurados</string>
<string name="setup_tt9_on">%1$s está habilitado</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_center">En el centro</string>
<string name="virtual_numpad_alignment_left">A la izquierda</string> <string name="virtual_numpad_alignment_left">A la izquierda</string>
<string name="virtual_numpad_alignment_right">A la derecha</string> <string name="virtual_numpad_alignment_right">A la derecha</string>
<string name="function_select_keyboard">Cambiar el teclado</string>
</resources> </resources>

View file

@ -76,6 +76,8 @@
<string name="function_next_suggestion">Mot suivant</string> <string name="function_next_suggestion">Mot suivant</string>
<string name="function_next_language">Langue suivante</string> <string name="function_next_language">Langue suivante</string>
<string name="function_next_mode">Mode de saisie suivant</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_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="function_reset_keys_done">Paramètres par défaut sont restaurés.</string>
<string name="setup_keyboard_status">État</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_center">Au milieu</string>
<string name="virtual_numpad_alignment_left">À gauche</string> <string name="virtual_numpad_alignment_left">À gauche</string>
<string name="virtual_numpad_alignment_right">À droite</string> <string name="virtual_numpad_alignment_right">À droite</string>
<string name="function_select_keyboard">Choisir le clavier</string>
</resources> </resources>

View file

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

View file

@ -86,6 +86,8 @@
<string name="function_next_suggestion">Sekantis pasiūlytas žodis</string> <string name="function_next_suggestion">Sekantis pasiūlytas žodis</string>
<string name="function_next_language">Rašymo kalba</string> <string name="function_next_language">Rašymo kalba</string>
<string name="function_next_mode">Rašymo būdas</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_title">Atkurti numatytąsias reikšmes</string>
<string name="function_reset_keys_done">Numatytosios reikšmės atkurtos.</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_center">Centre</string>
<string name="virtual_numpad_alignment_left">Kairėje</string> <string name="virtual_numpad_alignment_left">Kairėje</string>
<string name="virtual_numpad_alignment_right">Dešinėje</string> <string name="virtual_numpad_alignment_right">Dešinėje</string>
<string name="function_select_keyboard">Keisti klaviatūrą</string>
</resources> </resources>

View file

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

View file

@ -72,6 +72,8 @@
<string name="function_backspace">Backspace</string> <string name="function_backspace">Backspace</string>
<string name="function_next_language">Próximo Idioma</string> <string name="function_next_language">Próximo Idioma</string>
<string name="function_next_mode">Modo de Entrada</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_title">Restaurar Atalhos Padrão</string>
<string name="function_reset_keys_done">Atalhos Restaurados.</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_center">No meio</string>
<string name="virtual_numpad_alignment_left">À esquerda</string> <string name="virtual_numpad_alignment_left">À esquerda</string>
<string name="virtual_numpad_alignment_right">À direita</string> <string name="virtual_numpad_alignment_right">À direita</string>
<string name="function_select_keyboard">Mude o teclado</string>
</resources> </resources>

View file

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

View file

@ -130,6 +130,8 @@
<string name="function_next_suggestion">Sonraki Tahmin</string> <string name="function_next_suggestion">Sonraki Tahmin</string>
<string name="function_next_language">Sonraki Dil</string> <string name="function_next_language">Sonraki Dil</string>
<string name="function_next_mode">Giriş Yöntemi</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_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="function_reset_keys_done">Varsayılan tuş ayarlarına dönüldü.</string>
<string name="key_red">Kırmızı düğme</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_center">Ortada</string>
<string name="virtual_numpad_alignment_left">Sola</string> <string name="virtual_numpad_alignment_left">Sola</string>
<string name="virtual_numpad_alignment_right">Sağa</string> <string name="virtual_numpad_alignment_right">Sağa</string>
<string name="function_select_keyboard">Klavye Seçimi</string>
</resources> </resources>

View file

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

View file

@ -127,14 +127,19 @@
<string name="donate_url" translatable="false">https://www.buymeacoffee.com/sspanak</string> <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="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_backspace">Backspace</string>
<string name="function_show_command_palette">Show Command List</string> <string name="function_show_command_palette">Show Command List</string>
<string name="function_filter_clear">Clear Filter</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_filter_suggestions">Filter Suggestions</string>
<string name="function_previous_suggestion">Previous Suggestion</string> <string name="function_previous_suggestion">Previous Suggestion</string>
<string name="function_next_suggestion">Next Suggestion</string> <string name="function_next_suggestion">Next Suggestion</string>
<string name="function_next_language">Next Language</string> <string name="function_next_language">Next Language</string>
<string name="function_next_mode">Input Mode</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_title">Restore Default Keys</string>
<string name="function_reset_keys_done">Default key settings restored.</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" <PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
app:orderingFromXml="true"> app:orderingFromXml="true">
<DropDownPreference
app:key="key_add_word"
app:title="@string/function_add_word" />
<DropDownPreference <DropDownPreference
app:key="key_backspace" app:key="key_backspace"
app:title="@string/function_backspace" /> app:title="@string/function_backspace" />
@ -14,6 +18,10 @@
app:key="key_filter_clear" app:key="key_filter_clear"
app:title="@string/function_filter_clear" /> app:title="@string/function_filter_clear" />
<DropDownPreference
app:key="key_edit_text"
app:title="@string/function_edit_text" />
<DropDownPreference <DropDownPreference
app:key="key_filter_suggestions" app:key="key_filter_suggestions"
app:title="@string/function_filter_suggestions" /> app:title="@string/function_filter_suggestions" />
@ -38,6 +46,18 @@
app:key="key_tab" app:key="key_tab"
app:title="@string/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 <Preference
app:key="reset_keys" app:key="reset_keys"
app:title="@string/function_reset_keys_title" /> app:title="@string/function_reset_keys_title" />