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