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"), 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() checked_func = function()
return G_reader_settings:readSetting("screensaver_type") == "readingprogress" return G_reader_settings:readSetting("screensaver_type") == "readingprogress"
end, end,
@ -72,7 +74,7 @@ return {
{ {
text = _("Leave screen as it is"), text = _("Leave screen as it is"),
checked_func = function() 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, end,
callback = function() callback = function()
G_reader_settings:saveSetting("screensaver_type", "disable") G_reader_settings:saveSetting("screensaver_type", "disable")
@ -82,10 +84,9 @@ return {
{ {
text = _("Add message to screensaver"), text = _("Add message to screensaver"),
checked_func = function() 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, end,
callback = function() 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") G_reader_settings:toggle("screensaver_show_message")
end, end,
separator = true, separator = true,
@ -122,73 +123,110 @@ return {
end, end,
}, },
{ {
text = _("Black background behind images"), text = _("Covers and images settings"),
checked_func = function() sub_item_table = {
return G_reader_settings:readSetting("screensaver_background") == "black" or G_reader_settings:hasNot("screensaver_background") {
end, text = _("Black background behind covers and images"),
callback = function() checked_func = function()
G_reader_settings:saveSetting("screensaver_background", "black") return G_reader_settings:readSetting("screensaver_img_background") == "black"
end, end,
}, callback = function()
{ G_reader_settings:saveSetting("screensaver_img_background", "black")
text = _("White background behind message and images"), end,
checked_func = function() },
return G_reader_settings:readSetting("screensaver_background") == "white" {
end, text = _("White background behind covers and images"),
callback = function() checked_func = function()
G_reader_settings:saveSetting("screensaver_background", "white") return G_reader_settings:readSetting("screensaver_img_background") == "white"
end, end,
}, callback = function()
{ G_reader_settings:saveSetting("screensaver_img_background", "white")
text = _("Leave background as-is behind message and images"), end,
checked_func = function() },
return G_reader_settings:readSetting("screensaver_background") == "none" {
end, text = _("Leave background as-is behind covers and images"),
callback = function() checked_func = function()
G_reader_settings:saveSetting("screensaver_background", "none") return G_reader_settings:readSetting("screensaver_img_background") == "none"
end, end,
}, callback = function()
{ G_reader_settings:saveSetting("screensaver_img_background", "none")
text = _("Stretch covers and images to fit screen"), end,
checked_func = function() },
return G_reader_settings:isTrue("screensaver_stretch_images") {
end, text = _("Stretch covers and images to fit screen"),
callback = function() checked_func = function()
G_reader_settings:toggle("screensaver_stretch_images") return G_reader_settings:isTrue("screensaver_stretch_images")
end, end,
separator = true, callback = function()
G_reader_settings:toggle("screensaver_stretch_images")
end,
separator = true,
},
},
}, },
{ {
text = _("Screensaver message position"), text = _("Message settings"),
sub_item_table = { sub_item_table = {
{ {
text = _("Top"), text = _("Black background behind message"),
checked_func = function() checked_func = function()
return G_reader_settings:readSetting("screensaver_message_position") == "top" return G_reader_settings:readSetting("screensaver_msg_background") == "black"
end, end,
callback = function() callback = function()
G_reader_settings:saveSetting("screensaver_message_position", "top") G_reader_settings:saveSetting("screensaver_msg_background", "black")
end end,
}, },
{ {
text = _("Middle"), text = _("White background behind message"),
checked_func = function() 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, end,
callback = function() callback = function()
G_reader_settings:saveSetting("screensaver_message_position", "middle") G_reader_settings:saveSetting("screensaver_msg_background", "white")
end end,
}, },
{ {
text = _("Bottom"), text = _("Leave background as-is behind message"),
checked_func = function() checked_func = function()
return G_reader_settings:readSetting("screensaver_message_position") == "bottom" return G_reader_settings:readSetting("screensaver_msg_background") == "none"
end, end,
callback = function() callback = function()
G_reader_settings:saveSetting("screensaver_message_position", "bottom") G_reader_settings:saveSetting("screensaver_msg_background", "none")
end 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"), text = _("Keep the screensaver on screen after wakeup"),
@ -196,7 +234,7 @@ return {
{ {
text = _("Disable"), text = _("Disable"),
checked_func = function() 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, end,
callback = function() callback = function()
G_reader_settings:saveSetting("screensaver_delay", "disable") G_reader_settings:saveSetting("screensaver_delay", "disable")
@ -238,8 +276,8 @@ return {
G_reader_settings:saveSetting("screensaver_delay", "tap") G_reader_settings:saveSetting("screensaver_delay", "tap")
end end
}, },
} },
} },
} },
} },
} }

@ -23,7 +23,7 @@ local _ = require("gettext")
local Screen = Device.screen local Screen = Device.screen
local T = require("ffi/util").template 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 if G_reader_settings:readSetting("screensaver_type") == "message" then
G_reader_settings:saveSetting("screensaver_type", "disable") G_reader_settings:saveSetting("screensaver_type", "disable")
G_reader_settings:makeTrue("screensaver_show_message") G_reader_settings:makeTrue("screensaver_show_message")
@ -40,6 +40,35 @@ if G_reader_settings:has("screensaver_white_background") then
end end
G_reader_settings:delSetting("screensaver_white_background") G_reader_settings:delSetting("screensaver_white_background")
end 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 = { local Screensaver = {
screensaver_provider = { screensaver_provider = {
@ -367,24 +396,10 @@ function Screensaver:withBackground()
end end
function Screensaver:setup(event, fallback_message) function Screensaver:setup(event, fallback_message)
-- Handle user settings & defaults self.show_message = G_reader_settings:isTrue("screensaver_show_message")
if G_reader_settings:has("screensaver_show_message") then self.screensaver_type = G_reader_settings:readSetting("screensaver_type")
self.show_message = G_reader_settings:isTrue("screensaver_show_message") local screensaver_img_background = G_reader_settings:readSetting("screensaver_img_background")
else local screensaver_msg_background = G_reader_settings:readSetting("screensaver_msg_background")
-- 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
-- These 2 (optional) parameters are to support poweroff and reboot actions on Kobo (c.f., UIManager) -- 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_" self.prefix = event and event .. "_" or "" -- "", "poweroff_" or "reboot_"
@ -490,12 +505,11 @@ function Screensaver:setup(event, fallback_message)
end end
end end
-- Now that the fallbacks are in place, we know the *effective* screensaver mode. -- Use the right background setting depending on the effective mode, now that fallbacks have kicked in.
-- For non-image modes, make black (which is also the default) synonymous with none. if self:modeIsImage() then
-- The reasoning is that disable + show_message, which is our default and fallback, self.screensaver_background = screensaver_img_background
-- looks *terrible* with a black background, which is also our default and fallback ;). else
if not self:modeIsImage() and self.screensaver_background == "black" then self.screensaver_background = screensaver_msg_background
self.screensaver_background = "none"
end end
end end
@ -518,7 +532,7 @@ function Screensaver:show()
image_disposable = true, image_disposable = true,
height = Screen:getHeight(), height = Screen:getHeight(),
width = Screen:getWidth(), 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 elseif self.screensaver_type == "bookstatus" then
local ReaderUI = require("apps/reader/readerui") local ReaderUI = require("apps/reader/readerui")
@ -540,7 +554,7 @@ function Screensaver:show()
alpha = true, alpha = true,
height = Screen:getHeight(), height = Screen:getHeight(),
width = Screen:getWidth(), 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 elseif self.screensaver_type == "readingprogress" then
widget = Screensaver.getReaderProgress() widget = Screensaver.getReaderProgress()
@ -580,11 +594,7 @@ function Screensaver:show()
if G_reader_settings:has(self.prefix .. "screensaver_message_position") then if G_reader_settings:has(self.prefix .. "screensaver_message_position") then
message_pos = G_reader_settings:readSetting(self.prefix .. "screensaver_message_position") message_pos = G_reader_settings:readSetting(self.prefix .. "screensaver_message_position")
else else
if G_reader_settings:has("screensaver_message_position") then message_pos = G_reader_settings:readSetting("screensaver_message_position")
message_pos = G_reader_settings:readSetting("screensaver_message_position")
else
message_pos = "middle"
end
end end
-- The only case where we *won't* cover the full-screen is when we only display a message and no background. -- 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 self.screensaver_widget = nil
end end
end) end)
elseif screensaver_delay == "disable" or screensaver_delay == nil then elseif screensaver_delay == "disable" then
logger.dbg("close screensaver") logger.dbg("close screensaver")
if self.screensaver_widget then if self.screensaver_widget then
UIManager:close(self.screensaver_widget, "full") UIManager:close(self.screensaver_widget, "full")

Loading…
Cancel
Save