diff --git a/res/values/strings.xml b/res/values/strings.xml
index 04a0230a..e21d71f9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -73,8 +73,6 @@
--
Back
Call
- Clear
- Delete
Menu
Left Func
Right Func
diff --git a/src/io/github/sspanak/tt9/ime/KeyPadHandler.java b/src/io/github/sspanak/tt9/ime/KeyPadHandler.java
index 4d752964..7de9c1b2 100644
--- a/src/io/github/sspanak/tt9/ime/KeyPadHandler.java
+++ b/src/io/github/sspanak/tt9/ime/KeyPadHandler.java
@@ -118,10 +118,10 @@ abstract class KeyPadHandler extends InputMethodService {
// Logger.d("onKeyDown", "Key: " + event + " repeat?: " + event.getRepeatCount() + " long-time: " + event.isLongPress());
- // "backspace" key must repeat its function, when held down, so we handle it in a special way
- if (keyCode == settings.getKeyBackspace()) {
+ // "backspace" key must repeat its function when held down, so we handle it in a special way
+ if (Key.isBackspace(settings, keyCode)) {
// When there is no more text, allow "Back" key to function normally, not to block navigation.
- // All other keys are blocked, unless it turns out it is annoying this way.
+ // All other keys have their default function disabled.
isBackspaceHandled = onBackspace() || keyCode != KeyEvent.KEYCODE_BACK;
return isBackspaceHandled;
} else {
diff --git a/src/io/github/sspanak/tt9/ime/TraditionalT9.java b/src/io/github/sspanak/tt9/ime/TraditionalT9.java
index 6c6b80a1..44939b0f 100644
--- a/src/io/github/sspanak/tt9/ime/TraditionalT9.java
+++ b/src/io/github/sspanak/tt9/ime/TraditionalT9.java
@@ -23,6 +23,7 @@ import io.github.sspanak.tt9.ime.modes.InputMode;
import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.languages.LanguageCollection;
import io.github.sspanak.tt9.preferences.SettingsStore;
+import io.github.sspanak.tt9.preferences.helpers.Hotkeys;
import io.github.sspanak.tt9.ui.UI;
import io.github.sspanak.tt9.ui.main.MainView;
import io.github.sspanak.tt9.ui.tray.StatusBar;
@@ -88,7 +89,7 @@ public class TraditionalT9 extends KeyPadHandler {
private void validateFunctionKeys() {
if (settings.isSettingsKeyMissing()) {
- settings.setDefaultKeys();
+ Hotkeys.setDefault(settings);
}
}
diff --git a/src/io/github/sspanak/tt9/ime/helpers/Key.java b/src/io/github/sspanak/tt9/ime/helpers/Key.java
index 9b90aaa6..ef469002 100644
--- a/src/io/github/sspanak/tt9/ime/helpers/Key.java
+++ b/src/io/github/sspanak/tt9/ime/helpers/Key.java
@@ -5,6 +5,14 @@ import android.view.KeyEvent;
import io.github.sspanak.tt9.preferences.SettingsStore;
public class Key {
+ public static boolean isBackspace(SettingsStore settings, int keyCode) {
+ return
+ keyCode == KeyEvent.KEYCODE_DEL
+ || keyCode == KeyEvent.KEYCODE_CLEAR
+ || keyCode == settings.getKeyBackspace();
+ }
+
+
public static boolean isNumber(int keyCode) {
return
(keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9)
diff --git a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java b/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java
index 1715bf00..b86b9940 100644
--- a/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java
+++ b/src/io/github/sspanak/tt9/preferences/PreferencesActivity.java
@@ -18,6 +18,7 @@ import io.github.sspanak.tt9.db.DictionaryDb;
import io.github.sspanak.tt9.db.DictionaryLoader;
import io.github.sspanak.tt9.ime.helpers.GlobalKeyboardSettings;
import io.github.sspanak.tt9.ime.helpers.InputModeValidator;
+import io.github.sspanak.tt9.preferences.helpers.Hotkeys;
import io.github.sspanak.tt9.preferences.screens.AppearanceScreen;
import io.github.sspanak.tt9.preferences.screens.DictionariesScreen;
import io.github.sspanak.tt9.preferences.screens.HotkeysScreen;
@@ -143,7 +144,7 @@ public class PreferencesActivity extends AppCompatActivity implements Preference
private void validateFunctionKeys() {
if (settings.isSettingsKeyMissing()) {
- settings.setDefaultKeys();
+ Hotkeys.setDefault(settings);
}
}
diff --git a/src/io/github/sspanak/tt9/preferences/SettingsStore.java b/src/io/github/sspanak/tt9/preferences/SettingsStore.java
index aaddc2bf..f65390c6 100644
--- a/src/io/github/sspanak/tt9/preferences/SettingsStore.java
+++ b/src/io/github/sspanak/tt9/preferences/SettingsStore.java
@@ -2,7 +2,6 @@ package io.github.sspanak.tt9.preferences;
import android.content.Context;
import android.content.SharedPreferences;
-import android.view.KeyEvent;
import androidx.preference.PreferenceManager;
@@ -161,12 +160,12 @@ public class SettingsStore {
return getKeyShowSettings() == 0;
}
- public void setDefaultKeys() {
- prefsEditor.putString(SectionKeymap.ITEM_ADD_WORD, String.valueOf(KeyEvent.KEYCODE_STAR));
- prefsEditor.putString(SectionKeymap.ITEM_BACKSPACE, String.valueOf(KeyEvent.KEYCODE_BACK));
- prefsEditor.putString(SectionKeymap.ITEM_NEXT_INPUT_MODE, String.valueOf(KeyEvent.KEYCODE_POUND));
- prefsEditor.putString(SectionKeymap.ITEM_NEXT_LANGUAGE, String.valueOf(-KeyEvent.KEYCODE_POUND));
- prefsEditor.putString(SectionKeymap.ITEM_SHOW_SETTINGS, String.valueOf(-KeyEvent.KEYCODE_STAR));
+ public void setDefaultKeys(int addWord, int backspace, int nextInputMode, int nextLanguage, int showSettings) {
+ prefsEditor.putString(SectionKeymap.ITEM_ADD_WORD, String.valueOf(addWord));
+ prefsEditor.putString(SectionKeymap.ITEM_BACKSPACE, String.valueOf(backspace));
+ prefsEditor.putString(SectionKeymap.ITEM_NEXT_INPUT_MODE, String.valueOf(nextInputMode));
+ prefsEditor.putString(SectionKeymap.ITEM_NEXT_LANGUAGE, String.valueOf(nextLanguage));
+ prefsEditor.putString(SectionKeymap.ITEM_SHOW_SETTINGS, String.valueOf(showSettings));
prefsEditor.apply();
}
@@ -181,19 +180,15 @@ public class SettingsStore {
public int getKeyAddWord() {
return getFunctionKey(SectionKeymap.ITEM_ADD_WORD);
}
-
public int getKeyBackspace() {
return getFunctionKey(SectionKeymap.ITEM_BACKSPACE);
}
-
public int getKeyNextInputMode() {
return getFunctionKey(SectionKeymap.ITEM_NEXT_INPUT_MODE);
}
-
public int getKeyNextLanguage() {
return getFunctionKey(SectionKeymap.ITEM_NEXT_LANGUAGE);
}
-
public int getKeyShowSettings() {
return getFunctionKey(SectionKeymap.ITEM_SHOW_SETTINGS);
}
diff --git a/src/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java b/src/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java
index 61642fa6..232a2204 100644
--- a/src/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java
+++ b/src/io/github/sspanak/tt9/preferences/helpers/Hotkeys.java
@@ -10,6 +10,7 @@ import java.util.LinkedHashMap;
import java.util.Set;
import io.github.sspanak.tt9.R;
+import io.github.sspanak.tt9.preferences.SettingsStore;
public class Hotkeys {
private final Context context;
@@ -39,6 +40,34 @@ public class Hotkeys {
}
+ /**
+ * setDefault
+ * Applies the default hotkey scheme.
+ * When a standard "Backspace" hardware key is available, "Backspace" hotkey association is not necessary,
+ * so it will be left out blank, to allow the hardware key do its job.
+ * When the on-screen keyboard is on, "Back" is also not associated, because it will cause weird user
+ * experience. Instead the on-screen "Backspace" key can be used.
+ */
+ public static void setDefault(SettingsStore settings) {
+ int backspaceKeyCode = KeyEvent.KEYCODE_BACK;
+ if (
+ KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_CLEAR)
+ || KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_DEL)
+ || settings.getShowSoftNumpad()
+ ) {
+ backspaceKeyCode = 0;
+ }
+
+ settings.setDefaultKeys(
+ KeyEvent.KEYCODE_STAR,
+ backspaceKeyCode,
+ KeyEvent.KEYCODE_POUND,
+ -KeyEvent.KEYCODE_POUND,
+ -KeyEvent.KEYCODE_STAR
+ );
+ }
+
+
/**
* addIfDeviceHasKey
* Add the key only if Android says the device has such keypad button or a permanent touch key.
@@ -107,8 +136,6 @@ public class Hotkeys {
add(KeyEvent.KEYCODE_CALL, R.string.key_call, true);
addIfDeviceHasKey(KeyEvent.KEYCODE_BACK, R.string.key_back, false);
- addIfDeviceHasKey(KeyEvent.KEYCODE_CLEAR, R.string.key_clear, false);
- addIfDeviceHasKey(KeyEvent.KEYCODE_DEL, R.string.key_delete, false);
addIfDeviceHasKey(KeyEvent.KEYCODE_F1, "F1", true);
addIfDeviceHasKey(KeyEvent.KEYCODE_F2, "F2", true);
addIfDeviceHasKey(KeyEvent.KEYCODE_F3, "F3", true);
diff --git a/src/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java b/src/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java
index 1c8c5e95..c712e63b 100644
--- a/src/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java
+++ b/src/io/github/sspanak/tt9/preferences/items/ItemResetKeys.java
@@ -6,6 +6,7 @@ import androidx.preference.Preference;
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.preferences.SettingsStore;
+import io.github.sspanak.tt9.preferences.helpers.Hotkeys;
import io.github.sspanak.tt9.ui.UI;
@@ -26,7 +27,7 @@ public class ItemResetKeys extends ItemClickable {
@Override
protected boolean onClick(Preference p) {
- settings.setDefaultKeys();
+ Hotkeys.setDefault(settings);
dropdowns.reloadSettings();
UI.toast(context, R.string.function_reset_keys_done);
return true;