mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Sleep screen menu reworked (#11549)
This commit is contained in:
@@ -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()
|
||||
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 = _("Screensaver image"),
|
||||
keep_menu_open = true,
|
||||
callback = function()
|
||||
Screensaver:chooseFile()
|
||||
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 = _("Keep the screensaver on screen after wakeup"),
|
||||
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(_("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(_("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 = _("Message position"),
|
||||
enabled_func = function()
|
||||
return G_reader_settings:isTrue("screensaver_show_message")
|
||||
end,
|
||||
sub_item_table = {
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user