From 9a247e86ae460f46de0e8faffc9d95d76443a24c Mon Sep 17 00:00:00 2001 From: Robert Date: Thu, 13 Apr 2017 19:55:31 +0200 Subject: [PATCH] Screensaver on Kindle without Special Offers (#2757) --- frontend/apps/filemanager/filemanagermenu.lua | 2 +- frontend/apps/reader/modules/readermenu.lua | 16 ++++- frontend/device/generic/device.lua | 2 + frontend/device/kindle/device.lua | 66 ++++++++++++------- frontend/device/kobo/device.lua | 2 + 5 files changed, 62 insertions(+), 26 deletions(-) diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 59ec2fe5a..450182f97 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -96,7 +96,7 @@ function FileManagerMenu:setUpdateItemTable() G_reader_settings:flush() end } - if Device.isKobo() then + if Device:supportsScreensaver() then self.menu_items.screensaver = { text = _("Screensaver"), sub_item_table = { diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 5ab7d0642..6a9f2c88c 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -108,7 +108,7 @@ function ReaderMenu:setUpdateItemTable() self.menu_items.djvu_render_mode = self.view:getRenderModeMenuTable() end - if Device:isKobo() and Screensaver:isUsingBookCover() then + if Device:supportsScreensaver() and Screensaver:isUsingBookCover() then local excluded = function() return self.ui.doc_settings:readSetting("exclude_screensaver") or false end @@ -118,6 +118,20 @@ function ReaderMenu:setUpdateItemTable() self.menu_items.screensaver = { text = _("Screensaver"), sub_item_table = { + { + text = _("Use last book's cover as screensaver"), + checked_func = Screensaver.isUsingBookCover, + callback = function() + if Screensaver:isUsingBookCover() then + G_reader_settings:saveSetting( + "use_lastfile_as_screensaver", false) + else + G_reader_settings:delSetting( + "use_lastfile_as_screensaver") + end + G_reader_settings:flush() + end + }, { text = _("Exclude this book's cover from screensaver"), checked_func = excluded, diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 973a011df..31b325c02 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -164,6 +164,8 @@ function Device:powerOff() end -- Hardware specific method to initialize network manager module function Device:initNetworkManager() end +function Device:supportsScreensaver() return false end + --[[ prepare for application shutdown --]] diff --git a/frontend/device/kindle/device.lua b/frontend/device/kindle/device.lua index c9e63846f..725caf14f 100644 --- a/frontend/device/kindle/device.lua +++ b/frontend/device/kindle/device.lua @@ -34,6 +34,40 @@ function Kindle:initNetworkManager(NetworkMgr) end end +--[[ +Test if a kindle device has Special Offers +--]] +local function isSpecialOffers() + -- Look at the current blanket modules to see if the SO screensavers are enabled... + local lipc = require("liblipclua") + if not lipc then + logger.warn("could not load liblibclua") + return true + end + local lipc_handle = lipc.init("com.github.koreader.device") + if not lipc_handle then + logger.warn("could not get lipc handle") + return true + end + local is_so + local loaded_blanket_modules = lipc_handle:get_string_property("com.lab126.blanket", "load") + if string.find(loaded_blanket_modules, "ad_screensaver") then + is_so = true + else + is_so = false + end + lipc_handle:close() + return is_so +end + +function Kindle:supportsScreensaver() + if isSpecialOffers() then + return false + else + return true + end +end + function Kindle:usbPlugIn() if self.charging_mode == false and self.screen_saver_mode == false then self.screen:saveCurrentBB() @@ -46,6 +80,10 @@ function Kindle:usbPlugIn() end function Kindle:intoScreenSaver() + local Screensaver = require("ui/screensaver") + if self:supportsScreensaver() and Screensaver:isUsingBookCover() then + Screensaver:show("suspend") + end self.powerd:beforeSuspend() if self.charging_mode == false and self.screen_saver_mode == false then self.screen:saveCurrentBB() @@ -64,6 +102,10 @@ function Kindle:outofScreenSaver() if os.getenv("AWESOME_STOPPED") == "yes" then os.execute("killall -stop awesome") end + local Screensaver = require("ui/screensaver") + if self:supportsScreensaver() and Screensaver.isUsingBookCover() then + Screensaver:close() + end -- wait for native system update screen before we recover saved -- Blitbuffer. util.usleep(1500000) @@ -473,30 +515,6 @@ function KindleBasic2:init() self.input.open("fake_events") end ---[[ -Test if a kindle device has Special Offers ---]] -local function isSpecialOffers() - -- Look at the current blanket modules to see if the SO screensavers are enabled... - local lipc = require("liblipclua") - if not lipc then - logger.warn("could not load liblibclua") - return false - end - local lipc_handle = lipc.init("com.github.koreader.device") - if not lipc_handle then - logger.warn("could not get lipc handle") - return false - end - local so = false - local loaded_blanket_modules = lipc_handle:get_string_property("com.lab126.blanket", "load") - if string.find(loaded_blanket_modules, "ad_screensaver") then - so = true - end - lipc_handle:close() - return so -end - function KindleTouch:exit() if isSpecialOffers() then -- fake a touch event diff --git a/frontend/device/kobo/device.lua b/frontend/device/kobo/device.lua index 38685afd0..ef73f303f 100644 --- a/frontend/device/kobo/device.lua +++ b/frontend/device/kobo/device.lua @@ -245,6 +245,8 @@ function Kobo:initNetworkManager(NetworkMgr) end end +function Kobo:supportsScreensaver() return true end + local probeEvEpochTime -- this function will update itself after the first touch event probeEvEpochTime = function(self, ev)