# HG changeset patch # User Carl Byington # Date 1403573014 25200 # Node ID 4e1e1a6ee9f902034e7b2280860929eaafe856d6 # Parent 156b53fc4815ed616c96f5d1223febd8fae3f6a9 allow button shortcuts to see key up/down, so the monitor key can toggle properly diff -r 156b53fc4815 -r 4e1e1a6ee9f9 src/com/five_ten_sg/connectbot/service/TerminalKeyListener.java --- a/src/com/five_ten_sg/connectbot/service/TerminalKeyListener.java Mon Jun 23 17:54:39 2014 -0700 +++ b/src/com/five_ten_sg/connectbot/service/TerminalKeyListener.java Mon Jun 23 18:23:34 2014 -0700 @@ -145,9 +145,12 @@ // skip keys if we aren't connected yet or have been disconnected if (bridge.isDisconnected()) return false; + // short cuts can see repeat counts and key up/down + if handleShortcuts(v, event, repeat, (event.getAction() == KeyEvent.ACTION_DOWN) return true; + // Ignore all key-up events except for the special keys if (event.getAction() == KeyEvent.ACTION_UP) { - // There's nothing here for virtual keyboard users. + // There's nothing else here for virtual keyboard users. if (!hardKeyboard || hardKeyboardHidden) return false; // if keycode debugging enabled, log and print the pressed key @@ -459,41 +462,6 @@ bridge.tryKeyVibrate(); return true; - case KeyEvent.KEYCODE_CAMERA: - // check to see which shortcut the camera button triggers - String hwbuttonShortcut = manager.prefs.getString( - PreferenceConstants.CAMERA, - PreferenceConstants.HWBUTTON_SCREEN_CAPTURE); - return (handleShortcut(v, hwbuttonShortcut, repeat)); - - case KeyEvent.KEYCODE_VOLUME_UP: - // check to see which shortcut the volume button triggers - hwbuttonShortcut = manager.prefs.getString( - PreferenceConstants.VOLUP, - PreferenceConstants.HWBUTTON_CTRL); - return (handleShortcut(v, hwbuttonShortcut, repeat)); - - case KeyEvent.KEYCODE_VOLUME_DOWN: - // check to see which shortcut the camera button triggers - hwbuttonShortcut = manager.prefs.getString( - PreferenceConstants.VOLDN, - PreferenceConstants.HWBUTTON_TAB); - return (handleShortcut(v, hwbuttonShortcut, repeat)); - - case KeyEvent.KEYCODE_SEARCH: - // check to see which shortcut the search button triggers - hwbuttonShortcut = manager.prefs.getString( - PreferenceConstants.SEARCH, - PreferenceConstants.HWBUTTON_ESC); - return (handleShortcut(v, hwbuttonShortcut, repeat)); - - case KeyEvent.KEYCODE_BUTTON_L2: - // check to see which shortcut the ptt button triggers - hwbuttonShortcut = manager.prefs.getString( - PreferenceConstants.PTT, - PreferenceConstants.HWBUTTON_MONITOR); - return (handleShortcut(v, hwbuttonShortcut, repeat)); - case KeyEvent.KEYCODE_DEL: if ((metaState & META_ALT_MASK) != 0) { buffer.keyPressed(vt320.KEY_INSERT, ' ', getStateForBuffer()); @@ -599,34 +567,82 @@ return false; } - private boolean handleShortcut(View v, String shortcut, int repeat) { + private boolean handleShortcuts(View v, int keyCode, KeyEvent event, int repeat, boolean down) { + switch (keyCode) { + case KeyEvent.KEYCODE_CAMERA: + // check to see which shortcut the camera button triggers + String hwbuttonShortcut = manager.prefs.getString( + PreferenceConstants.CAMERA, + PreferenceConstants.HWBUTTON_SCREEN_CAPTURE); + return (handleShortcut(v, hwbuttonShortcut, repeat, down)); + + case KeyEvent.KEYCODE_VOLUME_UP: + // check to see which shortcut the volume button triggers + hwbuttonShortcut = manager.prefs.getString( + PreferenceConstants.VOLUP, + PreferenceConstants.HWBUTTON_CTRL); + return (handleShortcut(v, hwbuttonShortcut, repeat, down)); + + case KeyEvent.KEYCODE_VOLUME_DOWN: + // check to see which shortcut the camera button triggers + hwbuttonShortcut = manager.prefs.getString( + PreferenceConstants.VOLDN, + PreferenceConstants.HWBUTTON_TAB); + return (handleShortcut(v, hwbuttonShortcut, repeat, down)); + + case KeyEvent.KEYCODE_SEARCH: + // check to see which shortcut the search button triggers + hwbuttonShortcut = manager.prefs.getString( + PreferenceConstants.SEARCH, + PreferenceConstants.HWBUTTON_ESC); + return (handleShortcut(v, hwbuttonShortcut, repeat, down)); + + case KeyEvent.KEYCODE_BUTTON_L2: + // check to see which shortcut the ptt button triggers + hwbuttonShortcut = manager.prefs.getString( + PreferenceConstants.PTT, + PreferenceConstants.HWBUTTON_MONITOR); + return (handleShortcut(v, hwbuttonShortcut, repeat, down)); + + default: return false; + } + } + + private boolean handleShortcut(View v, String shortcut, int repeat, boolean down) { if (PreferenceConstants.HWBUTTON_SCREEN_CAPTURE.equals(shortcut)) { if (repeat > 0) return false; + if (!down) return false; bridge.captureScreen(); } else if (PreferenceConstants.HWBUTTON_MONITOR.equals(shortcut)) { if (repeat > 0) return false; - buffer.monitorKey(true); // key down + buffer.monitorKey(down); } else if (PreferenceConstants.HWBUTTON_CTRL.equals(shortcut)) { + if (!down) return false; showMetakeyToast(v, PreferenceConstants.HWBUTTON_CTRL); metaPress(META_CTRL_ON); } else if (PreferenceConstants.HWBUTTON_TAB.equals(shortcut)) { + if (!down) return false; buffer.keyPressed(vt320.KEY_TAB, ' ', getStateForBuffer()); } else if (PreferenceConstants.HWBUTTON_CTRLA_SPACE.equals(shortcut)) { + if (!down) return false; buffer.write(0x01); buffer.write(' '); } else if (PreferenceConstants.HWBUTTON_CTRLA.equals(shortcut)) { + if (!down) return false; buffer.write(0x01); } else if (PreferenceConstants.HWBUTTON_ESC.equals(shortcut)) { + if (!down) return false; showMetakeyToast(v, PreferenceConstants.HWBUTTON_ESC); sendEscape(); } else if (PreferenceConstants.HWBUTTON_ESC_A.equals(shortcut)) { + if (!down) return false; sendEscape(); buffer.write('a'); }