|
Packit |
1fb8d4 |
/*
|
|
Packit |
1fb8d4 |
Android Keyboard Mapping
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
|
|
Packit Service |
5a9772 |
If a copy of the MPL was not distributed with this file, You can obtain one at
|
|
Packit Service |
5a9772 |
http://mozilla.org/MPL/2.0/.
|
|
Packit |
1fb8d4 |
*/
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
package com.freerdp.freerdpcore.utils;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
import android.content.Context;
|
|
Packit |
1fb8d4 |
import android.view.KeyEvent;
|
|
Packit |
1fb8d4 |
|
|
Packit |
1fb8d4 |
import com.freerdp.freerdpcore.R;
|
|
Packit |
1fb8d4 |
|
|
Packit Service |
5a9772 |
public class KeyboardMapper
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
public static final int KEYBOARD_TYPE_FUNCTIONKEYS = 1;
|
|
Packit Service |
5a9772 |
public static final int KEYBOARD_TYPE_NUMPAD = 2;
|
|
Packit Service |
5a9772 |
public static final int KEYBOARD_TYPE_CURSOR = 3;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// defines key states for modifier keys - locked means on and no auto-release if an other key is
|
|
Packit Service |
5a9772 |
// pressed
|
|
Packit Service |
5a9772 |
public static final int KEYSTATE_ON = 1;
|
|
Packit Service |
5a9772 |
public static final int KEYSTATE_LOCKED = 2;
|
|
Packit Service |
5a9772 |
public static final int KEYSTATE_OFF = 3;
|
|
Packit Service |
5a9772 |
final static int VK_LBUTTON = 0x01;
|
|
Packit Service |
5a9772 |
final static int VK_RBUTTON = 0x02;
|
|
Packit Service |
5a9772 |
final static int VK_CANCEL = 0x03;
|
|
Packit Service |
5a9772 |
final static int VK_MBUTTON = 0x04;
|
|
Packit Service |
5a9772 |
final static int VK_XBUTTON1 = 0x05;
|
|
Packit Service |
5a9772 |
final static int VK_XBUTTON2 = 0x06;
|
|
Packit Service |
5a9772 |
final static int VK_BACK = 0x08;
|
|
Packit Service |
5a9772 |
final static int VK_TAB = 0x09;
|
|
Packit Service |
5a9772 |
final static int VK_CLEAR = 0x0C;
|
|
Packit Service |
5a9772 |
final static int VK_RETURN = 0x0D;
|
|
Packit Service |
5a9772 |
final static int VK_SHIFT = 0x10;
|
|
Packit Service |
5a9772 |
final static int VK_CONTROL = 0x11;
|
|
Packit Service |
5a9772 |
final static int VK_MENU = 0x12;
|
|
Packit Service |
5a9772 |
final static int VK_PAUSE = 0x13;
|
|
Packit Service |
5a9772 |
final static int VK_CAPITAL = 0x14;
|
|
Packit Service |
5a9772 |
final static int VK_KANA = 0x15;
|
|
Packit Service |
5a9772 |
final static int VK_HANGUEL = 0x15;
|
|
Packit Service |
5a9772 |
final static int VK_HANGUL = 0x15;
|
|
Packit Service |
5a9772 |
final static int VK_JUNJA = 0x17;
|
|
Packit Service |
5a9772 |
final static int VK_FINAL = 0x18;
|
|
Packit Service |
5a9772 |
final static int VK_HANJA = 0x19;
|
|
Packit Service |
5a9772 |
final static int VK_KANJI = 0x19;
|
|
Packit Service |
5a9772 |
final static int VK_ESCAPE = 0x1B;
|
|
Packit Service |
5a9772 |
final static int VK_CONVERT = 0x1C;
|
|
Packit Service |
5a9772 |
final static int VK_NONCONVERT = 0x1D;
|
|
Packit Service |
5a9772 |
final static int VK_ACCEPT = 0x1E;
|
|
Packit Service |
5a9772 |
final static int VK_MODECHANGE = 0x1F;
|
|
Packit Service |
5a9772 |
final static int VK_SPACE = 0x20;
|
|
Packit Service |
5a9772 |
final static int VK_PRIOR = 0x21;
|
|
Packit Service |
5a9772 |
final static int VK_NEXT = 0x22;
|
|
Packit Service |
5a9772 |
final static int VK_END = 0x23;
|
|
Packit Service |
5a9772 |
final static int VK_HOME = 0x24;
|
|
Packit Service |
5a9772 |
final static int VK_LEFT = 0x25;
|
|
Packit Service |
5a9772 |
final static int VK_UP = 0x26;
|
|
Packit Service |
5a9772 |
final static int VK_RIGHT = 0x27;
|
|
Packit Service |
5a9772 |
final static int VK_DOWN = 0x28;
|
|
Packit Service |
5a9772 |
final static int VK_SELECT = 0x29;
|
|
Packit Service |
5a9772 |
final static int VK_PRINT = 0x2A;
|
|
Packit Service |
5a9772 |
final static int VK_EXECUTE = 0x2B;
|
|
Packit Service |
5a9772 |
final static int VK_SNAPSHOT = 0x2C;
|
|
Packit Service |
5a9772 |
final static int VK_INSERT = 0x2D;
|
|
Packit Service |
5a9772 |
final static int VK_DELETE = 0x2E;
|
|
Packit Service |
5a9772 |
final static int VK_HELP = 0x2F;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_0 = 0x30;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_1 = 0x31;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_2 = 0x32;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_3 = 0x33;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_4 = 0x34;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_5 = 0x35;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_6 = 0x36;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_7 = 0x37;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_8 = 0x38;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_9 = 0x39;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_A = 0x41;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_B = 0x42;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_C = 0x43;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_D = 0x44;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_E = 0x45;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_F = 0x46;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_G = 0x47;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_H = 0x48;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_I = 0x49;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_J = 0x4A;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_K = 0x4B;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_L = 0x4C;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_M = 0x4D;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_N = 0x4E;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_O = 0x4F;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_P = 0x50;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_Q = 0x51;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_R = 0x52;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_S = 0x53;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_T = 0x54;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_U = 0x55;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_V = 0x56;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_W = 0x57;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_X = 0x58;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_Y = 0x59;
|
|
Packit Service |
5a9772 |
final static int VK_KEY_Z = 0x5A;
|
|
Packit Service |
5a9772 |
final static int VK_LWIN = 0x5B;
|
|
Packit Service |
5a9772 |
final static int VK_RWIN = 0x5C;
|
|
Packit Service |
5a9772 |
final static int VK_APPS = 0x5D;
|
|
Packit Service |
5a9772 |
final static int VK_SLEEP = 0x5F;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD0 = 0x60;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD1 = 0x61;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD2 = 0x62;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD3 = 0x63;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD4 = 0x64;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD5 = 0x65;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD6 = 0x66;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD7 = 0x67;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD8 = 0x68;
|
|
Packit Service |
5a9772 |
final static int VK_NUMPAD9 = 0x69;
|
|
Packit Service |
5a9772 |
final static int VK_MULTIPLY = 0x6A;
|
|
Packit Service |
5a9772 |
final static int VK_ADD = 0x6B;
|
|
Packit Service |
5a9772 |
final static int VK_SEPARATOR = 0x6C;
|
|
Packit Service |
5a9772 |
final static int VK_SUBTRACT = 0x6D;
|
|
Packit Service |
5a9772 |
final static int VK_DECIMAL = 0x6E;
|
|
Packit Service |
5a9772 |
final static int VK_DIVIDE = 0x6F;
|
|
Packit Service |
5a9772 |
final static int VK_F1 = 0x70;
|
|
Packit Service |
5a9772 |
final static int VK_F2 = 0x71;
|
|
Packit Service |
5a9772 |
final static int VK_F3 = 0x72;
|
|
Packit Service |
5a9772 |
final static int VK_F4 = 0x73;
|
|
Packit Service |
5a9772 |
final static int VK_F5 = 0x74;
|
|
Packit Service |
5a9772 |
final static int VK_F6 = 0x75;
|
|
Packit Service |
5a9772 |
final static int VK_F7 = 0x76;
|
|
Packit Service |
5a9772 |
final static int VK_F8 = 0x77;
|
|
Packit Service |
5a9772 |
final static int VK_F9 = 0x78;
|
|
Packit Service |
5a9772 |
final static int VK_F10 = 0x79;
|
|
Packit Service |
5a9772 |
final static int VK_F11 = 0x7A;
|
|
Packit Service |
5a9772 |
final static int VK_F12 = 0x7B;
|
|
Packit Service |
5a9772 |
final static int VK_F13 = 0x7C;
|
|
Packit Service |
5a9772 |
final static int VK_F14 = 0x7D;
|
|
Packit Service |
5a9772 |
final static int VK_F15 = 0x7E;
|
|
Packit Service |
5a9772 |
final static int VK_F16 = 0x7F;
|
|
Packit Service |
5a9772 |
final static int VK_F17 = 0x80;
|
|
Packit Service |
5a9772 |
final static int VK_F18 = 0x81;
|
|
Packit Service |
5a9772 |
final static int VK_F19 = 0x82;
|
|
Packit Service |
5a9772 |
final static int VK_F20 = 0x83;
|
|
Packit Service |
5a9772 |
final static int VK_F21 = 0x84;
|
|
Packit Service |
5a9772 |
final static int VK_F22 = 0x85;
|
|
Packit Service |
5a9772 |
final static int VK_F23 = 0x86;
|
|
Packit Service |
5a9772 |
final static int VK_F24 = 0x87;
|
|
Packit Service |
5a9772 |
final static int VK_NUMLOCK = 0x90;
|
|
Packit Service |
5a9772 |
final static int VK_SCROLL = 0x91;
|
|
Packit Service |
5a9772 |
final static int VK_LSHIFT = 0xA0;
|
|
Packit Service |
5a9772 |
final static int VK_RSHIFT = 0xA1;
|
|
Packit Service |
5a9772 |
final static int VK_LCONTROL = 0xA2;
|
|
Packit Service |
5a9772 |
final static int VK_RCONTROL = 0xA3;
|
|
Packit Service |
5a9772 |
final static int VK_LMENU = 0xA4;
|
|
Packit Service |
5a9772 |
final static int VK_RMENU = 0xA5;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_BACK = 0xA6;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_FORWARD = 0xA7;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_REFRESH = 0xA8;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_STOP = 0xA9;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_SEARCH = 0xAA;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_FAVORITES = 0xAB;
|
|
Packit Service |
5a9772 |
final static int VK_BROWSER_HOME = 0xAC;
|
|
Packit Service |
5a9772 |
final static int VK_VOLUME_MUTE = 0xAD;
|
|
Packit Service |
5a9772 |
final static int VK_VOLUME_DOWN = 0xAE;
|
|
Packit Service |
5a9772 |
final static int VK_VOLUME_UP = 0xAF;
|
|
Packit Service |
5a9772 |
final static int VK_MEDIA_NEXT_TRACK = 0xB0;
|
|
Packit Service |
5a9772 |
final static int VK_MEDIA_PREV_TRACK = 0xB1;
|
|
Packit Service |
5a9772 |
final static int VK_MEDIA_STOP = 0xB2;
|
|
Packit Service |
5a9772 |
final static int VK_MEDIA_PLAY_PAUSE = 0xB3;
|
|
Packit Service |
5a9772 |
final static int VK_LAUNCH_MAIL = 0xB4;
|
|
Packit Service |
5a9772 |
final static int VK_LAUNCH_MEDIA_SELECT = 0xB5;
|
|
Packit Service |
5a9772 |
final static int VK_LAUNCH_APP1 = 0xB6;
|
|
Packit Service |
5a9772 |
final static int VK_LAUNCH_APP2 = 0xB7;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_1 = 0xBA;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_PLUS = 0xBB;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_COMMA = 0xBC;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_MINUS = 0xBD;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_PERIOD = 0xBE;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_2 = 0xBF;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_3 = 0xC0;
|
|
Packit Service |
5a9772 |
final static int VK_ABNT_C1 = 0xC1;
|
|
Packit Service |
5a9772 |
final static int VK_ABNT_C2 = 0xC2;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_4 = 0xDB;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_5 = 0xDC;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_6 = 0xDD;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_7 = 0xDE;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_8 = 0xDF;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_102 = 0xE2;
|
|
Packit Service |
5a9772 |
final static int VK_PROCESSKEY = 0xE5;
|
|
Packit Service |
5a9772 |
final static int VK_PACKET = 0xE7;
|
|
Packit Service |
5a9772 |
final static int VK_ATTN = 0xF6;
|
|
Packit Service |
5a9772 |
final static int VK_CRSEL = 0xF7;
|
|
Packit Service |
5a9772 |
final static int VK_EXSEL = 0xF8;
|
|
Packit Service |
5a9772 |
final static int VK_EREOF = 0xF9;
|
|
Packit Service |
5a9772 |
final static int VK_PLAY = 0xFA;
|
|
Packit Service |
5a9772 |
final static int VK_ZOOM = 0xFB;
|
|
Packit Service |
5a9772 |
final static int VK_NONAME = 0xFC;
|
|
Packit Service |
5a9772 |
final static int VK_PA1 = 0xFD;
|
|
Packit Service |
5a9772 |
final static int VK_OEM_CLEAR = 0xFE;
|
|
Packit Service |
5a9772 |
final static int VK_UNICODE = 0x80000000;
|
|
Packit Service |
5a9772 |
final static int VK_EXT_KEY = 0x00000100;
|
|
Packit Service |
5a9772 |
// key codes to switch between custom keyboard
|
|
Packit Service |
5a9772 |
private final static int EXTKEY_KBFUNCTIONKEYS = 0x1100;
|
|
Packit Service |
5a9772 |
private final static int EXTKEY_KBNUMPAD = 0x1101;
|
|
Packit Service |
5a9772 |
private final static int EXTKEY_KBCURSOR = 0x1102;
|
|
Packit Service |
5a9772 |
// this flag indicates if we got a VK or a unicode character in our translation map
|
|
Packit Service |
5a9772 |
private static final int KEY_FLAG_UNICODE = 0x80000000;
|
|
Packit Service |
5a9772 |
// this flag indicates if the key is a toggle key (remains down when pressed and goes up if
|
|
Packit Service |
5a9772 |
// pressed again)
|
|
Packit Service |
5a9772 |
private static final int KEY_FLAG_TOGGLE = 0x40000000;
|
|
Packit Service |
5a9772 |
private static int[] keymapAndroid;
|
|
Packit Service |
5a9772 |
private static int[] keymapExt;
|
|
Packit Service |
5a9772 |
private static boolean initialized = false;
|
|
Packit Service |
5a9772 |
private KeyProcessingListener listener = null;
|
|
Packit Service |
5a9772 |
private boolean shiftPressed = false;
|
|
Packit Service |
5a9772 |
private boolean ctrlPressed = false;
|
|
Packit Service |
5a9772 |
private boolean altPressed = false;
|
|
Packit Service |
5a9772 |
private boolean winPressed = false;
|
|
Packit Service |
5a9772 |
private long lastModifierTime;
|
|
Packit Service |
5a9772 |
private int lastModifierKeyCode = -1;
|
|
Packit Service |
5a9772 |
private boolean isShiftLocked = false;
|
|
Packit Service |
5a9772 |
private boolean isCtrlLocked = false;
|
|
Packit Service |
5a9772 |
private boolean isAltLocked = false;
|
|
Packit Service |
5a9772 |
private boolean isWinLocked = false;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public void init(Context context)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (initialized == true)
|
|
Packit Service |
5a9772 |
return;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
keymapAndroid = new int[256];
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_0] = VK_KEY_0;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_1] = VK_KEY_1;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_2] = VK_KEY_2;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_3] = VK_KEY_3;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_4] = VK_KEY_4;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_5] = VK_KEY_5;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_6] = VK_KEY_6;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_7] = VK_KEY_7;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_8] = VK_KEY_8;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_9] = VK_KEY_9;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_A] = VK_KEY_A;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_B] = VK_KEY_B;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_C] = VK_KEY_C;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_D] = VK_KEY_D;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_E] = VK_KEY_E;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_F] = VK_KEY_F;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_G] = VK_KEY_G;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_H] = VK_KEY_H;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_I] = VK_KEY_I;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_J] = VK_KEY_J;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_K] = VK_KEY_K;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_L] = VK_KEY_L;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_M] = VK_KEY_M;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_N] = VK_KEY_N;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_O] = VK_KEY_O;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_P] = VK_KEY_P;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_Q] = VK_KEY_Q;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_R] = VK_KEY_R;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_S] = VK_KEY_S;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_T] = VK_KEY_T;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_U] = VK_KEY_U;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_V] = VK_KEY_V;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_W] = VK_KEY_W;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_X] = VK_KEY_X;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_Y] = VK_KEY_Y;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_Z] = VK_KEY_Z;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_DEL] = VK_BACK;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_ENTER] = VK_RETURN;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_SPACE] = VK_SPACE;
|
|
Packit Service |
5a9772 |
keymapAndroid[KeyEvent.KEYCODE_TAB] = VK_TAB;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_SHIFT_LEFT] = VK_LSHIFT;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_SHIFT_RIGHT] = VK_RSHIFT;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_DPAD_DOWN] = VK_DOWN;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_DPAD_LEFT] = VK_LEFT;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_DPAD_RIGHT] = VK_RIGHT;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_DPAD_UP] = VK_UP;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_COMMA] = VK_OEM_COMMA;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_PERIOD] = VK_OEM_PERIOD;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_MINUS] = VK_OEM_MINUS;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_PLUS] = VK_OEM_PLUS;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_ALT_LEFT] = VK_LMENU;
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_ALT_RIGHT] = VK_RMENU;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_AT] = (KEY_FLAG_UNICODE | 64);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_APOSTROPHE] = (KEY_FLAG_UNICODE | 39);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_BACKSLASH] = (KEY_FLAG_UNICODE | 92);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_COMMA] = (KEY_FLAG_UNICODE | 44);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_EQUALS] = (KEY_FLAG_UNICODE | 61);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_GRAVE] = (KEY_FLAG_UNICODE | 96);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_LEFT_BRACKET] = (KEY_FLAG_UNICODE | 91);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_RIGHT_BRACKET] = (KEY_FLAG_UNICODE | 93);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_MINUS] = (KEY_FLAG_UNICODE | 45);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_PERIOD] = (KEY_FLAG_UNICODE | 46);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_PLUS] = (KEY_FLAG_UNICODE | 43);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_POUND] = (KEY_FLAG_UNICODE | 35);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_SEMICOLON] = (KEY_FLAG_UNICODE | 59);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_SLASH] = (KEY_FLAG_UNICODE | 47);
|
|
Packit Service |
5a9772 |
// keymapAndroid[KeyEvent.KEYCODE_STAR] = (KEY_FLAG_UNICODE | 42);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// special keys mapping
|
|
Packit Service |
5a9772 |
keymapExt = new int[256];
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F1)] = VK_F1;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F2)] = VK_F2;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F3)] = VK_F3;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F4)] = VK_F4;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F5)] = VK_F5;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F6)] = VK_F6;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F7)] = VK_F7;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F8)] = VK_F8;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F9)] = VK_F9;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F10)] = VK_F10;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F11)] = VK_F11;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_F12)] = VK_F12;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_tab)] = VK_TAB;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_print)] = VK_PRINT;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_insert)] =
|
|
Packit Service |
5a9772 |
VK_INSERT | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_delete)] =
|
|
Packit Service |
5a9772 |
VK_DELETE | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_home)] = VK_HOME | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_end)] = VK_END | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_pgup)] =
|
|
Packit Service |
5a9772 |
VK_PRIOR | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_pgdn)] = VK_NEXT | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// numpad mapping
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_0)] = VK_NUMPAD0;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_1)] = VK_NUMPAD1;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_2)] = VK_NUMPAD2;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_3)] = VK_NUMPAD3;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_4)] = VK_NUMPAD4;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_5)] = VK_NUMPAD5;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_6)] = VK_NUMPAD6;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_7)] = VK_NUMPAD7;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_8)] = VK_NUMPAD8;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_9)] = VK_NUMPAD9;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_numlock)] = VK_NUMLOCK;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_add)] = VK_ADD;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_comma)] = VK_DECIMAL;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_divide)] =
|
|
Packit Service |
5a9772 |
VK_DIVIDE | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_enter)] =
|
|
Packit Service |
5a9772 |
VK_RETURN | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_multiply)] =
|
|
Packit Service |
5a9772 |
VK_MULTIPLY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_subtract)] =
|
|
Packit Service |
5a9772 |
VK_SUBTRACT;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_equals)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_UNICODE | 61);
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_left_paren)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_UNICODE | 40);
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_right_paren)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_UNICODE | 41);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// cursor key codes
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_up)] = VK_UP | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_down)] = VK_DOWN | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_left)] = VK_LEFT | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_right)] =
|
|
Packit Service |
5a9772 |
VK_RIGHT | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_enter)] =
|
|
Packit Service |
5a9772 |
VK_RETURN | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_backspace)] = VK_BACK;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// shared keys
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_win)] = VK_LWIN | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_menu)] = VK_APPS | VK_EXT_KEY;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_esc)] = VK_ESCAPE;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
/* keymapExt[context.getResources().getInteger(R.integer.keycode_modifier_ctrl)] =
|
|
Packit Service |
5a9772 |
VK_LCONTROL; keymapExt[context.getResources().getInteger(R.integer.keycode_modifier_alt)]
|
|
Packit Service |
5a9772 |
= VK_LMENU;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_modifier_shift)] =
|
|
Packit Service |
5a9772 |
VK_LSHIFT;
|
|
Packit Service |
5a9772 |
*/
|
|
Packit Service |
5a9772 |
// get custom keyboard key codes
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_specialkeys_keyboard)] =
|
|
Packit Service |
5a9772 |
EXTKEY_KBFUNCTIONKEYS;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_numpad_keyboard)] =
|
|
Packit Service |
5a9772 |
EXTKEY_KBNUMPAD;
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_cursor_keyboard)] =
|
|
Packit Service |
5a9772 |
EXTKEY_KBCURSOR;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_toggle_shift)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_TOGGLE | VK_LSHIFT);
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_toggle_ctrl)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_TOGGLE | VK_LCONTROL);
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_toggle_alt)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_TOGGLE | VK_LMENU);
|
|
Packit Service |
5a9772 |
keymapExt[context.getResources().getInteger(R.integer.keycode_toggle_win)] =
|
|
Packit Service |
5a9772 |
(KEY_FLAG_TOGGLE | VK_LWIN);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
initialized = true;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public void reset(KeyProcessingListener listener)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
shiftPressed = false;
|
|
Packit Service |
5a9772 |
ctrlPressed = false;
|
|
Packit Service |
5a9772 |
altPressed = false;
|
|
Packit Service |
5a9772 |
winPressed = false;
|
|
Packit Service |
5a9772 |
setKeyProcessingListener(listener);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public void setKeyProcessingListener(KeyProcessingListener listener)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
this.listener = listener;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public boolean processAndroidKeyEvent(KeyEvent event)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
switch (event.getAction())
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
// we only process down events
|
|
Packit Service |
5a9772 |
case KeyEvent.ACTION_UP:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
return false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
case KeyEvent.ACTION_DOWN:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
boolean modifierActive = isModifierPressed();
|
|
Packit Service |
5a9772 |
// if a modifier is pressed we will send a VK event (if possible) so that key
|
|
Packit Service |
5a9772 |
// combinations will be recognized correctly. Otherwise we will send the unicode
|
|
Packit Service |
5a9772 |
// key. At the end we will reset all modifiers and notifiy our listener.
|
|
Packit Service |
5a9772 |
int vkcode = getVirtualKeyCode(event.getKeyCode());
|
|
Packit Service |
5a9772 |
if ((vkcode & KEY_FLAG_UNICODE) != 0)
|
|
Packit Service |
5a9772 |
listener.processUnicodeKey(vkcode & (~KEY_FLAG_UNICODE));
|
|
Packit Service |
5a9772 |
// if we got a valid vkcode send it - except for letters/numbers if a modifier is
|
|
Packit Service |
5a9772 |
// active
|
|
Packit Service |
5a9772 |
else if (vkcode > 0 &&
|
|
Packit Service |
5a9772 |
(event.getMetaState() & (KeyEvent.META_ALT_ON | KeyEvent.META_SHIFT_ON |
|
|
Packit Service |
5a9772 |
KeyEvent.META_SYM_ON)) == 0)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(vkcode, true);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(vkcode, false);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else if (event.isShiftPressed() && vkcode != 0)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LSHIFT, true);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(vkcode, true);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(vkcode, false);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LSHIFT, false);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else if (event.getUnicodeChar() != 0)
|
|
Packit Service |
5a9772 |
listener.processUnicodeKey(event.getUnicodeChar());
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
return false;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// reset any pending toggle states if a modifier was pressed
|
|
Packit Service |
5a9772 |
if (modifierActive)
|
|
Packit Service |
5a9772 |
resetModifierKeysAfterInput(false);
|
|
Packit Service |
5a9772 |
return true;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
case KeyEvent.ACTION_MULTIPLE:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
String str = event.getCharacters();
|
|
Packit Service |
5a9772 |
for (int i = 0; i < str.length(); i++)
|
|
Packit Service |
5a9772 |
listener.processUnicodeKey(str.charAt(i));
|
|
Packit Service |
5a9772 |
return true;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
default:
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
return false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public void processCustomKeyEvent(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
int extCode = getExtendedKeyCode(keycode);
|
|
Packit Service |
5a9772 |
if (extCode == 0)
|
|
Packit Service |
5a9772 |
return;
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// toggle button pressed?
|
|
Packit Service |
5a9772 |
if ((extCode & KEY_FLAG_TOGGLE) != 0)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
processToggleButton(extCode & (~KEY_FLAG_TOGGLE));
|
|
Packit Service |
5a9772 |
return;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// keyboard switch button pressed?
|
|
Packit Service |
5a9772 |
if (extCode == EXTKEY_KBFUNCTIONKEYS || extCode == EXTKEY_KBNUMPAD ||
|
|
Packit Service |
5a9772 |
extCode == EXTKEY_KBCURSOR)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
switchKeyboard(extCode);
|
|
Packit Service |
5a9772 |
return;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// nope - see if we got a unicode or vk
|
|
Packit Service |
5a9772 |
if ((extCode & KEY_FLAG_UNICODE) != 0)
|
|
Packit Service |
5a9772 |
listener.processUnicodeKey(extCode & (~KEY_FLAG_UNICODE));
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(extCode, true);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(extCode, false);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
resetModifierKeysAfterInput(false);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public void sendAltF4()
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LMENU, true);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_F4, true);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_F4, false);
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LMENU, false);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private boolean isModifierPressed()
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
return (shiftPressed || ctrlPressed || altPressed || winPressed);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public int getModifierState(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
int modifierCode = getExtendedKeyCode(keycode);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// check and get real modifier keycode
|
|
Packit Service |
5a9772 |
if ((modifierCode & KEY_FLAG_TOGGLE) == 0)
|
|
Packit Service |
5a9772 |
return -1;
|
|
Packit Service |
5a9772 |
modifierCode = modifierCode & (~KEY_FLAG_TOGGLE);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
switch (modifierCode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
case VK_LSHIFT:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
return (shiftPressed ? (isShiftLocked ? KEYSTATE_LOCKED : KEYSTATE_ON)
|
|
Packit Service |
5a9772 |
: KEYSTATE_OFF);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
case VK_LCONTROL:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
return (ctrlPressed ? (isCtrlLocked ? KEYSTATE_LOCKED : KEYSTATE_ON)
|
|
Packit Service |
5a9772 |
: KEYSTATE_OFF);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
case VK_LMENU:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
return (altPressed ? (isAltLocked ? KEYSTATE_LOCKED : KEYSTATE_ON) : KEYSTATE_OFF);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
case VK_LWIN:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
return (winPressed ? (isWinLocked ? KEYSTATE_LOCKED : KEYSTATE_ON) : KEYSTATE_OFF);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
return -1;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private int getVirtualKeyCode(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (keycode >= 0 && keycode <= 0xFF)
|
|
Packit Service |
5a9772 |
return keymapAndroid[keycode];
|
|
Packit Service |
5a9772 |
return 0;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private int getExtendedKeyCode(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (keycode >= 0 && keycode <= 0xFF)
|
|
Packit Service |
5a9772 |
return keymapExt[keycode];
|
|
Packit Service |
5a9772 |
return 0;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private void processToggleButton(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
switch (keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
case VK_LSHIFT:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (!checkToggleModifierLock(VK_LSHIFT))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
isShiftLocked = false;
|
|
Packit Service |
5a9772 |
shiftPressed = !shiftPressed;
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LSHIFT, shiftPressed);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
isShiftLocked = true;
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
case VK_LCONTROL:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (!checkToggleModifierLock(VK_LCONTROL))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
isCtrlLocked = false;
|
|
Packit Service |
5a9772 |
ctrlPressed = !ctrlPressed;
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LCONTROL, ctrlPressed);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
isCtrlLocked = true;
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
case VK_LMENU:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (!checkToggleModifierLock(VK_LMENU))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
isAltLocked = false;
|
|
Packit Service |
5a9772 |
altPressed = !altPressed;
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LMENU, altPressed);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
isAltLocked = true;
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
case VK_LWIN:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (!checkToggleModifierLock(VK_LWIN))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
isWinLocked = false;
|
|
Packit Service |
5a9772 |
winPressed = !winPressed;
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LWIN | VK_EXT_KEY, winPressed);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
isWinLocked = true;
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
listener.modifiersChanged();
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
public void clearlAllModifiers()
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
resetModifierKeysAfterInput(true);
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private void resetModifierKeysAfterInput(boolean force)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
if (shiftPressed && (!isShiftLocked || force))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LSHIFT, false);
|
|
Packit Service |
5a9772 |
shiftPressed = false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
if (ctrlPressed && (!isCtrlLocked || force))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LCONTROL, false);
|
|
Packit Service |
5a9772 |
ctrlPressed = false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
if (altPressed && (!isAltLocked || force))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LMENU, false);
|
|
Packit Service |
5a9772 |
altPressed = false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
if (winPressed && (!isWinLocked || force))
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.processVirtualKey(VK_LWIN | VK_EXT_KEY, false);
|
|
Packit Service |
5a9772 |
winPressed = false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
if (listener != null)
|
|
Packit Service |
5a9772 |
listener.modifiersChanged();
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private void switchKeyboard(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
switch (keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
case EXTKEY_KBFUNCTIONKEYS:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.switchKeyboard(KEYBOARD_TYPE_FUNCTIONKEYS);
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
case EXTKEY_KBNUMPAD:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.switchKeyboard(KEYBOARD_TYPE_NUMPAD);
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
case EXTKEY_KBCURSOR:
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
listener.switchKeyboard(KEYBOARD_TYPE_CURSOR);
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
default:
|
|
Packit Service |
5a9772 |
break;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
private boolean checkToggleModifierLock(int keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
long now = System.currentTimeMillis();
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// was the same modifier hit?
|
|
Packit Service |
5a9772 |
if (lastModifierKeyCode != keycode)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
lastModifierKeyCode = keycode;
|
|
Packit Service |
5a9772 |
lastModifierTime = now;
|
|
Packit Service |
5a9772 |
return false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// within a certain time interval?
|
|
Packit Service |
5a9772 |
if (lastModifierTime + 800 > now)
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
lastModifierTime = 0;
|
|
Packit Service |
5a9772 |
return true;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
else
|
|
Packit Service |
5a9772 |
{
|
|
Packit Service |
5a9772 |
lastModifierTime = now;
|
|
Packit Service |
5a9772 |
return false;
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
}
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
// interface that gets called for input handling
|
|
Packit Service |
5a9772 |
public interface KeyProcessingListener {
|
|
Packit Service |
5a9772 |
abstract void processVirtualKey(int virtualKeyCode, boolean down);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
abstract void processUnicodeKey(int unicodeKey);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
abstract void switchKeyboard(int keyboardType);
|
|
Packit Service |
5a9772 |
|
|
Packit Service |
5a9772 |
abstract void modifiersChanged();
|
|
Packit Service |
5a9772 |
}
|
|
Packit |
1fb8d4 |
}
|