From 613c66aa73e6fc9d057d77103ed52250b06d0e30 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 10 Jun 2014 15:32:28 +0800 Subject: [PATCH 1/5] key event map for Android --- frontend/ui/device.lua | 28 +++++++++++++++++++--------- frontend/ui/input.lua | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 9 deletions(-) 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) From e624695d546c54aa5b82c77ef2b0aea56482dc99 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 10 Jun 2014 15:57:10 +0800 Subject: [PATCH 2/5] the Back key on Android should close the popup window and menu --- frontend/apps/filemanager/filemanager.lua | 4 +++- frontend/apps/filemanager/filemanagermenu.lua | 2 +- frontend/apps/reader/modules/readerhighlight.lua | 8 +------- frontend/apps/reader/modules/readermenu.lua | 3 ++- frontend/apps/reader/modules/readerpaging.lua | 2 +- frontend/apps/reader/modules/readerrolling.lua | 2 +- frontend/apps/reader/readerui.lua | 2 +- frontend/ui/widget/buttondialog.lua | 10 +++++++--- frontend/ui/widget/configdialog.lua | 8 +++++++- frontend/ui/widget/dictquicklookup.lua | 5 +++++ frontend/ui/widget/infomessage.lua | 2 +- frontend/ui/widget/menu.lua | 4 ++-- frontend/ui/widget/notification.lua | 2 +- frontend/ui/widget/touchmenu.lua | 6 ++++++ 14 files changed, 39 insertions(+), 21 deletions(-) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index e1c9c04b2..e87e0f241 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -61,7 +61,8 @@ function FileManager:init() if DocumentRegistry:getProvider(filename) then return true end - end + end, + close_callback = function() return self:onClose() end, } self.file_chooser = file_chooser @@ -154,6 +155,7 @@ function FileManager:toggleHiddenFiles() end function FileManager:onClose() + DEBUG("close filemanager") UIManager:close(self) if self.onExit then self:onExit() diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 5bd0e0c98..b412efa4f 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -31,7 +31,7 @@ function FileManagerMenu:init() } self.registered_widgets = {} - if Device:hasKeyboard() then + if Device:hasKeys() then self.key_events = { ShowMenu = { { "Menu" }, doc = "show menu" }, } diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 9d5c708ee..4673fed08 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -12,13 +12,6 @@ local _ = require("gettext") local ReaderHighlight = InputContainer:new{} function ReaderHighlight:init() - if Device:hasKeyboard() then - self.key_events = { - ShowToc = { - { "." }, - doc = "highlight text" }, - } - end self.ui.menu:registerToMainMenu(self) end @@ -310,6 +303,7 @@ function ReaderHighlight:onHoldRelease(arg, ges) { { text = _("Translate"), + enabled = false, callback = function() self:translate(self.selected_text) UIManager:close(self.highlight_dialog) diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 5e78a975d..bd06f5d10 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -43,9 +43,10 @@ function ReaderMenu:init() } self.registered_widgets = {} - if Device:hasKeyboard() then + if Device:hasKeys() then self.key_events = { ShowReaderMenu = { { "Menu" }, doc = "show menu" }, + Close = { { "Back" }, doc = "close menu" }, } end end diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index ea271ebe8..48ea66911 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -25,7 +25,7 @@ local ReaderPaging = InputContainer:new{ } function ReaderPaging:init() - if Device:hasKeyboard() then + if Device:hasKeyboard() or Device:hasKeys() then self.key_events = { GotoNextPage = { {Input.group.PgFwd}, doc = "go to next page", diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index 7d106756a..2ce38e2b6 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -23,7 +23,7 @@ local ReaderRolling = InputContainer:new{ } function ReaderRolling:init() - if Device:hasKeyboard() then + if Device:hasKeyboard() or Device:hasKeys() then self.key_events = { GotoNextView = { { Input.group.PgFwd }, diff --git a/frontend/apps/reader/readerui.lua b/frontend/apps/reader/readerui.lua index c8c460975..d401564e3 100644 --- a/frontend/apps/reader/readerui.lua +++ b/frontend/apps/reader/readerui.lua @@ -70,7 +70,7 @@ function ReaderUI:init() self.dialog = self end - if Device:hasKeyboard() then + if Device:hasKeys() then self.key_events.Back = { { "Back" }, doc = "close document", event = "Close" } diff --git a/frontend/ui/widget/buttondialog.lua b/frontend/ui/widget/buttondialog.lua index 62b401686..bee07114d 100644 --- a/frontend/ui/widget/buttondialog.lua +++ b/frontend/ui/widget/buttondialog.lua @@ -16,10 +16,9 @@ local ButtonDialog = InputContainer:new{ } function ButtonDialog:init() - if Device:hasKeyboard() then + if Device:hasKeys() then self.key_events = { - AnyKeyPressed = { { Input.group.Any }, - seqtext = "any key", doc = "close dialog" } + Close = { {"Back"}, doc = "close button dialog" } } end if Device:isTouchDevice() then @@ -58,4 +57,9 @@ function ButtonDialog:onTapClose() return true end +function ButtonDialog:onClose() + self:onTapClose() + return true +end + return ButtonDialog diff --git a/frontend/ui/widget/configdialog.lua b/frontend/ui/widget/configdialog.lua index e488aab67..99e289b59 100644 --- a/frontend/ui/widget/configdialog.lua +++ b/frontend/ui/widget/configdialog.lua @@ -459,7 +459,8 @@ function ConfigDialog:init() } } } - else + end + if Device:hasKeys() then -- set up keyboard events self.key_events.Close = { {"Back"}, doc = "close config menu" } -- we won't catch presses to "Right" @@ -551,4 +552,9 @@ function ConfigDialog:onTapCloseMenu(arg, ges_ev) end end +function ConfigDialog:onClose() + self:closeDialog() + return true +end + return ConfigDialog diff --git a/frontend/ui/widget/dictquicklookup.lua b/frontend/ui/widget/dictquicklookup.lua index 7d6f1b082..bf03a7111 100644 --- a/frontend/ui/widget/dictquicklookup.lua +++ b/frontend/ui/widget/dictquicklookup.lua @@ -46,6 +46,11 @@ local DictQuickLookup = InputContainer:new{ function DictQuickLookup:init() self:changeToDefaultDict() + if Device:hasKeys() then + self.key_events = { + Close = { {"Back"}, doc = "close quick lookup" } + } + end if Device:isTouchDevice() then self.ges_events = { TapCloseDict = { diff --git a/frontend/ui/widget/infomessage.lua b/frontend/ui/widget/infomessage.lua index f1d52265d..939e800c3 100644 --- a/frontend/ui/widget/infomessage.lua +++ b/frontend/ui/widget/infomessage.lua @@ -26,7 +26,7 @@ local InfoMessage = InputContainer:new{ } function InfoMessage:init() - if Device:hasKeyboard() then + if Device:hasKeys() then self.key_events = { AnyKeyPressed = { { Input.group.Any }, seqtext = "any key", doc = "close dialog" } diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index b116a9fac..0f86d9e9c 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -152,7 +152,7 @@ function MenuItem:init() }, } end - if Device:hasKeyboard() then + if Device:hasKeys() then self.active_key_events = { Select = { {"Press"}, doc = "chose selected item" }, } @@ -447,7 +447,7 @@ function Menu:init() } } end - if Device:hasKeyboard() then + if Device:hasKeys() then -- set up keyboard events self.key_events.Close = { {"Back"}, doc = "close menu" } self.key_events.NextPage = { diff --git a/frontend/ui/widget/notification.lua b/frontend/ui/widget/notification.lua index b9e913c3d..2389e5b5a 100644 --- a/frontend/ui/widget/notification.lua +++ b/frontend/ui/widget/notification.lua @@ -22,7 +22,7 @@ local Notification = InputContainer:new{ } function Notification:init() - if Device:hasKeyboard() then + if Device:hasKeys() then self.key_events = { AnyKeyPressed = { { Input.group.Any }, seqtext = "any key", doc = "close dialog" } } diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index df684b0e8..b3e7c1ec9 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -251,6 +251,8 @@ function TouchMenu:init() } } + self.key_events.Close = { {"Back"}, doc = "close touch menu" } + local icons = {} for _,v in ipairs(self.tab_item_table) do table.insert(icons, v.icon) @@ -498,4 +500,8 @@ function TouchMenu:onTapCloseAllMenus(arg, ges_ev) end end +function TouchMenu:onClose() + self:closeMenu() +end + return TouchMenu From b8626f60985a34deac54477748476d2a3589c972 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 10 Jun 2014 21:12:11 +0800 Subject: [PATCH 3/5] pass onClose gesture to Menu widget --- frontend/ui/widget/menu.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index 0f86d9e9c..8e4b01a6d 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -23,6 +23,7 @@ local Input = require("ui/input") local UIManager = require("ui/uimanager") local RenderText = require("ui/rendertext") local InfoMessage = require("ui/widget/infomessage") +local DEBUG = require("dbg") local _ = require("gettext") --[[ @@ -446,6 +447,7 @@ function Menu:init() range = self.dimen, } } + self.ges_events.Close = self.on_close_ges end if Device:hasKeys() then -- set up keyboard events From b8ce85d3de8cd3eab4ee2d85a6b6651f33621b8b Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 10 Jun 2014 21:13:21 +0800 Subject: [PATCH 4/5] use two finger swipe west/east to close TOC and bookmark respectively --- frontend/apps/reader/modules/readerbookmark.lua | 14 +++++++++++++- frontend/apps/reader/modules/readertoc.lua | 12 ++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index a05439caa..8d471516d 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -101,8 +101,18 @@ function ReaderBookmark:onShowBookmark() item_table = self.bookmarks, width = Screen:getWidth(), height = Screen:getHeight(), - show_parent = menu_container, is_borderless = true, + on_close_ges = { + GestureRange:new{ + ges = "two_finger_swipe", + range = Geom:new{ + x = 0, y = 0, + w = Screen:getWidth(), + h = Screen:getHeight(), + }, + direction = "east" + } + } } local menu_container = CenterContainer:new{ @@ -130,6 +140,8 @@ function ReaderBookmark:onShowBookmark() UIManager:close(menu_container) end + bm_menu.show_parent = menu_container + UIManager:show(menu_container) return true end diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index fe12c08fe..a30f0f868 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -7,6 +7,7 @@ local Screen = require("ui/screen") local Device = require("ui/device") local UIManager = require("ui/uimanager") local Event = require("ui/event") +local DEBUG = require("dbg") local _ = require("gettext") local ReaderToc = InputContainer:new{ @@ -125,6 +126,17 @@ function ReaderToc:onShowToc() width = Screen:getWidth(), height = Screen:getHeight(), is_borderless = true, + on_close_ges = { + GestureRange:new{ + ges = "two_finger_swipe", + range = Geom:new{ + x = 0, y = 0, + w = Screen:getWidth(), + h = Screen:getHeight(), + }, + direction = "west" + } + } } local menu_container = CenterContainer:new{ From f13a165c4b7d9eef60792890810eb0dccad33c65 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 10 Jun 2014 21:32:49 +0800 Subject: [PATCH 5/5] tweaks of font size --- frontend/apps/reader/modules/readerbookmark.lua | 4 +++- frontend/apps/reader/modules/readertoc.lua | 4 +++- frontend/ui/widget/menu.lua | 2 +- frontend/ui/widget/touchmenu.lua | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/apps/reader/modules/readerbookmark.lua b/frontend/apps/reader/modules/readerbookmark.lua index 8d471516d..cf5ea8162 100644 --- a/frontend/apps/reader/modules/readerbookmark.lua +++ b/frontend/apps/reader/modules/readerbookmark.lua @@ -7,6 +7,7 @@ local Geom = require("ui/geometry") local Screen = require("ui/screen") local UIManager = require("ui/uimanager") local Event = require("ui/event") +local Font = require("ui/font") local DEBUG = require("dbg") local _ = require("gettext") @@ -99,9 +100,10 @@ function ReaderBookmark:onShowBookmark() local bm_menu = Menu:new{ title = "Bookmarks", item_table = self.bookmarks, + is_borderless = true, width = Screen:getWidth(), height = Screen:getHeight(), - is_borderless = true, + cface = Font:getFace("cfont", 20), on_close_ges = { GestureRange:new{ ges = "two_finger_swipe", diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index a30f0f868..41aafe45a 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -7,6 +7,7 @@ local Screen = require("ui/screen") local Device = require("ui/device") local UIManager = require("ui/uimanager") local Event = require("ui/event") +local Font = require("ui/font") local DEBUG = require("dbg") local _ = require("gettext") @@ -123,9 +124,10 @@ function ReaderToc:onShowToc() title = _("Table of Contents"), item_table = self.toc, ui = self.ui, + is_borderless = true, width = Screen:getWidth(), height = Screen:getHeight(), - is_borderless = true, + cface = Font:getFace("cfont", 20), on_close_ges = { GestureRange:new{ ges = "two_finger_swipe", diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index 8e4b01a6d..0aa780989 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -277,7 +277,7 @@ local Menu = FocusManager:new{ -- face for menu title tface = Font:getFace("tfont", 26), -- face for paging info display - fface = Font:getFace("ffont", 16), + fface = Font:getFace("ffont", 20), -- font for item shortcut sface = Font:getFace("scfont", 20), diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index b3e7c1ec9..4e1e97b1d 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -215,7 +215,7 @@ local TouchMenu = InputContainer:new{ bordersize = Screen:scaleByDPI(2), padding = Screen:scaleByDPI(5), footer_height = Screen:scaleByDPI(50), - fface = Font:getFace("ffont", 16), + fface = Font:getFace("ffont", 20), width = nil, height = nil, page = 1,