diff --git a/frontend/ui/device.lua b/frontend/ui/device.lua index 37192cfe5..9e0c8f23a 100644 --- a/frontend/ui/device.lua +++ b/frontend/ui/device.lua @@ -104,21 +104,31 @@ end Device.isAndroid = util.isAndroid -function Device:hasNoKeyboard() - if self.has_no_keyboard ~= nil then return self.has_no_keyboard end +-- device has qwerty keyboard +function Device:hasKeyboard() + if self.has_keyboard ~= nil then return self.has_keyboard end if not isAndroid then local model = self:getModel() - self.has_no_keyboard = (model == "KindlePaperWhite") or (model == "KindlePaperWhite2") - or (model == "KindleTouch") or self:isKobo() + self.has_keyboard = (model == "Kindle2") or (model == "Kindle3") + or util.isEmulated() else - self.has_no_keyboard = ffi.C.AConfiguration_getKeyboard(android.app.config) - ~= ffi.C.ACONFIGURATION_KEYBOARD_QWERTY + self.has_keyboard = ffi.C.AConfiguration_getKeyboard(android.app.config) + == ffi.C.ACONFIGURATION_KEYBOARD_QWERTY end - return self.has_no_keyboard + return self.has_keyboard end -function Device:hasKeyboard() - return not self:hasNoKeyboard() +function Device:hasNoKeyboard() + return not self:hasKeyboard() +end + +-- device has hardware keys for pagedown/pageup +function Device:hasKeys() + if self.has_keys ~= nil then return self.has_keys end + local model = self:getModel() + self.has_keys = (model ~= "KindlePaperWhite") and (model ~= "KindlePaperWhite2") + and (model ~= "KindleTouch") and not self:isKobo() + return self.has_keys end function Device:isTouchDevice() diff --git a/frontend/ui/input.lua b/frontend/ui/input.lua index 8e3e763b7..0dc7108e7 100644 --- a/frontend/ui/input.lua +++ b/frontend/ui/input.lua @@ -245,6 +245,35 @@ function Input:initKeyMap() [78] = "RPgFwd", -- normal PageDown [76] = "Del", -- Delete } + self.android_event_map = { + [29] = "A", [30] = "B", [31] = "C", [32] = "D", [33] = "E", [34] = "F", + [35] = "G", [36] = "H", [37] = "I", [38] = "J", [39] = "K", [40] = "L", + [41] = "M", [42] = "N", [43] = "O", [44] = "P", [45] = "Q", [46] = "R", + [47] = "S", [48] = "T", [49] = "U", [50] = "V", [51] = "W", [52] = "X", + [53] = "Y", [54] = "Z", [ 7] = "0", [ 8] = "1", [ 9] = "2", [10] = "3", + [11] = "4", [12] = "5", [13] = "6", [14] = "7", [15] = "8", [16] = "9", + + [4] = "Back", -- BACK + [19] = "Up", -- DPAD_UP + [20] = "Down", -- DPAD_UP + [21] = "Left", -- DPAD_LEFT + [22] = "Right", -- DPAD_RIGHT + [23] = "Press", -- DPAD_CENTER + [24] = "LPgBack", -- VOLUME_UP + [25] = "LPgFwd", -- VOLUME_DOWN + [56] = ".", -- PERIOD + [59] = "Shift", -- SHIFT_LEFT + [60] = "Shift", -- SHIFT_RIGHT + [62] = " ", -- SPACE + [63] = "Sym", -- SYM + [66] = "Enter", -- ENTER + [67] = "Del", -- DEL + [76] = "/", -- SLASH + [82] = "Menu", -- MENU + [84] = "Search",--SEARCH + [92] = "LPgBack", -- PAGE_UP + [93] = "LPgFwd", -- PAGE_DOWN + } self.modifiers = { Alt = false, @@ -426,6 +455,7 @@ function Input:init() input.open("/dev/input/event1") elseif util.isAndroid() then DEBUG("Auto-detected Android") + self.event_map = self.android_event_map self:adjustAndroidEventMap() function Input:handleMiscEv(ev) return Input:handleAndroidMiscEvent(ev) @@ -467,6 +497,9 @@ function Input:adjustKoboEventMap() end function Input:adjustAndroidEventMap() + self.event_map[104] = "LPgBack" -- T68 PageUp + self.event_map[109] = "LPgFwd" -- T68 PageDown + self.event_map[139] = "Menu" -- T68 Menu end function Input:setTimeout(cb, tv_out)