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.
reviewable/pr7501/r1
NiLuJe 3 years ago committed by GitHub
parent 03e9fac156
commit cbfcb2373d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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
},
}
}
}
}
},
},
},
},
}

@ -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")

Loading…
Cancel
Save