From 279f16aa2323d519a7b1fcf51bcc02b9cc002bc9 Mon Sep 17 00:00:00 2001 From: SomeGuy <97603719+Commodore64user@users.noreply.github.com> Date: Mon, 8 Apr 2024 21:47:17 +0100 Subject: [PATCH] Sleep screen menu reworked (#11549) --- frontend/apps/filemanager/filemanagermenu.lua | 2 +- frontend/apps/reader/modules/readermenu.lua | 4 +- frontend/dispatcher.lua | 2 +- frontend/ui/data/onetime_migration.lua | 13 +- frontend/ui/elements/screensaver_menu.lua | 172 ++++++++++-------- frontend/ui/screensaver.lua | 72 +++----- 6 files changed, 143 insertions(+), 122 deletions(-) diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 9d18c813a..328412ad0 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -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 diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 029491786..e6c913630 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -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 diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index f97b42c18..2b2cc1780 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -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()}, diff --git a/frontend/ui/data/onetime_migration.lua b/frontend/ui/data/onetime_migration.lua index 255a90938..2d4a8e8b0 100644 --- a/frontend/ui/data/onetime_migration.lua +++ b/frontend/ui/data/onetime_migration.lua @@ -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) diff --git a/frontend/ui/elements/screensaver_menu.lua b/frontend/ui/elements/screensaver_menu.lua index 120c046d7..552c7eb44 100644 --- a/frontend/ui/elements/screensaver_menu.lua +++ b/frontend/ui/elements/screensaver_menu.lua @@ -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, + }, }, }, } diff --git a/frontend/ui/screensaver.lua b/frontend/ui/screensaver.lua index 9cad5481b..736f6873e 100644 --- a/frontend/ui/screensaver.lua +++ b/frontend/ui/screensaver.lua @@ -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