diff --git a/frontend/ui/elements/screensaver_menu.lua b/frontend/ui/elements/screensaver_menu.lua index 100645ba2..5f2637054 100644 --- a/frontend/ui/elements/screensaver_menu.lua +++ b/frontend/ui/elements/screensaver_menu.lua @@ -61,7 +61,9 @@ return { }, { text = _("Use reading progress as screensaver"), - enabled_func = function() return Screensaver.getReaderProgress ~= nil and hasLastFile() end, + enabled_func = function() + return Screensaver.getReaderProgress ~= nil and hasLastFile() + end, checked_func = function() return G_reader_settings:readSetting("screensaver_type") == "readingprogress" end, @@ -72,7 +74,7 @@ return { { text = _("Leave screen as it is"), checked_func = function() - return G_reader_settings:readSetting("screensaver_type") == "disable" or G_reader_settings:hasNot("screensaver_type") + return G_reader_settings:readSetting("screensaver_type") == "disable" end, callback = function() G_reader_settings:saveSetting("screensaver_type", "disable") @@ -82,10 +84,9 @@ return { { text = _("Add message to screensaver"), checked_func = function() - return G_reader_settings:isTrue("screensaver_show_message") or G_reader_settings:hasNot("screensaver_type") + return G_reader_settings:isTrue("screensaver_show_message") end, callback = function() - -- NOTE: Since the default is nil, the first toggle will keep it checked (but true instead of nil). G_reader_settings:toggle("screensaver_show_message") end, separator = true, @@ -122,73 +123,110 @@ return { end, }, { - text = _("Black background behind images"), - checked_func = function() - return G_reader_settings:readSetting("screensaver_background") == "black" or G_reader_settings:hasNot("screensaver_background") - end, - callback = function() - G_reader_settings:saveSetting("screensaver_background", "black") - end, - }, - { - text = _("White background behind message and images"), - checked_func = function() - return G_reader_settings:readSetting("screensaver_background") == "white" - end, - callback = function() - G_reader_settings:saveSetting("screensaver_background", "white") - end, - }, - { - text = _("Leave background as-is behind message and images"), - checked_func = function() - return G_reader_settings:readSetting("screensaver_background") == "none" - end, - callback = function() - G_reader_settings:saveSetting("screensaver_background", "none") - end, - }, - { - text = _("Stretch covers and images to fit screen"), - checked_func = function() - return G_reader_settings:isTrue("screensaver_stretch_images") - end, - callback = function() - G_reader_settings:toggle("screensaver_stretch_images") - end, - separator = true, + text = _("Covers and images settings"), + sub_item_table = { + { + text = _("Black background behind covers and images"), + checked_func = function() + return G_reader_settings:readSetting("screensaver_img_background") == "black" + end, + callback = function() + G_reader_settings:saveSetting("screensaver_img_background", "black") + end, + }, + { + text = _("White background behind covers and images"), + checked_func = function() + return G_reader_settings:readSetting("screensaver_img_background") == "white" + end, + callback = function() + G_reader_settings:saveSetting("screensaver_img_background", "white") + end, + }, + { + text = _("Leave background as-is behind covers and images"), + checked_func = function() + return G_reader_settings:readSetting("screensaver_img_background") == "none" + end, + callback = function() + G_reader_settings:saveSetting("screensaver_img_background", "none") + end, + }, + { + text = _("Stretch covers and images to fit screen"), + checked_func = function() + return G_reader_settings:isTrue("screensaver_stretch_images") + end, + callback = function() + G_reader_settings:toggle("screensaver_stretch_images") + end, + separator = true, + }, + }, }, { - text = _("Screensaver message position"), + text = _("Message settings"), sub_item_table = { { - text = _("Top"), + text = _("Black background behind message"), checked_func = function() - return G_reader_settings:readSetting("screensaver_message_position") == "top" + return G_reader_settings:readSetting("screensaver_msg_background") == "black" end, callback = function() - G_reader_settings:saveSetting("screensaver_message_position", "top") - end + G_reader_settings:saveSetting("screensaver_msg_background", "black") + end, }, { - text = _("Middle"), + text = _("White background behind message"), checked_func = function() - return G_reader_settings:readSetting("screensaver_message_position") == "middle" or G_reader_settings:hasNot("screensaver_message_position") + return G_reader_settings:readSetting("screensaver_msg_background") == "white" end, callback = function() - G_reader_settings:saveSetting("screensaver_message_position", "middle") - end + G_reader_settings:saveSetting("screensaver_msg_background", "white") + end, }, { - text = _("Bottom"), + text = _("Leave background as-is behind message"), checked_func = function() - return G_reader_settings:readSetting("screensaver_message_position") == "bottom" + return G_reader_settings:readSetting("screensaver_msg_background") == "none" end, callback = function() - G_reader_settings:saveSetting("screensaver_message_position", "bottom") - end + G_reader_settings:saveSetting("screensaver_msg_background", "none") + end, + }, + { + text = _("Message position"), + sub_item_table = { + { + text = _("Top"), + checked_func = function() + return G_reader_settings:readSetting("screensaver_message_position") == "top" + end, + callback = function() + G_reader_settings:saveSetting("screensaver_message_position", "top") + end + }, + { + text = _("Middle"), + checked_func = function() + return G_reader_settings:readSetting("screensaver_message_position") == "middle" + end, + callback = function() + G_reader_settings:saveSetting("screensaver_message_position", "middle") + end + }, + { + text = _("Bottom"), + checked_func = function() + return G_reader_settings:readSetting("screensaver_message_position") == "bottom" + end, + callback = function() + G_reader_settings:saveSetting("screensaver_message_position", "bottom") + end + }, + }, }, - } + }, }, { text = _("Keep the screensaver on screen after wakeup"), @@ -196,7 +234,7 @@ return { { text = _("Disable"), checked_func = function() - return G_reader_settings:readSetting("screensaver_delay") == "disable" or G_reader_settings:hasNot("screensaver_delay") + return G_reader_settings:readSetting("screensaver_delay") == "disable" end, callback = function() G_reader_settings:saveSetting("screensaver_delay", "disable") @@ -238,8 +276,8 @@ return { G_reader_settings:saveSetting("screensaver_delay", "tap") end }, - } - } - } - } + }, + }, + }, + }, } diff --git a/frontend/ui/screensaver.lua b/frontend/ui/screensaver.lua index 4161a9982..a6d9c0bcf 100644 --- a/frontend/ui/screensaver.lua +++ b/frontend/ui/screensaver.lua @@ -23,7 +23,7 @@ local _ = require("gettext") local Screen = Device.screen local T = require("ffi/util").template --- Migrate old settings from 2021.02 or older. +-- Migrate settings from 2021.02 or older. if G_reader_settings:readSetting("screensaver_type") == "message" then G_reader_settings:saveSetting("screensaver_type", "disable") G_reader_settings:makeTrue("screensaver_show_message") @@ -40,6 +40,35 @@ if G_reader_settings:has("screensaver_white_background") then end G_reader_settings:delSetting("screensaver_white_background") end +-- Migrate settings from 2021.03 or older. +if G_reader_settings:has("screensaver_background") then + G_reader_settings:saveSetting("screensaver_img_background", G_reader_settings:readSetting("screensaver_background")) + G_reader_settings:delSetting("screensaver_background") +end + +-- Default settings +if G_reader_settings:hasNot("screensaver_show_message") then + G_reader_settings:makeFalse("screensaver_show_message") +end +if G_reader_settings:hasNot("screensaver_type") then + G_reader_settings:saveSetting("screensaver_type", "disable") + G_reader_settings:makeTrue("screensaver_show_message") +end +if G_reader_settings:hasNot("screensaver_img_background") then + G_reader_settings:saveSetting("screensaver_img_background", "black") +end +if G_reader_settings:hasNot("screensaver_msg_background") then + G_reader_settings:saveSetting("screensaver_msg_background", "none") +end +if G_reader_settings:hasNot("screensaver_message_position") then + G_reader_settings:saveSetting("screensaver_message_position", "middle") +end +if G_reader_settings:hasNot("screensaver_stretch_images") then + G_reader_settings:makeFalse("screensaver_stretch_images") +end +if G_reader_settings:hasNot("screensaver_delay") then + G_reader_settings:saveSetting("screensaver_delay", "disable") +end local Screensaver = { screensaver_provider = { @@ -367,24 +396,10 @@ function Screensaver:withBackground() end function Screensaver:setup(event, fallback_message) - -- Handle user settings & defaults - if G_reader_settings:has("screensaver_show_message") then - self.show_message = G_reader_settings:isTrue("screensaver_show_message") - else - -- We only enable show_message as a *type* fallback! - self.show_message = false - end - if G_reader_settings:has("screensaver_type") then - self.screensaver_type = G_reader_settings:readSetting("screensaver_type") - else - self.screensaver_type = "disable" - self.show_message = true - end - if G_reader_settings:has("screensaver_background") then - self.screensaver_background = G_reader_settings:readSetting("screensaver_background") - else - self.screensaver_background = "black" - end + self.show_message = G_reader_settings:isTrue("screensaver_show_message") + self.screensaver_type = G_reader_settings:readSetting("screensaver_type") + local screensaver_img_background = G_reader_settings:readSetting("screensaver_img_background") + local screensaver_msg_background = G_reader_settings:readSetting("screensaver_msg_background") -- These 2 (optional) parameters are to support poweroff and reboot actions on Kobo (c.f., UIManager) self.prefix = event and event .. "_" or "" -- "", "poweroff_" or "reboot_" @@ -490,12 +505,11 @@ function Screensaver:setup(event, fallback_message) end end - -- Now that the fallbacks are in place, we know the *effective* screensaver mode. - -- For non-image modes, make black (which is also the default) synonymous with none. - -- The reasoning is that disable + show_message, which is our default and fallback, - -- looks *terrible* with a black background, which is also our default and fallback ;). - if not self:modeIsImage() and self.screensaver_background == "black" then - self.screensaver_background = "none" + -- Use the right background setting depending on the effective mode, now that fallbacks have kicked in. + if self:modeIsImage() then + self.screensaver_background = screensaver_img_background + else + self.screensaver_background = screensaver_msg_background end end @@ -518,7 +532,7 @@ function Screensaver:show() image_disposable = true, height = Screen:getHeight(), width = Screen:getWidth(), - scale_factor = G_reader_settings:nilOrFalse("screensaver_stretch_images") and 0 or nil, + scale_factor = G_reader_settings:isFalse("screensaver_stretch_images") and 0 or nil, } elseif self.screensaver_type == "bookstatus" then local ReaderUI = require("apps/reader/readerui") @@ -540,7 +554,7 @@ function Screensaver:show() alpha = true, height = Screen:getHeight(), width = Screen:getWidth(), - scale_factor = G_reader_settings:nilOrFalse("screensaver_stretch_images") and 0 or nil, + scale_factor = G_reader_settings:isFalse("screensaver_stretch_images") and 0 or nil, } elseif self.screensaver_type == "readingprogress" then widget = Screensaver.getReaderProgress() @@ -580,11 +594,7 @@ function Screensaver:show() if G_reader_settings:has(self.prefix .. "screensaver_message_position") then message_pos = G_reader_settings:readSetting(self.prefix .. "screensaver_message_position") else - if G_reader_settings:has("screensaver_message_position") then - message_pos = G_reader_settings:readSetting("screensaver_message_position") - else - message_pos = "middle" - end + message_pos = G_reader_settings:readSetting("screensaver_message_position") end -- The only case where we *won't* cover the full-screen is when we only display a message and no background. @@ -676,7 +686,7 @@ function Screensaver:close() self.screensaver_widget = nil end end) - elseif screensaver_delay == "disable" or screensaver_delay == nil then + elseif screensaver_delay == "disable" then logger.dbg("close screensaver") if self.screensaver_widget then UIManager:close(self.screensaver_widget, "full")