From cbfcb2373d2ab6dd48ad5ebb0fce75665a6f0241 Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Sun, 4 Apr 2021 03:28:45 +0200 Subject: [PATCH] ScreenSaver: Get rid of automagic settings (#7496) By which I mean, explicitly initialize default settings, making everything seven hundred billion percent less weird. Also, split the background option between image and (solo) message, because the defaults for those are different, and trying to twist the one into the other was leading to pure madness. --- frontend/ui/elements/screensaver_menu.lua | 154 ++++++++++++++-------- frontend/ui/screensaver.lua | 76 ++++++----- 2 files changed, 139 insertions(+), 91 deletions(-) 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")