diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java
index 6d915c0b..ff96d206 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java
@@ -1,5 +1,7 @@
package io.github.sspanak.tt9.ime;
+import android.view.KeyEvent;
+
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.db.DataStore;
import io.github.sspanak.tt9.db.words.DictionaryLoader;
@@ -57,9 +59,15 @@ abstract public class CommandHandler extends TextEditingHandler {
case 3:
toggleVoiceInput();
break;
+ case 4:
+ undo();
+ break;
case 5:
showTextEditingPalette();
break;
+ case 6:
+ redo();
+ break;
case 8:
selectKeyboard();
break;
@@ -250,4 +258,14 @@ abstract public class CommandHandler extends TextEditingHandler {
return true;
}
+
+
+ protected boolean undo() {
+ return textField.sendDownUpKeyEvents(KeyEvent.KEYCODE_Z, false, true);
+ }
+
+
+ protected boolean redo() {
+ return textField.sendDownUpKeyEvents(KeyEvent.KEYCODE_Z, true, true);
+ }
}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java
index b5259697..a0fde77e 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ime/HotkeyHandler.java
@@ -130,6 +130,14 @@ public abstract class HotkeyHandler extends CommandHandler {
return onKeyShowSettings(validateOnly);
}
+ if (keyCode == settings.getKeyUndo()) {
+ return onKeyUndo(validateOnly);
+ }
+
+ if (keyCode == settings.getKeyRedo()) {
+ return onKeyRedo(validateOnly);
+ }
+
if (keyCode == settings.getKeyVoiceInput()) {
return onKeyVoiceInput(validateOnly);
}
@@ -416,6 +424,24 @@ public abstract class HotkeyHandler extends CommandHandler {
}
+ public boolean onKeyUndo(boolean validateOnly) {
+ if (!isInputViewShown() || shouldBeOff()) {
+ return false;
+ }
+
+ return validateOnly || undo();
+ }
+
+
+ public boolean onKeyRedo(boolean validateOnly) {
+ if (!isInputViewShown() || shouldBeOff()) {
+ return false;
+ }
+
+ return validateOnly || redo();
+ }
+
+
private boolean onKeyVoiceInput(boolean validateOnly) {
if (!isInputViewShown() || shouldBeOff() || !voiceInputOps.isAvailable()) {
return false;
diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java
index f0b8134b..fd3375b5 100644
--- a/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java
+++ b/app/src/main/java/io/github/sspanak/tt9/preferences/settings/SettingsHotkeys.java
@@ -7,7 +7,7 @@ import android.view.KeyEvent;
import io.github.sspanak.tt9.util.Logger;
public class SettingsHotkeys extends SettingsUI {
- private static final String HOTKEY_VERSION = "hotkeys_v5";
+ private static final String HOTKEY_VERSION = "hotkeys_v6";
public static final String FUNC_ADD_WORD = "key_add_word";
public static final String FUNC_BACKSPACE = "key_backspace";
@@ -23,6 +23,8 @@ public class SettingsHotkeys extends SettingsUI {
public static final String FUNC_SHIFT = "key_shift";
public static final String FUNC_SPACE_KOREAN = "key_space_korean";
public static final String FUNC_SHOW_SETTINGS = "key_show_settings";
+ public static final String FUNC_UNDO = "key_undo";
+ public static final String FUNC_REDO = "key_redo";
public static final String FUNC_VOICE_INPUT = "key_voice_input";
public static final String[] FUNCTIONS = {
@@ -40,6 +42,8 @@ public class SettingsHotkeys extends SettingsUI {
FUNC_SHIFT,
FUNC_SPACE_KOREAN,
FUNC_SHOW_SETTINGS,
+ FUNC_UNDO,
+ FUNC_REDO,
FUNC_VOICE_INPUT,
};
@@ -62,7 +66,7 @@ public class SettingsHotkeys extends SettingsUI {
*/
public void setDefaultKeys() {
// no default keys
- String[] unassigned = { FUNC_ADD_WORD, FUNC_EDIT_TEXT, FUNC_SELECT_KEYBOARD, FUNC_SHOW_SETTINGS, FUNC_VOICE_INPUT };
+ String[] unassigned = { FUNC_ADD_WORD, FUNC_EDIT_TEXT, FUNC_SELECT_KEYBOARD, FUNC_SHOW_SETTINGS, FUNC_UNDO, FUNC_REDO, FUNC_VOICE_INPUT };
for (String key : unassigned) {
prefsEditor.putString(key, String.valueOf(KeyEvent.KEYCODE_UNKNOWN));
}
@@ -172,6 +176,12 @@ public class SettingsHotkeys extends SettingsUI {
public int getKeyShowSettings() {
return getFunctionKey(FUNC_SHOW_SETTINGS);
}
+ public int getKeyUndo() {
+ return getFunctionKey(FUNC_UNDO);
+ }
+ public int getKeyRedo() {
+ return getFunctionKey(FUNC_REDO);
+ }
public int getKeyVoiceInput() {
return getFunctionKey(FUNC_VOICE_INPUT);
}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyF4.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyF4.java
new file mode 100644
index 00000000..759b3c85
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyF4.java
@@ -0,0 +1,23 @@
+package io.github.sspanak.tt9.ui.main.keys;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class SoftKeyF4 extends SoftKeyFn {
+ public SoftKeyF4(Context context) {
+ super(context);
+ }
+
+ public SoftKeyF4(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public SoftKeyF4(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected boolean handleRelease() {
+ return tt9 != null && tt9.onKeyUndo(false);
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyF6.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyF6.java
new file mode 100644
index 00000000..f054bc27
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyF6.java
@@ -0,0 +1,23 @@
+package io.github.sspanak.tt9.ui.main.keys;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class SoftKeyF6 extends SoftKeyFn {
+ public SoftKeyF6(Context context) {
+ super(context);
+ }
+
+ public SoftKeyF6(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public SoftKeyF6(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ @Override
+ protected boolean handleRelease() {
+ return tt9 != null && tt9.onKeyRedo(false);
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java
index 1a152ffd..e4e15bce 100644
--- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuation.java
@@ -2,17 +2,26 @@ package io.github.sspanak.tt9.ui.main.keys;
import android.content.Context;
import android.util.AttributeSet;
+import android.view.ViewParent;
+import android.widget.RelativeLayout;
-import io.github.sspanak.tt9.R;
-import io.github.sspanak.tt9.languages.LanguageKind;
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
import io.github.sspanak.tt9.util.chars.Characters;
-public class SoftKeyPunctuation extends SoftKey {
+abstract public class SoftKeyPunctuation extends BaseSoftKeyWithIcons {
public SoftKeyPunctuation(Context context) { super(context); }
public SoftKeyPunctuation(Context context, AttributeSet attrs) { super(context, attrs); }
public SoftKeyPunctuation(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
+
+ abstract protected String getKeyChar();
+
+
+ protected boolean isTextEditingOn() {
+ return tt9 != null && tt9.isTextEditingActive();
+ }
+
+
protected boolean isHiddenWhenLongSpace() {
return
tt9 != null
@@ -21,18 +30,13 @@ public class SoftKeyPunctuation extends SoftKey {
&& !hasLettersOnAllKeys();
}
- protected boolean isTransparentWhenTextEditing() {
- return tt9 != null && tt9.isTextEditingActive();
- }
@Override
protected boolean handleRelease() {
- return
- tt9 != null
- && !tt9.isTextEditingActive()
- && tt9.onText(getKeyChar(), false);
+ return tt9 != null && tt9.onText(getKeyChar(), false);
}
+
@Override
protected String getTitle() {
String keyChar = getKeyChar();
@@ -44,42 +48,6 @@ public class SoftKeyPunctuation extends SoftKey {
};
}
- protected String getKeyChar() {
- int keyId = getId();
- if (keyId == R.id.soft_key_punctuation_1) {
- return getKey1Char();
- } else if (keyId == R.id.soft_key_punctuation_2) {
- return getKey2Char();
- }
-
- return "";
- }
-
- protected String getKey1Char() {
- if (tt9 == null) return "";
- if (tt9.isInputModePhone()) return "*";
- if (tt9.isInputModeNumeric()) return ",";
-
- if (LanguageKind.isChinese(tt9.getLanguage()) || LanguageKind.isJapanese(tt9.getLanguage())) {
- return Characters.ZH_EXCLAMATION_MARK;
- }
-
- return "!";
- }
-
- protected String getKey2Char() {
- if (tt9 == null) return "";
- if (tt9.isInputModePhone()) return "#";
- if (tt9.isInputModeNumeric()) return ".";
-
- if (LanguageKind.isArabic(tt9.getLanguage())) return Characters.AR_QUESTION_MARK;
- if (LanguageKind.isGreek(tt9.getLanguage())) return Characters.GR_QUESTION_MARK;
- if (LanguageKind.isChinese(tt9.getLanguage()) || LanguageKind.isJapanese(tt9.getLanguage())) {
- return Characters.ZH_QUESTION_MARK;
- }
-
- return "?";
- }
@Override
public void setHeight(int height) {
@@ -93,12 +61,12 @@ public class SoftKeyPunctuation extends SoftKey {
@Override
public void render() {
- if (isHiddenWhenLongSpace()) {
- setVisibility(GONE);
- } else if (isTransparentWhenTextEditing()) {
- setVisibility(INVISIBLE);
- } else {
- setVisibility(VISIBLE);
+ boolean isHidden = isHiddenWhenLongSpace();
+ setVisibility(isHidden ? GONE : VISIBLE);
+
+ ViewParent parent = getParent();
+ if (parent instanceof RelativeLayout) {
+ ((RelativeLayout) parent).setVisibility(isHidden ? RelativeLayout.GONE : RelativeLayout.VISIBLE);
}
super.render();
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationLeft.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationLeft.java
new file mode 100644
index 00000000..627e89fa
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationLeft.java
@@ -0,0 +1,43 @@
+package io.github.sspanak.tt9.ui.main.keys;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import io.github.sspanak.tt9.R;
+import io.github.sspanak.tt9.languages.LanguageKind;
+import io.github.sspanak.tt9.util.chars.Characters;
+
+public class SoftKeyPunctuationLeft extends SoftKeyPunctuation {
+ public SoftKeyPunctuationLeft(Context context) { super(context); }
+ public SoftKeyPunctuationLeft(Context context, AttributeSet attrs) { super(context, attrs); }
+ public SoftKeyPunctuationLeft(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
+
+ @Override
+ protected String getKeyChar() {
+ if (tt9 == null) return "";
+ if (tt9.isInputModePhone()) return "*";
+ if (tt9.isInputModeNumeric()) return ",";
+ if (tt9.isTextEditingActive()) return "↶";
+
+ if (LanguageKind.isChinese(tt9.getLanguage()) || LanguageKind.isJapanese(tt9.getLanguage())) {
+ return Characters.ZH_EXCLAMATION_MARK;
+ }
+
+ return "!";
+ }
+
+ @Override
+ protected boolean handleRelease() {
+ return isTextEditingOn() ? tt9.onKeyUndo(false) : super.handleRelease();
+ }
+
+ @Override
+ protected String getTitle() {
+ return isTextEditingOn() ? "" : super.getTitle();
+ }
+
+ @Override
+ protected int getCentralIcon() {
+ return isTextEditingOn() && !isHiddenWhenLongSpace() ? R.drawable.ic_fn_undo : -1;
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationLeftShort.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationLeftShort.java
new file mode 100644
index 00000000..3e69f3e7
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationLeftShort.java
@@ -0,0 +1,11 @@
+package io.github.sspanak.tt9.ui.main.keys;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class SoftKeyPunctuationLeftShort extends SoftKeyPunctuationLeft {
+ public SoftKeyPunctuationLeftShort(Context context) { super(context); }
+ public SoftKeyPunctuationLeftShort(Context context, AttributeSet attrs) { super(context, attrs); }
+ public SoftKeyPunctuationLeftShort(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
+ @Override protected boolean isHiddenWhenLongSpace() { return false; }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationRight.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationRight.java
new file mode 100644
index 00000000..06702766
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationRight.java
@@ -0,0 +1,44 @@
+package io.github.sspanak.tt9.ui.main.keys;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import io.github.sspanak.tt9.R;
+import io.github.sspanak.tt9.languages.LanguageKind;
+import io.github.sspanak.tt9.util.chars.Characters;
+
+public class SoftKeyPunctuationRight extends SoftKeyPunctuation {
+ public SoftKeyPunctuationRight(Context context) { super(context); }
+ public SoftKeyPunctuationRight(Context context, AttributeSet attrs) { super(context, attrs); }
+ public SoftKeyPunctuationRight(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
+
+ protected String getKeyChar() {
+ if (tt9 == null) return "";
+ if (tt9.isInputModePhone()) return "#";
+ if (tt9.isInputModeNumeric()) return ".";
+ if (tt9.isTextEditingActive()) return "↷";
+
+ if (LanguageKind.isArabic(tt9.getLanguage())) return Characters.AR_QUESTION_MARK;
+ if (LanguageKind.isGreek(tt9.getLanguage())) return Characters.GR_QUESTION_MARK;
+ if (LanguageKind.isChinese(tt9.getLanguage()) || LanguageKind.isJapanese(tt9.getLanguage())) {
+ return Characters.ZH_QUESTION_MARK;
+ }
+
+ return "?";
+ }
+
+ @Override
+ protected boolean handleRelease() {
+ return tt9 != null && tt9.isTextEditingActive() ? tt9.onKeyRedo(false) : super.handleRelease();
+ }
+
+ @Override
+ protected String getTitle() {
+ return isTextEditingOn() ? "" : super.getTitle();
+ }
+
+ @Override
+ protected int getCentralIcon() {
+ return isTextEditingOn() && !isHiddenWhenLongSpace() ? R.drawable.ic_fn_redo : -1;
+ }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationRightShort.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationRightShort.java
new file mode 100644
index 00000000..a8754f58
--- /dev/null
+++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationRightShort.java
@@ -0,0 +1,11 @@
+package io.github.sspanak.tt9.ui.main.keys;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+public class SoftKeyPunctuationRightShort extends SoftKeyPunctuationRight {
+ public SoftKeyPunctuationRightShort(Context context) { super(context); }
+ public SoftKeyPunctuationRightShort(Context context, AttributeSet attrs) { super(context, attrs); }
+ public SoftKeyPunctuationRightShort(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
+ @Override protected boolean isHiddenWhenLongSpace() { return false; }
+}
diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationShort.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationShort.java
deleted file mode 100644
index bb0536ab..00000000
--- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyPunctuationShort.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package io.github.sspanak.tt9.ui.main.keys;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-import io.github.sspanak.tt9.R;
-
-public class SoftKeyPunctuationShort extends SoftKeyPunctuation {
- public SoftKeyPunctuationShort(Context context) { super(context); }
- public SoftKeyPunctuationShort(Context context, AttributeSet attrs) { super(context, attrs); }
- public SoftKeyPunctuationShort(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
-
- @Override protected boolean isHiddenWhenLongSpace() { return false; }
-
- protected String getKeyChar() {
- if (!validateTT9Handler()) {
- return "";
- }
-
- int keyId = getId();
- if (keyId == R.id.soft_key_punctuation_201) {
- return getKey1Char();
- } else if (keyId == R.id.soft_key_punctuation_202) {
- return getKey2Char();
- }
-
- return super.getKeyChar();
- }
-}
diff --git a/app/src/main/res/drawable/ic_fn_redo.xml b/app/src/main/res/drawable/ic_fn_redo.xml
new file mode 100644
index 00000000..22580f63
--- /dev/null
+++ b/app/src/main/res/drawable/ic_fn_redo.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_fn_undo.xml b/app/src/main/res/drawable/ic_fn_undo.xml
new file mode 100644
index 00000000..d9e503f7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_fn_undo.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/app/src/main/res/layout/panel_long_spacebar.xml b/app/src/main/res/layout/panel_long_spacebar.xml
index 31208bf0..f04e10ba 100644
--- a/app/src/main/res/layout/panel_long_spacebar.xml
+++ b/app/src/main/res/layout/panel_long_spacebar.xml
@@ -4,9 +4,12 @@
style="@style/TTheme.Numpad.CentralBlock.Row.LongSpacebar"
android:id="@+id/panel_long_spacebar">
-
+
+
+
+
-
+
+
+
+
diff --git a/app/src/main/res/layout/panel_numpad_digits.xml b/app/src/main/res/layout/panel_numpad_digits.xml
index 7f8ee083..b9f5750a 100644
--- a/app/src/main/res/layout/panel_numpad_digits.xml
+++ b/app/src/main/res/layout/panel_numpad_digits.xml
@@ -23,7 +23,7 @@
-
@@ -84,7 +84,7 @@
-
diff --git a/app/src/main/res/layout/panel_numpad_text_editing.xml b/app/src/main/res/layout/panel_numpad_text_editing.xml
index d80cdb37..91565f00 100644
--- a/app/src/main/res/layout/panel_numpad_text_editing.xml
+++ b/app/src/main/res/layout/panel_numpad_text_editing.xml
@@ -27,9 +27,12 @@
-
+
+
+
+
@@ -95,9 +98,12 @@
-
+
+
+
+
diff --git a/app/src/main/res/layout/panel_small_command_palette.xml b/app/src/main/res/layout/panel_small_command_palette.xml
index dbae3513..f72d168e 100644
--- a/app/src/main/res/layout/panel_small_command_palette.xml
+++ b/app/src/main/res/layout/panel_small_command_palette.xml
@@ -20,11 +20,21 @@
android:id="@+id/soft_key_3"
android:drawableBottom="@drawable/ic_fn_voice" />
+
+
+
+
Вляво
Вдясно
Избор на клавиатура
+ Повторение (Redo)
Гласово въвеждане
Добавяне без потвърждение
Импортирай
@@ -211,4 +212,5 @@
* Натиснете или задръжте клавиш, за да го присвоите на функцията „%1$s“.\n\n* Натиснете 0, за да отмените.\n\n* Натиснете 2, за да деактивирате функцията.
Показвай текст при съставяне
Оразмеряване чрез влачене
+ Отмяна (Undo)
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 95daf98c..d29af59f 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -204,6 +204,7 @@
\tDie Taste \"%1$s\" ist bereits der Funktion \"%2$s\" zugewiesen. Möchten Sie sie \"%3$s\" zuweisen?
* Drücken oder halten Sie eine Taste, um sie der Funktion \"%1$s\" zuzuweisen.\n\n* Drücken Sie 0, um abzubrechen.\n\n* Drücken Sie 2, um die Funktion zu deaktivieren.
Neu zuweisen
+ Wiederholen
Spracheingabe
Standardtasten wiederherstellen
(halten)
@@ -213,4 +214,5 @@
Einstellungsbildschirm anzeigen
Zusammengesetzten Text anzeigen
Größe durch Ziehen ändern
+ Rückgängig machen
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index dd120949..2ba25d30 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -98,6 +98,7 @@
Reasignar
Agregar palabra
Mostrar configuración
+ Rehacer
Entrada por voz
Restaurar valores de teclas por defecto
Valores de teclas por defecto restaurados
@@ -211,4 +212,5 @@
* Presione o mantenga pulsada una tecla para asignarla a la función \"%1$s\".\n\n* Presione 0 para cancelar.\n\n* Presione 2 para desactivar la función.
Mostrar texto en composición
Redimensionar arrastrando
+ Deshacer
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 6dc25028..be17fe12 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -88,6 +88,7 @@
Réattribuer
Ajouter un mot
Afficher les paramètres
+ Restaurer (Redo)
Saisie vocale
Restaurer les paramètres par défaut
Paramètres par défaut sont restaurés.
@@ -211,4 +212,5 @@
(maintenir)
Afficher texte en cours
Redimensionner en faisant glisser
+ Annuler (Undo)
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index f42a8c8e..065f25f3 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -202,6 +202,7 @@
Il tasto \"%1$s\" è già assegnato alla funzione \"%2$s\". Vuoi assegnarlo a \"%3$s\"?
* Premi o tieni premuto un tasto per assegnarlo alla funzione \"%1$s\".\n\n* Premi 0 per annullare.\n\n* Premi 2 per disabilitare la funzione.
Riassegnare
+ Ripristina (Redo)
Input vocale
Ripristina i tasti predefiniti
(tenere premuto)
@@ -214,5 +215,6 @@
Mostrare impostazioni
Mostra testo in composizione
Ridimensionare trascinando
+ Annulla (Undo)
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index a620b45f..3f973bfa 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -92,6 +92,7 @@
הקצה מחדש
לחצן הוספת מילה
לחצן הצגת הגדרות
+ ביצוע חוזר (Redo)
קלט קולי
שחזור לחצני ברירת מחדל
הגדרות ברירת המחדל שוחזרו.
@@ -218,4 +219,5 @@
הצעה קודמת
הצגת טקסט בהרכבה
שינוי גודל על ידי גרירה
+ ביטול (Undo)
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index f6b2b7dc..24df4e96 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -100,6 +100,7 @@
Perpriskirti
Pridėti žodį
Rodyti nustatymus
+ Pakartoti (Redo)
Balso įvestis
Atkurti numatytąsias reikšmes
Numatytosios reikšmės atkurtos.
@@ -220,4 +221,5 @@
* Paspauskite arba palaikykite klavišą, kad priskirtumėte jį funkcijai „%1$s“.\n\n* Paspauskite 0, kad atšauktumėte.\n\n* Paspauskite 2, kad išjungtumėte funkciją.
Rodyti rašomą tekstą
Keisti dydį tempiant
+ Atšaukti (Undo)
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index d6b0d5c7..e338f229 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -204,6 +204,7 @@
* Druk of houd een toets ingedrukt om deze toe te wijzen aan de functie \"%1$s\".\n\n* Druk op 0 om te annuleren.\n\n* Druk op 2 om de functie uit te schakelen.
Opnieuw toewijzen
Instellingen weergeven
+ Opnieuw uitvoeren
Spraakinvoer
Standaardtoetsen herstellen
(Ingedrukt houden)
@@ -212,4 +213,5 @@
Volgende taal
Filter wissen
Compositietekst weergeven
+ Ongedaan maken
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index fd302bb2..d3c9ab0e 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -86,6 +86,7 @@
Reatribuir
Adicionar palavra
Entrar em Configurações
+ Refazer
Entrada por Voz
Restaurar Atalhos Padrão
Atalhos Restaurados.
@@ -218,4 +219,5 @@
Sugestão Anterior
Mostrar texto em composição
Redimensionar arrastando
+ Desfazer
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index d5cba8f9..963864b7 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -89,6 +89,7 @@
Назначить заново
Добавить слово
Настройки
+ Повторить (Redo)
Голосовой ввод
Вернуть кнопки по умолчанию
Настройки кнопок по умолчанию восстановлены.
@@ -211,4 +212,5 @@
* Нажмите или удерживайте клавишу, чтобы назначить её на функцию «%1$s».\n\n* Нажмите 0, чтобы отменить.\n\n* Нажмите 2, чтобы отключить функцию.
Показывать текст при вводе
Изменять размер перетаскиванием
+ Отменить (Undo)
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index f0deb5e1..d4f16e1f 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -154,6 +154,7 @@
Yeniden ata
Kelime ekle
Ayarları göster
+ Yinele (Redo)
Sesli giriş
Varsayılan Ayarlara Geri Dön
Varsayılan tuş ayarlarına dönüldü.
@@ -216,4 +217,5 @@
(basılı tut)
Yazılan metni göster
Sürükleyerek yeniden boyutlandır
+ Geri al (Undo)
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 57e9cb2c..2fe3e468 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -132,6 +132,7 @@
Перепризначити
Додати слово
Показати налаштування
+ Повторити (Redo)
Голосове введення
Відновити стандартні клавіші
Стандартні налаштування клавіш відновленно.
@@ -222,4 +223,5 @@
* Натисніть або утримуйте клавішу, щоб призначити її функції «%1$s».\n\n* Натисніть 0, щоб скасувати.\n\n* Натисніть 2, щоб вимкнути функцію.
Показувати текст під час введення
Змінювати розмір перетягуванням
+ Скасувати (Undo)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7eaba8e4..8351a48f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -176,6 +176,8 @@
Input Mode
Select Keyboard
Show Settings
+ Undo
+ Redo
Voice Input
Restore Default Keys
Default key settings restored.
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 7f554665..7eda7cf7 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -267,6 +267,11 @@
- 0dp
+
+
-
-
-
-
diff --git a/app/src/main/res/xml/prefs_screen_hotkeys.xml b/app/src/main/res/xml/prefs_screen_hotkeys.xml
index 480ddd16..138eea69 100644
--- a/app/src/main/res/xml/prefs_screen_hotkeys.xml
+++ b/app/src/main/res/xml/prefs_screen_hotkeys.xml
@@ -58,6 +58,14 @@
app:key="key_show_settings"
app:title="@string/function_show_settings" />
+
+
+
+