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