From a13f9835beeca05eef57756a522a375c34f07e98 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Fri, 28 Jun 2019 22:19:25 +0200 Subject: [PATCH] Tweak SleepCover handling a bit on Kobo Specifically, how we ignore it. No longer do anything specific and potentially racy, and let the unexpected wakeup handler take care of putting us back to sleep. Also add an option to only ignore wakeup events from the SleepCover. Re #5098 Re #5087 --- .../elements/common_settings_menu_table.lua | 19 +++++++++++++-- .../ui/elements/filemanager_menu_order.lua | 3 ++- frontend/ui/elements/reader_menu_order.lua | 3 ++- frontend/ui/uimanager.lua | 24 ++++++++++++------- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index a0afcd887..4dee307e2 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -107,13 +107,28 @@ if Device:setDateTime() then end if Device:isKobo() then - common_settings.sleepcover = { - text = _("Ignore sleepcover events"), + common_settings.ignore_sleepcover = { + text = _("Ignore all sleepcover events"), checked_func = function() return G_reader_settings:isTrue("ignore_power_sleepcover") end, callback = function() G_reader_settings:flipNilOrFalse("ignore_power_sleepcover") + G_reader_settings:flipFalse("ignore_open_sleepcover") + UIManager:show(InfoMessage:new{ + text = _("This will take effect on next restart."), + }) + end + } + + common_settings.ignore_open_sleepcover = { + text = _("Ignore sleepcover wakeup events"), + checked_func = function() + return G_reader_settings:isTrue("ignore_open_sleepcover") + end, + callback = function() + G_reader_settings:flipNilOrFalse("ignore_open_sleepcover") + G_reader_settings:flipFalse("ignore_power_sleepcover") UIManager:show(InfoMessage:new{ text = _("This will take effect on next restart."), }) diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index e1c21cf73..ed6e9e05a 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -40,7 +40,8 @@ local order = { "time", "battery", "autosuspend", - "sleepcover", + "ignore_sleepcover", + "ignore_open_sleepcover", "mass_storage_settings", }, navigation = { diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 5382ba6bb..1a1b78c95 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -60,7 +60,8 @@ local order = { "time", "battery", "autosuspend", - "sleepcover", + "ignore_sleepcover", + "ignore_open_sleepcover", "mass_storage_settings", }, navigation = { diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 018e52db8..859323be1 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -117,24 +117,30 @@ function UIManager:init() self:suspend() end end - if not G_reader_settings:readSetting("ignore_power_sleepcover") then + -- Sleep Cover handling + if G_reader_settings:readSetting("ignore_power_sleepcover") then + -- NOTE: The hardware event itself will wake the kernel up if it's in suspend (:/). + -- Let the unexpected wakeup guard handle that. + self.event_handlers["SleepCoverClosed"] = nil + self.event_handlers["SleepCoverOpened"] = nil + elseif G_reader_settings:readSetting("ignore_open_sleepcover") then + -- Just ignore wakeup events, and do NOT set is_cover_closed, + -- so device/generic/device will let us use the power button to wake ;). self.event_handlers["SleepCoverClosed"] = function() - Device.is_cover_closed = true self:suspend() end self.event_handlers["SleepCoverOpened"] = function() Device.is_cover_closed = false - self:resume() end else - -- Closing/opening the cover will still wake up the device, so we - -- need to put it back to sleep if we are in screen saver mode self.event_handlers["SleepCoverClosed"] = function() - if Device.screen_saver_mode then - self:suspend() - end + Device.is_cover_closed = true + self:suspend() + end + self.event_handlers["SleepCoverOpened"] = function() + Device.is_cover_closed = false + self:resume() end - self.event_handlers["SleepCoverOpened"] = self.event_handlers["SleepCoverClosed"] end self.event_handlers["Light"] = function() Device:getPowerDevice():toggleFrontlight()