mirror of https://github.com/koreader/koreader
Add new options to screensaver (#3535)
* Prevent open screensaver more than one in the same time * Add option to enable/disable background in message screensaver * fallback to random images if this book cover is excluded feature + fix Disabled (leave screen/page as it is) * Autostretch disable by default, more fallback options, leave screen as it ispull/3550/head
parent
70f2aa09ea
commit
efa0d06df9
@ -0,0 +1,194 @@
|
||||
local Screensaver = require("ui/screensaver")
|
||||
local _ = require("gettext")
|
||||
|
||||
local function screensaverType() return G_reader_settings:readSetting("screensaver_type") end
|
||||
local function screensaverDelay() return G_reader_settings:readSetting("screensaver_delay") end
|
||||
local function lastFile()
|
||||
local lfs = require("libs/libkoreader-lfs")
|
||||
local last_file = G_reader_settings:readSetting("lastfile")
|
||||
if last_file and lfs.attributes(last_file, "mode") == "file" then
|
||||
return last_file
|
||||
end
|
||||
end
|
||||
local function messageBackground() return G_reader_settings:isTrue("message_background") end
|
||||
|
||||
return {
|
||||
{
|
||||
text = _("Use last book's cover as screensaver"),
|
||||
enabled_func = function() return lastFile() ~= nil end,
|
||||
checked_func = function()
|
||||
if screensaverType() == "cover" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_type", "cover")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Use book status as screensaver"),
|
||||
enabled_func = function() return lastFile() ~= nil end,
|
||||
checked_func = function()
|
||||
if screensaverType() == "bookstatus" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_type", "bookstatus")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Use random image from folder as screensaver"),
|
||||
checked_func = function()
|
||||
if screensaverType() == "random_image" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_type", "random_image")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Use reading progress as screensaver"),
|
||||
enabled_func = function() return Screensaver.getReaderProgress ~= nil and lastFile() ~= nil end,
|
||||
checked_func = function()
|
||||
if screensaverType() == "readingprogress" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_type", "readingprogress")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Use message as screensaver"),
|
||||
checked_func = function()
|
||||
if screensaverType() == "message" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_type", "message")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Leave screen as it is"),
|
||||
checked_func = function()
|
||||
if screensaverType() == nil or screensaverType() == "disable" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_type", "disable")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Settings"),
|
||||
sub_item_table = {
|
||||
{
|
||||
text = _("Screensaver folder"),
|
||||
callback = function()
|
||||
Screensaver:chooseFolder()
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("Screensaver message"),
|
||||
callback = function()
|
||||
Screensaver:setMessage()
|
||||
end,
|
||||
},
|
||||
{
|
||||
text = _("White background in message"),
|
||||
checked_func = function()
|
||||
return messageBackground()
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("message_background", not messageBackground())
|
||||
end,
|
||||
separator = true,
|
||||
},
|
||||
{
|
||||
text = _("Delay when exit from screensaver"),
|
||||
sub_item_table = {
|
||||
{
|
||||
text = _("Disable"),
|
||||
checked_func = function()
|
||||
if screensaverDelay() == nil or screensaverDelay() == "disable" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_delay", "disable")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("1 second"),
|
||||
checked_func = function()
|
||||
if screensaverDelay() == "1" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_delay", "1")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("3 seconds"),
|
||||
checked_func = function()
|
||||
if screensaverDelay() == "3" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_delay", "3")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("5 seconds"),
|
||||
checked_func = function()
|
||||
if screensaverDelay() == "5" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_delay", "5")
|
||||
end
|
||||
},
|
||||
{
|
||||
text = _("Tap to exit screensaver"),
|
||||
checked_func = function()
|
||||
if screensaverDelay() == "tap" then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end,
|
||||
callback = function()
|
||||
G_reader_settings:saveSetting("screensaver_delay", "tap")
|
||||
end
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
local Device = require("device")
|
||||
local Geom = require("ui/geometry")
|
||||
local GestureRange = require("ui/gesturerange")
|
||||
local FrameContainer = require("ui/widget/container/framecontainer")
|
||||
local InputContainer = require("ui/widget/container/inputcontainer")
|
||||
local UIManager = require("ui/uimanager")
|
||||
local Screen = Device.screen
|
||||
|
||||
local ScreenSaverWidget = InputContainer:new{
|
||||
widget = nil,
|
||||
background = nil,
|
||||
}
|
||||
|
||||
function ScreenSaverWidget:init()
|
||||
if Device:hasKeys() then
|
||||
self.key_events = {
|
||||
Close = { {"Back"}, doc = "close widget" },
|
||||
}
|
||||
end
|
||||
if Device:isTouchDevice() then
|
||||
local range = Geom:new{
|
||||
x = 0, y = 0,
|
||||
w = Screen:getWidth(),
|
||||
h = Screen:getHeight(),
|
||||
}
|
||||
self.ges_events = {
|
||||
Tap = { GestureRange:new{ ges = "tap", range = range } },
|
||||
}
|
||||
end
|
||||
self:update()
|
||||
end
|
||||
|
||||
function ScreenSaverWidget:update()
|
||||
self.height = Screen:getHeight()
|
||||
self.width = Screen:getWidth()
|
||||
|
||||
self.region = Geom:new{
|
||||
x = 0, y = 0,
|
||||
w = self.width,
|
||||
h = self.height,
|
||||
}
|
||||
self.main_frame = FrameContainer:new{
|
||||
radius = 0,
|
||||
bordersize = 0,
|
||||
padding = 0,
|
||||
margin = 0,
|
||||
background = self.background,
|
||||
width = self.width,
|
||||
height = self.height,
|
||||
self.widget,
|
||||
}
|
||||
self[1] = self.main_frame
|
||||
UIManager:setDirty("all", function()
|
||||
local update_region = self.main_frame.dimen
|
||||
return "partial", update_region
|
||||
end)
|
||||
end
|
||||
|
||||
function ScreenSaverWidget:onShow()
|
||||
UIManager:setDirty(self, function()
|
||||
return "full", self.main_frame.dimen
|
||||
end)
|
||||
return true
|
||||
end
|
||||
|
||||
function ScreenSaverWidget:onTap(_, ges)
|
||||
if ges.pos:intersectWith(self.main_frame.dimen) then
|
||||
self:onClose()
|
||||
UIManager:setDirty("all", "full")
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function ScreenSaverWidget:onClose()
|
||||
UIManager:close(self)
|
||||
UIManager:setDirty("all", "full")
|
||||
return true
|
||||
end
|
||||
|
||||
function ScreenSaverWidget:onAnyKeyPressed()
|
||||
self:onClose()
|
||||
return true
|
||||
end
|
||||
|
||||
function ScreenSaverWidget:onCloseWidget()
|
||||
UIManager:setDirty(nil, function()
|
||||
return "partial", self.main_frame.dimen
|
||||
end)
|
||||
return true
|
||||
end
|
||||
|
||||
return ScreenSaverWidget
|
Loading…
Reference in New Issue