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;