From 7400a38c36a66665a6b7ae16bc15dc4ec2fd10c7 Mon Sep 17 00:00:00 2001 From: Gaurav Ujjwal Date: Sat, 13 Nov 2021 21:30:10 +0530 Subject: [PATCH] Allow mapping 'Back' key to 'Escape' It provides a workaround for some devices where Escape key is hardwired to produce Back key press. But we don't want to affect the Back button in navigation Bar which is used used for disconnecting. Github Issue: #12 --- .../java/com/gaurav/avnc/ui/vnc/KeyHandler.kt | 29 +++++++++++++++---- .../com/gaurav/avnc/util/AppPreferences.kt | 1 + app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/pref_input.xml | 6 ++++ 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/gaurav/avnc/ui/vnc/KeyHandler.kt b/app/src/main/java/com/gaurav/avnc/ui/vnc/KeyHandler.kt index e2e81c7..7ff25b4 100644 --- a/app/src/main/java/com/gaurav/avnc/ui/vnc/KeyHandler.kt +++ b/app/src/main/java/com/gaurav/avnc/ui/vnc/KeyHandler.kt @@ -80,11 +80,6 @@ import com.gaurav.avnc.vnc.XKeySymUnicode */ class KeyHandler(private val dispatcher: Dispatcher, private val compatMode: Boolean, prefs: AppPreferences) { - init { - if (prefs.input.kmLanguageSwitchToSuper) updateKeyMap(KeyEvent.KEYCODE_LANGUAGE_SWITCH, XKeySym.XK_Super_L) - if (prefs.input.kmRightAltToSuper) updateKeyMap(KeyEvent.KEYCODE_ALT_RIGHT, XKeySym.XK_Super_L) - } - /** * Shortcut to send both up & down events. Useful for Virtual Keys. */ @@ -99,7 +94,7 @@ class KeyHandler(private val dispatcher: Dispatcher, private val compatMode: Boo } fun onKeyEvent(event: KeyEvent): Boolean { - return handleKeyEvent(event) + return handleKeyEvent(preProcessEvent(event)) } @@ -273,6 +268,28 @@ class KeyHandler(private val dispatcher: Dispatcher, private val compatMode: Boo return false } + /************************************************************************************ + * Custom key-mappings + ***********************************************************************************/ + + init { + if (prefs.input.kmLanguageSwitchToSuper) updateKeyMap(KeyEvent.KEYCODE_LANGUAGE_SWITCH, XKeySym.XK_Super_L) + if (prefs.input.kmRightAltToSuper) updateKeyMap(KeyEvent.KEYCODE_ALT_RIGHT, XKeySym.XK_Super_L) + } + + // We can't map Back key to Escape inside init because we don't + // want to affect Back key events coming from Navigation Bar. + // So we have to test each event. + private val kmBackToEscape = prefs.input.kmBackToEscape + + private fun preProcessEvent(event: KeyEvent): KeyEvent { + if (event.keyCode == KeyEvent.KEYCODE_BACK && kmBackToEscape + && (event.flags and KeyEvent.FLAG_VIRTUAL_HARD_KEY == 0)) + return KeyEvent(event.action, KeyEvent.KEYCODE_ESCAPE) + + return event + } + /************************************************************************************ * Convert String to Array of Unicode code-points ***********************************************************************************/ diff --git a/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt b/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt index 2695562..6115a08 100644 --- a/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt +++ b/app/src/main/java/com/gaurav/avnc/util/AppPreferences.kt @@ -57,6 +57,7 @@ class AppPreferences(context: Context) { val kmLanguageSwitchToSuper; get() = prefs.getBoolean("km_language_switch_to_super", false) val kmRightAltToSuper; get() = prefs.getBoolean("km_right_alt_to_super", false) + val kmBackToEscape; get() = prefs.getBoolean("km_back_to_escape", false) } inner class Server { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f4b59c5..70f522f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -138,6 +138,8 @@ Key Mappings Right Alt to Super Language Switch to Super + Back to Escape + Navigation Bar is not affected by this Use Fullscreen Enable Picture-in-Picture Toolbar diff --git a/app/src/main/res/xml/pref_input.xml b/app/src/main/res/xml/pref_input.xml index e7d337b..d3a1802 100644 --- a/app/src/main/res/xml/pref_input.xml +++ b/app/src/main/res/xml/pref_input.xml @@ -110,6 +110,12 @@ app:defaultValue="false" app:key="km_language_switch_to_super" app:title="@string/pref_km_language_switch_to_super" /> + + \ No newline at end of file