kobo(fix): always put device to suspend state when cover is closed

pull/2245/head
Qingping Hou 8 years ago
parent ebc7055b43
commit 22964a77a0

@ -115,10 +115,38 @@ end
-- ONLY used for Kobo and PocketBook devices
function Device:onPowerEvent(ev)
local Screensaver = require("ui/screensaver")
local network_manager = require("ui/network/manager")
if (ev == "Power" or ev == "Suspend") and not self.screen_saver_mode then
if self.screen_saver_mode then
if ev == "Power" or ev == "Resume" then
DEBUG("Resuming...")
require("ui/uimanager"):unschedule(self.suspend)
local network_manager = require("ui/network/manager")
if network_manager.wifi_was_on and G_reader_settings:nilOrTrue("auto_restore_wifi") then
network_manager.restoreWifiAsync()
end
self:resume()
require("ui/screensaver"):close()
-- restore to previous rotation mode
self.screen:setRotationMode(self.orig_rotation_mode)
if self:needsScreenRefreshAfterResume() then
self.screen:refreshFull()
end
self.screen_saver_mode = false
self.powerd:refreshCapacity()
self.powerd:afterResume()
elseif ev == "Suspend" then
-- Already in screen saver mode, no need to update UI/state before
-- suspending the hardware. This usually happens when sleep cover
-- is closed after the device was sent to suspend state.
DEBUG("Already in screen saver mode, suspending...")
local UIManager = require("ui/uimanager")
if not UIManager:hasScheduled(self.suspend) then
UIManager:nextTick(self.suspend)
end
end
-- else we we not in screensaver mode
elseif ev == "Power" or ev == "Suspend" then
self.powerd:beforeSuspend()
local network_manager = require("ui/network/manager")
if network_manager.wifi_was_on then
network_manager:releaseIP()
network_manager:turnOffWifi()
@ -131,27 +159,10 @@ function Device:onPowerEvent(ev)
-- always suspend in portrait mode
self.orig_rotation_mode = self.screen:getRotationMode()
self.screen:setRotationMode(0)
Screensaver:show()
require("ui/screensaver"):show()
self.screen:refreshFull()
self.screen_saver_mode = true
UIManager:scheduleIn(10, self.suspend)
elseif (ev == "Power" or ev == "Resume") and self.screen_saver_mode then
DEBUG("Resuming...")
local UIManager = require("ui/uimanager")
UIManager:unschedule(self.suspend)
if network_manager.wifi_was_on and G_reader_settings:nilOrTrue("auto_restore_wifi") then
network_manager.restoreWifiAsync()
end
self:resume()
Screensaver:close()
-- restore to previous rotation mode
self.screen:setRotationMode(self.orig_rotation_mode)
if self:needsScreenRefreshAfterResume() then
self.screen:refreshFull()
end
self.screen_saver_mode = false
self.powerd:refreshCapacity()
self.powerd:afterResume()
end
end

@ -259,6 +259,16 @@ end
dbg:guard(UIManager, 'unschedule',
function(self, action) assert(action ~= nil) end)
-- Check to see if a task is already scheduled
function UIManager:hasScheduled(action)
for i = #self._task_queue, 1, -1 do
if self._task_queue[i].action == action then
return true
end
end
return false
end
--[[
register a widget to be repainted and enqueue a refresh

Loading…
Cancel
Save