Merge pull request #669 from houqp/kobo_suspend

Kobo suspend support
This commit is contained in:
Huang Xin
2014-06-27 19:25:58 +08:00
3 changed files with 106 additions and 56 deletions

View File

@@ -98,6 +98,16 @@ function Device:isKindle2()
return (self:getModel() == "Kindle2")
end
function Device:isKindle()
local is_kindle = false
local kindle_sn = io.open("/proc/usid", "r")
if kindle_sn then
is_kindle = true
kindle_sn:close()
end
return is_kindle
end
function Device:isKobo()
return string.find(self:getModel() or "", "Kobo_") == 1
end

View File

@@ -39,6 +39,8 @@ local UIManager = {
FULL_REFRESH_COUNT = DRCOUNTMAX,
refresh_count = 0,
event_handlers = nil,
_running = true,
_window_stack = {},
_execution_stack = {},
@@ -46,36 +48,97 @@ local UIManager = {
_zeromqs = {},
}
-- For the Kobo Aura an offset is needed, because the bezel make the visible screen smaller.
if Device:getModel() ~= 'Kobo_phoenix' then
function UIManager:offsetX()
return 0
end
function UIManager:offsetY()
return 0
end
else
function UIManager:offsetX()
if Screen.cur_rotation_mode == 0 then
return 4
elseif Screen.cur_rotation_mode == 1 then
return 15
else
return 3
function UIManager:init()
-- For the Kobo Aura an offset is needed, because the bezel make the
-- visible screen smaller.
if Device:getModel() ~= 'Kobo_phoenix' then
function self:offsetX() return 0 end
function self:offsetY() return 0 end
else
function self:offsetX()
if Screen.cur_rotation_mode == 0 then
return 4
elseif Screen.cur_rotation_mode == 1 then
return 15
else
return 3
end
end
function self:offsetY()
if Screen.cur_rotation_mode == 0 then
return 3
else
return 4
end
end
end
function UIManager:offsetY()
if Screen.cur_rotation_mode == 0 then
return 3
elseif Screen.cur_rotation_mode == 1 then
return 4
else
return 4
self.event_handlers = {
__default__ = function(input_event)
self:sendEvent(input_event)
end,
SaveState = function()
self:sendEvent(Event:new("FlushSettings"))
end
}
if Device:isKobo() then
-- lazy create suspend_msg to avoid dependence loop
local suspend_msg = nil
function kobo_power(input_event)
if (input_event == "Power" or input_event == "Suspend")
and not Device.screen_saver_mode then
if not suspend_msg then
local InfoMessage = require("ui/widget/infomessage")
suspend_msg = InfoMessage:new{ text = _("Suspended") }
end
self:show(suspend_msg)
self:sendEvent(Event:new("FlushSettings"))
Device:prepareSuspend()
self:scheduleIn(2, function() Device:Suspend() end)
elseif (input_event == "Power" or input_event == "Resume")
and Device.screen_saver_mode then
Device:Resume()
self:sendEvent(Event:new("Resume"))
if suspend_msg then
self:close(suspend_msg)
end
end
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
self.event_handlers["__default__"] = function(input_event)
if Device.screen_saver_mode then
-- Suspension in Kobo can be interrupted by screen updates. We
-- ignore user touch input here so screen udpate won't be
-- triggered in suspend mode
return
else
self:sendEvent(input_event)
end
end
elseif Device:isKindle() then
self.event_handlers["IntoSS"] = function()
self:sendEvent(Event:new("FlushSettings"))
Device:intoScreenSaver()
end
self.event_handlers["OutOfSS"] = function()
Device:outofScreenSaver()
end
self.event_handlers["Charging"] = function()
Device:usbPlugIn()
end
self.event_handlers["NotCharging"] = function()
Device:usbPlugOut()
self:sendEvent(Event:new("NotCharging"))
end
end
end
-- register & show a widget
function UIManager:show(widget, x, y)
-- put widget on top of stack
@@ -246,7 +309,9 @@ function UIManager:run()
local force_fast_refresh = false
for _, widget in ipairs(self._window_stack) do
if self.repaint_all or self._dirty[widget.widget] then
widget.widget:paintTo(Screen.bb, widget.x + UIManager:offsetX(), widget.y + UIManager:offsetY() )
widget.widget:paintTo(Screen.bb,
widget.x + UIManager:offsetX(),
widget.y + UIManager:offsetY())
if self._dirty[widget.widget] == "auto" then
request_full_refresh = true
end
@@ -340,41 +405,16 @@ function UIManager:run()
-- delegate input_event to handler
if input_event then
--DEBUG("in ui.lua:", input_event)
if input_event == "IntoSS" then
self:sendEvent(Event:new("FlushSettings"))
Device:intoScreenSaver()
elseif input_event == "OutOfSS" then
Device:outofScreenSaver()
elseif input_event == "Charging" then
Device:usbPlugIn()
elseif input_event == "NotCharging" then
Device:usbPlugOut()
self:sendEvent(Event:new("NotCharging"))
elseif input_event == "Light" then
Device:getPowerDevice():toggleFrontlight()
elseif (input_event == "Power" and not Device.screen_saver_mode)
or input_event == "Suspend" then
local InfoMessage = require("ui/widget/infomessage")
self:show(InfoMessage:new{
text = _("Standby"),
timeout = 1,
})
self:sendEvent(Event:new("FlushSettings"))
Device:prepareSuspend()
self:scheduleIn(0.5, function() Device:Suspend() end)
elseif (input_event == "Power" and Device.screen_saver_mode)
or input_event == "Resume" then
Device:Resume()
self:sendEvent(Event:new("Resume"))
elseif input_event == "SaveState" then
self:sendEvent(Event:new("FlushSettings"))
local handler = self.event_handlers[input_event]
if handler then
handler(input_event)
else
self:sendEvent(input_event)
self.event_handlers["__default__"](input_event)
end
end
end
end
UIManager:init()
return UIManager

View File

@@ -2,7 +2,7 @@
export PATH=$PATH:/sbin:/usr/sbin
#disable wifi
if lsmod | grep -q sdio_wifi_pwr ; then
if lsmod | grep -q sdio_wifi_pwr ; then
wlarm_le -i eth0 down
ifconfig eth0 down
/sbin/rmmod -r dhd