Sleep screen menu reworked (#11549)

reviewable/pr11643/r1
SomeGuy 3 weeks ago committed by GitHub
parent aaa56a814f
commit 279f16aa23
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -454,7 +454,7 @@ To:
if Device:supportsScreensaver() then
self.menu_items.screensaver = {
text = _("Screensaver"),
text = _("Sleep screen"),
sub_item_table = require("ui/elements/screensaver_menu"),
}
end

@ -254,7 +254,7 @@ function ReaderMenu:setUpdateItemTable()
if Device:supportsScreensaver() then
local ss_book_settings = {
text = _("Exclude this book's content and cover from screensaver"),
text = _("Do not show this book cover on sleep screen"),
enabled_func = function()
if self.ui and self.ui.document then
local screensaverType = G_reader_settings:readSetting("screensaver_type")
@ -285,7 +285,7 @@ function ReaderMenu:setUpdateItemTable()
end
table.insert(screensaver_sub_item_table, ss_book_settings)
self.menu_items.screensaver = {
text = _("Screensaver"),
text = _("Sleep screen"),
sub_item_table = screensaver_sub_item_table,
}
end

@ -65,7 +65,7 @@ local settingsList = {
----
-- Device
exit_screensaver = {category="none", event="ExitScreensaver", title=_("Exit screensaver"), device=true},
exit_screensaver = {category="none", event="ExitScreensaver", title=_("Exit sleep screen"), device=true},
start_usbms = {category="none", event="RequestUSBMS", title=_("Start USB storage"), device=true, condition=Device:canToggleMassStorage()},
suspend = {category="none", event="RequestSuspend", title=_("Suspend"), device=true, condition=Device:canSuspend()},
restart = {category="none", event="Restart", title=_("Restart KOReader"), device=true, condition=Device:canRestart()},

@ -10,7 +10,7 @@ local util = require("util")
local _ = require("gettext")
-- Date at which the last migration snippet was added
local CURRENT_MIGRATION_DATE = 20231217
local CURRENT_MIGRATION_DATE = 20240408
-- Retrieve the date of the previous migration, if any
local last_migration_date = G_reader_settings:readSetting("last_migration_date", 0)
@ -647,5 +647,16 @@ if last_migration_date < 20231217 then
end
end
-- 20240408, drop sleep screen/screensaver image_file setting in favor of document cover
if last_migration_date < 20240408 then
logger.info("Performing one-time migration for 20240408")
local image_file = G_reader_settings:readSetting("screensaver_type") == "image_file" and G_reader_settings:readSetting("screensaver_image")
if image_file then
G_reader_settings:saveSetting("screensaver_type", "document_cover")
G_reader_settings:saveSetting("screensaver_document_cover", image_file)
end
end
-- We're done, store the current migration date
G_reader_settings:saveSetting("last_migration_date", CURRENT_MIGRATION_DATE)

@ -26,63 +26,27 @@ local function genMenuItem(text, setting, value, enabled_func, separator)
separator = separator,
}
end
return {
genMenuItem(_("Use last book's cover as screensaver"), "screensaver_type", "cover", hasLastFile),
genMenuItem(_("Use book status as screensaver"), "screensaver_type", "bookstatus", hasLastFile),
genMenuItem(_("Use random image from folder as screensaver"), "screensaver_type", "random_image"),
genMenuItem(_("Use document cover as screensaver"), "screensaver_type", "document_cover"),
genMenuItem(_("Use image as screensaver"), "screensaver_type", "image_file"),
genMenuItem(_("Use reading progress as screensaver"), "screensaver_type", "readingprogress", isReaderProgressEnabled),
genMenuItem(_("Leave screen as-is"), "screensaver_type", "disable", nil, true),
-- separator
{
text = _("Add message to screensaver"),
checked_func = function()
return G_reader_settings:isTrue("screensaver_show_message")
end,
callback = function()
G_reader_settings:toggle("screensaver_show_message")
end,
separator = true,
},
-- separator
{
text = _("Settings"),
text = _("Wallpaper"),
sub_item_table = {
genMenuItem(_("Show book cover on sleep screen"), "screensaver_type", "cover", hasLastFile),
genMenuItem(_("Show custom image or cover on sleep screen"), "screensaver_type", "document_cover"),
genMenuItem(_("Show random image from folder on sleep screen"), "screensaver_type", "random_image"),
genMenuItem(_("Show reading progress on sleep screen"), "screensaver_type", "readingprogress", isReaderProgressEnabled),
genMenuItem(_("Show book status on sleep screen"), "screensaver_type", "bookstatus", hasLastFile),
genMenuItem(_("Leave screen as-is"), "screensaver_type", "disable", nil, true),
separator = true,
{
text = _("Screensaver folder"),
keep_menu_open = true,
callback = function()
Screensaver:chooseFolder()
end,
},
{
text = _("Screensaver image"),
keep_menu_open = true,
callback = function()
Screensaver:chooseFile()
text = _("Border fill"),
enabled_func = function()
return G_reader_settings:readSetting("screensaver_type") == "cover"
or G_reader_settings:readSetting("screensaver_type") == "document_cover"
or G_reader_settings:readSetting("screensaver_type") == "random_image"
end,
},
{
text = _("Document cover"),
keep_menu_open = true,
callback = function()
Screensaver:chooseFile(true)
end,
},
{
text = _("Screensaver message"),
keep_menu_open = true,
callback = function()
Screensaver:setMessage()
end,
},
{
text = _("Covers and images settings"),
sub_item_table = {
genMenuItem(_("Black background"), "screensaver_img_background", "black"),
genMenuItem(_("White background"), "screensaver_img_background", "white"),
genMenuItem(_("Black fill"), "screensaver_img_background", "black"),
genMenuItem(_("White fill"), "screensaver_img_background", "white"),
genMenuItem(_("Leave background as-is"), "screensaver_img_background", "none", nil, true),
-- separator
{
@ -91,7 +55,7 @@ return {
if G_reader_settings:isTrue("screensaver_stretch_images") and percentage then
return T(_("Stretch to fit screen (with limit: %1 %)"), percentage)
end
return _("Stretch to fit screen")
return _("Stretch cover to fit screen")
end,
checked_func = function()
return G_reader_settings:isTrue("screensaver_stretch_images")
@ -103,38 +67,102 @@ return {
},
},
{
text = _("Message settings"),
text = _("Delay screen update after wake-up"),
sub_item_table = {
genMenuItem(_("No delay"), "screensaver_delay", "disable"),
genMenuItem(_("1 second"), "screensaver_delay", "1"),
genMenuItem(_("3 seconds"), "screensaver_delay", "3"),
genMenuItem(_("5 seconds"), "screensaver_delay", "5"),
genMenuItem(_("Until a tap"), "screensaver_delay", "tap"),
genMenuItem(_("Until 'exit sleep screen' gesture"), "screensaver_delay", "gesture"),
},
},
{
text = _("Custom images"),
enabled_func = function()
return G_reader_settings:readSetting("screensaver_type") == "random_image"
or G_reader_settings:readSetting("screensaver_type") == "document_cover"
end,
sub_item_table = {
genMenuItem(_("Black background behind message"), "screensaver_msg_background", "black"),
genMenuItem(_("White background behind message"), "screensaver_msg_background", "white"),
genMenuItem(_("Leave background as-is behind message"), "screensaver_msg_background", "none", nil, true),
-- separator
genMenuItem(_("Message position: top"), "screensaver_message_position", "top"),
genMenuItem(_("Message position: middle"), "screensaver_message_position", "middle"),
genMenuItem(_("Message position: bottom"), "screensaver_message_position", "bottom", nil, true),
-- separator
{
text = _("Hide reboot/poweroff message"),
checked_func = function()
return G_reader_settings:isTrue("screensaver_hide_fallback_msg")
text = _("Select image or document cover"),
enabled_func = function()
return G_reader_settings:readSetting("screensaver_type") == "document_cover"
end,
keep_menu_open = true,
callback = function()
G_reader_settings:toggle("screensaver_hide_fallback_msg")
Screensaver:chooseFile()
end,
},
{
text = _("Select random image folder"),
enabled_func = function()
return G_reader_settings:readSetting("screensaver_type") == "random_image"
end,
keep_menu_open = true,
callback = function()
Screensaver:chooseFolder()
end,
},
},
},
},
},
{
text = _("Sleep screen message"),
sub_item_table = {
{
text = _("Add custom message to sleep screen"),
checked_func = function()
return G_reader_settings:isTrue("screensaver_show_message")
end,
callback = function()
G_reader_settings:toggle("screensaver_show_message")
end,
separator = true,
},
{
text = _("Edit sleep screen message"),
enabled_func = function()
return G_reader_settings:isTrue("screensaver_show_message")
end,
keep_menu_open = true,
callback = function()
Screensaver:setMessage()
end,
},
{
text = _("Background fill"),
help_text = _("This option will only become available, if you have selected 'Leave screen as-is' as screensaver and have 'Sleep screen message' on."),
enabled_func = function()
return G_reader_settings:readSetting("screensaver_type") == "disable" and G_reader_settings:isTrue("screensaver_show_message")
end,
sub_item_table = {
genMenuItem(_("Black fill"), "screensaver_msg_background", "black"),
genMenuItem(_("White fill"), "screensaver_msg_background", "white"),
genMenuItem(_("Leave background as-is"), "screensaver_msg_background", "none", nil, true),
},
},
{
text = _("Keep the screensaver on screen after wakeup"),
text = _("Message position"),
enabled_func = function()
return G_reader_settings:isTrue("screensaver_show_message")
end,
sub_item_table = {
genMenuItem(_("Disable"), "screensaver_delay", "disable"),
genMenuItem(_("For 1 second"), "screensaver_delay", "1"),
genMenuItem(_("For 3 second"), "screensaver_delay", "3"),
genMenuItem(_("For 5 second"), "screensaver_delay", "5"),
genMenuItem(_("Until a tap"), "screensaver_delay", "tap"),
genMenuItem(_("Until 'Exit screensaver' gesture"), "screensaver_delay", "gesture"),
genMenuItem(_("Top"), "screensaver_message_position", "top"),
genMenuItem(_("Middle"), "screensaver_message_position", "middle"),
genMenuItem(_("Bottom"), "screensaver_message_position", "bottom", nil, true),
},
},
{
text = _("Hide reboot/poweroff message"),
checked_func = function()
return G_reader_settings:isTrue("screensaver_hide_fallback_msg")
end,
callback = function()
G_reader_settings:toggle("screensaver_hide_fallback_msg")
end,
},
},
},
}

@ -273,26 +273,15 @@ function Screensaver:chooseFolder()
filemanagerutil.showChooseDialog(title_header, caller_callback, current_path)
end
function Screensaver:chooseFile(document_cover)
function Screensaver:chooseFile()
local title_header, current_path, file_filter, caller_callback
if document_cover then
title_header = _("Current screensaver document cover:")
current_path = G_reader_settings:readSetting("screensaver_document_cover")
file_filter = function(filename)
return DocumentRegistry:hasProvider(filename)
end
caller_callback = function(path)
G_reader_settings:saveSetting("screensaver_document_cover", path)
end
else
title_header = _("Current screensaver image:")
current_path = G_reader_settings:readSetting("screensaver_image")
file_filter = function(filename)
return DocumentRegistry:isImageFile(filename)
end
caller_callback = function(path)
G_reader_settings:saveSetting("screensaver_image", path)
end
title_header = _("Current sleep screen image or document cover:")
current_path = G_reader_settings:readSetting("screensaver_document_cover")
file_filter = function(filename)
return DocumentRegistry:hasProvider(filename)
end
caller_callback = function(path)
G_reader_settings:saveSetting("screensaver_document_cover", path)
end
filemanagerutil.showChooseDialog(title_header, caller_callback, current_path, nil, file_filter)
end
@ -327,7 +316,7 @@ function Screensaver:setMessage()
input_dialog = InputDialog:new{
title = _("Screensaver message"),
description = _([[
Enter the message to be displayed by the screensaver. The following escape sequences can be used:
Enter a custom message to be displayed on the sleep screen. The following escape sequences are available:
%T title
%A author(s)
%S series
@ -406,7 +395,6 @@ end
function Screensaver:modeIsImage()
return self.screensaver_type == "cover"
or self.screensaver_type == "random_image"
or self.screensaver_type == "image_file"
end
function Screensaver:withBackground()
@ -458,9 +446,13 @@ function Screensaver:setup(event, event_message)
end
if not excluded then
if lastfile and lfs.attributes(lastfile, "mode") == "file" then
self.image = FileManagerBookInfo:getCoverImage(ui and ui.document, lastfile)
if self.image == nil then
self.screensaver_type = "random_image"
if DocumentRegistry:isImageFile(lastfile) then
self.image_file = lastfile
else
self.image = FileManagerBookInfo:getCoverImage(ui and ui.document, lastfile)
if self.image == nil then
self.screensaver_type = "random_image"
end
end
else
self.screensaver_type = "random_image"
@ -475,13 +467,6 @@ function Screensaver:setup(event, event_message)
self.screensaver_type = "random_image"
end
end
if self.screensaver_type == "image_file" then
self.image_file = G_reader_settings:readSetting(self.prefix .. "screensaver_image")
or G_reader_settings:readSetting("screensaver_image")
if self.image_file == nil or lfs.attributes(self.image_file, "mode") ~= "file" then
self.screensaver_type = "random_image"
end
end
if self.screensaver_type == "readingprogress" then
-- This is implemented by the Statistics plugin
if Screensaver.getReaderProgress == nil then
@ -554,15 +539,22 @@ function Screensaver:show()
-- Build the main widget for the effective mode, all the sanity checks were handled in setup
local widget = nil
if self.screensaver_type == "cover" then
widget = ImageWidget:new{
image = self.image,
image_disposable = true,
if self.screensaver_type == "cover" or self.screensaver_type == "random_image" then
local widget_settings = {
width = Screen:getWidth(),
height = Screen:getHeight(),
scale_factor = G_reader_settings:isFalse("screensaver_stretch_images") and 0 or nil,
stretch_limit_percentage = G_reader_settings:readSetting("screensaver_stretch_limit_percentage"),
}
if self.image then
widget_settings.image = self.image
widget_settings.image_disposable = true
elseif self.image_file then
widget_settings.file = self.image_file
widget_settings.file_do_cache = false
widget_settings.alpha = true
end
widget = ImageWidget:new(widget_settings)
elseif self.screensaver_type == "bookstatus" then
local ReaderUI = require("apps/reader/readerui")
local ui = ReaderUI.instance
@ -576,16 +568,6 @@ function Screensaver:show()
ui = ui,
readonly = true,
}
elseif self.screensaver_type == "random_image" or self.screensaver_type == "image_file" then
widget = ImageWidget:new{
file = self.image_file,
file_do_cache = false,
alpha = true,
width = Screen:getWidth(),
height = Screen:getHeight(),
scale_factor = G_reader_settings:isFalse("screensaver_stretch_images") and 0 or nil,
stretch_limit_percentage = G_reader_settings:readSetting("screensaver_stretch_limit_percentage"),
}
elseif self.screensaver_type == "readingprogress" then
widget = Screensaver.getReaderProgress()
end

Loading…
Cancel
Save