From 40bddf07359bf07784a0621fcb41f6f508449e41 Mon Sep 17 00:00:00 2001 From: chrox Date: Tue, 26 Aug 2014 18:10:26 +0800 Subject: [PATCH] emulate Power button with F2 on emulator --- .../apps/filemanager/filemanagersearch.lua | 8 +- frontend/ui/device.lua | 43 +++++++++-- frontend/ui/input.lua | 2 + .../ui/{uitoolbox.lua => screensaver.lua} | 65 +++++++++++++--- frontend/ui/uimanager.lua | 76 ++++--------------- 5 files changed, 109 insertions(+), 85 deletions(-) rename frontend/ui/{uitoolbox.lua => screensaver.lua} (76%) diff --git a/frontend/apps/filemanager/filemanagersearch.lua b/frontend/apps/filemanager/filemanagersearch.lua index b29922b58..a5fabea6c 100644 --- a/frontend/apps/filemanager/filemanagersearch.lua +++ b/frontend/apps/filemanager/filemanagersearch.lua @@ -2,14 +2,14 @@ local CenterContainer = require("ui/widget/container/centercontainer") local InputContainer = require("ui/widget/container/inputcontainer") local InputDialog = require("ui/widget/inputdialog") local InfoMessage = require("ui/widget/infomessage") +local Screensaver = require("ui/screensaver") local lfs = require("libs/libkoreader-lfs") local UIManager = require("ui/uimanager") local Menu = require("ui/widget/menu") local Screen = require("ui/screen") -local _ = require("gettext") -local Font = require("ui/font") -local UIToolbox = require("ui/uitoolbox") local util = require("ffi/util") +local Font = require("ui/font") +local _ = require("gettext") local calibre = "metadata.calibre" local koreaderfile = "temp/metadata.koreader" @@ -472,7 +472,7 @@ function Search:onMenuHold(item) item.notchecked = false end local thumbwidth = math.min(240, Screen:getWidth()/3) - UIManager:show(InfoMessage:new{text = item.info,image = UIToolbox:getPicture(item.path), image_width = thumbwidth,image_height = thumbwidth/2*3}) + UIManager:show(InfoMessage:new{text = item.info,image = Screensaver:getCoverPicture(item.path), image_width = thumbwidth,image_height = thumbwidth/2*3}) end end diff --git a/frontend/ui/device.lua b/frontend/ui/device.lua index c93effa1f..42544bf9c 100644 --- a/frontend/ui/device.lua +++ b/frontend/ui/device.lua @@ -6,6 +6,7 @@ local BasePowerD = require("ui/device/basepowerd") local lfs = require("libs/libkoreader-lfs") local Screen = require("ui/device/screen") local util = require("ffi/util") +local DEBUG = require("dbg") local ffi = require("ffi") local Device = { @@ -201,26 +202,54 @@ function Device:outofScreenSaver() self.screen_saver_mode = false end -function Device:prepareSuspend() -- currently only used for kobo devices +function Device:onPowerEvent(ev) + local Screensaver = require("ui/screensaver") + local UIManager = require("ui/uimanager") + if (ev == "Power" or ev == "Suspend") and not self.screen_saver_mode then + DEBUG("Suspending...") + Screensaver:show() + self:prepareSuspend() + UIManager:scheduleIn(2, function() self:Suspend() end) + elseif (ev == "Power" or ev == "Resume") and self.screen_saver_mode then + DEBUG("Resuming...") + self:Resume() + Screensaver:close() + end +end + +function Device:prepareSuspend() local powerd = self:getPowerDevice() - if powerd ~= nil then + if powerd.fl ~= nil then + -- in no case should the frontlight be turned on in suspend mode powerd.fl:sleep() end self.screen:refresh(0) self.screen_saver_mode = true end -function Device:Suspend() -- currently only used for kobo devices - os.execute("./suspend.sh") +function Device:Suspend() + if self:isKobo() then + os.execute("./suspend.sh") + end end -function Device:Resume() -- currently only used for kobo devices - os.execute("echo 0 > /sys/power/state-extended") +function Device:Resume() + if self:isKobo() then + os.execute("echo 0 > /sys/power/state-extended") + end self.screen:refresh(1) local powerd = self:getPowerDevice() - if powerd ~= nil then + if powerd.fl ~= nil then powerd.fl:restore() end + -- FIXME: this conflicts with powerd.fl:restore + --[[ + if KOBO_LIGHT_ON_START and tonumber(KOBO_LIGHT_ON_START) > -1 then + if powerd then + powerd:setIntensity(math.max(math.min(KOBO_LIGHT_ON_START,100),0)) + end + end + --]] self.screen_saver_mode = false end diff --git a/frontend/ui/input.lua b/frontend/ui/input.lua index 996bedd9a..6ffa1e1ae 100644 --- a/frontend/ui/input.lua +++ b/frontend/ui/input.lua @@ -205,6 +205,7 @@ function Input:initKeyMap() [64] = "Alt", -- left alt [65] = " ", -- Spacebar [67] = "Menu", -- F[1] + [68] = "Power", -- F[2] [72] = "LPgBack", -- F[6] [73] = "LPgFwd", -- F[7] [95] = "VPlus", -- F[11] @@ -237,6 +238,7 @@ function Input:initKeyMap() [226] = "Alt", -- left alt [44] = " ", -- Spacebar [58] = "Menu", -- F[1] + [59] = "Power", -- F[2] [63] = "LPgBack", -- F[6] [64] = "LPgFwd", -- F[7] [68] = "VPlus", -- F[11] diff --git a/frontend/ui/uitoolbox.lua b/frontend/ui/screensaver.lua similarity index 76% rename from frontend/ui/uitoolbox.lua rename to frontend/ui/screensaver.lua index 0d8b06db3..c7a3889a7 100644 --- a/frontend/ui/uitoolbox.lua +++ b/frontend/ui/screensaver.lua @@ -1,10 +1,12 @@ -local InputContainer = require("ui/widget/container/inputcontainer") +local UIManager = require("ui/uimanager") +local Screen = require("ui/screen") +local DEBUG = require("dbg") +local _ = require("gettext") -local UIToolbox = InputContainer:new{ +local Screensaver = { } -function UIToolbox:getPicture(file) - +function Screensaver:getCoverPicture(file) local contentopf local contentpath local epub_folder = "temp/epub" @@ -69,13 +71,13 @@ function UIToolbox:getPicture(file) end return check_extension(cover) end - + local function checkoldfile(cover) if io.open(cover) then return cover end end - + local cover local oldfile = "temp/" .. file:gsub("/","#") .. "." @@ -104,13 +106,13 @@ function UIToolbox:getPicture(file) contentpath = "" end pcall(os.execute("unzip \"" .. file .. "\" \"" .. contentopf .. "\" -oq -d " .. epub_folder)) -- read content.opf - + cover = try_content_opf("^%s* -1 then - Device:getPowerDevice():setIntensity( math.max( math.min(KOBO_LIGHT_ON_START,100) ,0) ) - end - end + self.event_handlers["Suspend"] = function(input_event) + self:sendEvent(Event:new("FlushSettings")) + Device:onPowerEvent(input_event) + end + self.event_handlers["Resume"] = function(input_event) + Device:onPowerEvent(input_event) + self:sendEvent(Event:new("Resume")) end - - self.event_handlers["Power"] = kobo_power - self.event_handlers["Suspend"] = kobo_power - self.event_handlers["Resume"] = kobo_power self.event_handlers["Light"] = function() Device:getPowerDevice():toggleFrontlight() end @@ -152,6 +101,7 @@ function UIManager:init() end self.event_handlers["OutOfSS"] = function() Device:outofScreenSaver() + self:sendEvent(Event:new("Resume")) end self.event_handlers["Charging"] = function() Device:usbPlugIn()