blob: e8af7184100fcbbf528ab53092e44f5371e090e4 [file] [log] [blame]
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
}