module.exports = function KeycodesServiceFactory(KeycodesAndroid, KeycodesJS) { var service = {} var a = KeycodesAndroid var j = KeycodesJS var androidMap = [ [j.ENTER, a.KEYCODE_ENTER], [j.SPACE, a.KEYCODE_SPACE], [j.DELETE, a.KEYCODE_DEL], [j.ESCAPE, a.KEYCODE_ESCAPE], [j.BACKSPACE, a.KEYCODE_DEL], [j.TAB, a.KEYCODE_TAB], [j.SHIFT, a.KEYCODE_SHIFT_LEFT], [j.CAPS_LOCK, a.KEYCODE_CAPS_LOCK], [j.SLASH, a.KEYCODE_SLASH], [j.BACKSLASH, a.KEYCODE_BACKSLASH], [j.COMMA, a.KEYCODE_COMMA], [j.PERIOD, a.KEYCODE_PERIOD], [j.SEMICOLON, a.KEYCODE_SEMICOLON], [j.PAGE_UP, a.KEYCODE_PAGE_UP], [j.PAGE_DOWN, a.KEYCODE_PAGE_DOWN], // [j.LEFT_WINDOW, a.KEYCODE_RO], // [j.SELECT_KEY, a.KEYCODE_KANA], [j.HOME, a.KEYCODE_MOVE_HOME], [j.END, a.KEYCODE_MOVE_END], [j.UP, a.KEYCODE_DPAD_UP], [j.DOWN, a.KEYCODE_DPAD_DOWN], [j.LEFT, a.KEYCODE_DPAD_LEFT], [j.RIGHT, a.KEYCODE_DPAD_RIGHT], [j.F3, a.KEYCODE_POWER], [j.F7, a.KEYCODE_MEDIA_PREVIOUS], [j.F8, a.KEYCODE_MEDIA_PLAY_PAUSE], [j.F9, a.KEYCODE_MEDIA_NEXT], [j.F10, a.KEYCODE_VOLUME_MUTE], [j.F11, a.KEYCODE_VOLUME_DOWN], [j.F12, a.KEYCODE_VOLUME_UP], [j.NUMPAD_0, a.KEYCODE_NUMPAD_0], [j.NUMPAD_1, a.KEYCODE_NUMPAD_1], [j.NUMPAD_2, a.KEYCODE_NUMPAD_2], [j.NUMPAD_3, a.KEYCODE_NUMPAD_3], [j.NUMPAD_4, a.KEYCODE_NUMPAD_4], [j.NUMPAD_5, a.KEYCODE_NUMPAD_5], [j.NUMPAD_6, a.KEYCODE_NUMPAD_6], [j.NUMPAD_7, a.KEYCODE_NUMPAD_7], [j.NUMPAD_8, a.KEYCODE_NUMPAD_8], [j.NUMPAD_9, a.KEYCODE_NUMPAD_9], [j.MULTIPLY, a.KEYCODE_NUMPAD_MULTIPLY], [j.ADD, a.KEYCODE_NUMPAD_ADD], [j.SUBTRACT, a.KEYCODE_NUMPAD_SUBTRACT], [j.DECIMAL_POINT, a.KEYCODE_NUMPAD_DOT], [j.DIVIDE, a.KEYCODE_NUMPAD_DIVIDE], [j.EQUAL_SIGN, a.KEYCODE_EQUALS], [j.DASH, a.KEYCODE_MINUS], [j.GRAVE_ACCENT, a.KEYCODE_GRAVE], [j.OPEN_BRACKET, a.KEYCODE_LEFT_BRACKET], [j.CLOSE_BRACKET, a.KEYCODE_RIGHT_BRACKET], [j.SINGLE_QUOTE, a.KEYCODE_APOSTROPHE] ] service.mapToDevice = function(keyCode) { return service.mapToAndroid(keyCode) } service.mapToAndroid = function(key) { // All special keys for (var i = 0; i < androidMap.length; ++i) { if (androidMap[i][0] === key) { return androidMap[i][1] } } // Range of numbers and letters if (key >= j['0'] && key <= j['9']) { return key - 41 // 0-9 range } else if (key >= j.A && key <= j.Z) { return key - 36 // a-z range } // Key not mapped return -1 } return service }