mirror of https://github.com/koreader/koreader
parent
791d540a5a
commit
0318a048b4
@ -0,0 +1,98 @@
|
||||
|
||||
local InfoMessage = require("ui/widget/infomessage")
|
||||
local InputDialog = require("ui/widget/inputdialog")
|
||||
local UIManager = require("ui/uimanager")
|
||||
local WidgetContainer = require("ui/widget/container/widgetcontainer")
|
||||
local T = require("ffi/util").template
|
||||
local _ = require("gettext")
|
||||
|
||||
local ReadTimer = WidgetContainer:new{
|
||||
name = "readtimer",
|
||||
time = 0, -- The expected time of alarm if enabled, or 0.
|
||||
}
|
||||
|
||||
function ReadTimer:init()
|
||||
self.alarm_callback = function()
|
||||
if self.time == 0 then return end -- How could this happen?
|
||||
self.time = 0
|
||||
UIManager:show(InfoMessage:new{
|
||||
text = T(_("Read timer alarm\nTime's up. It's %1 now."), os.date("%c")),
|
||||
timeout = 10,
|
||||
})
|
||||
end
|
||||
self.ui.menu:registerToMainMenu(self)
|
||||
end
|
||||
|
||||
function ReadTimer:scheduled()
|
||||
return self.time ~= 0
|
||||
end
|
||||
|
||||
function ReadTimer:remainingMinutes()
|
||||
if self:scheduled() then
|
||||
return os.difftime(self.time, os.time()) / 60
|
||||
else
|
||||
return math.huge
|
||||
end
|
||||
end
|
||||
|
||||
function ReadTimer:unschedule()
|
||||
if self:scheduled() then
|
||||
UIManager:unschedule(self.alarm_callback)
|
||||
self.time = 0
|
||||
end
|
||||
end
|
||||
|
||||
function ReadTimer:addToMainMenu(menu_items)
|
||||
menu_items.read_timer = {
|
||||
text = _("Read timer"),
|
||||
checked_func = function()
|
||||
-- TODO (hzj-jie): Find a way to refresh the menu items after the buttons callbacks.
|
||||
return self:scheduled()
|
||||
end,
|
||||
callback = function()
|
||||
local description = _("When will the countdown timer notify you?")
|
||||
local buttons = {{
|
||||
text = _("Close"),
|
||||
callback = function()
|
||||
UIManager:close(self.input)
|
||||
end,
|
||||
}, {
|
||||
text = _("Start"),
|
||||
callback = function()
|
||||
self:unschedule()
|
||||
local seconds = self.input:getInputValue() * 60
|
||||
if seconds > 0 then
|
||||
self.time = os.time() + seconds
|
||||
UIManager:scheduleIn(seconds, self.alarm_callback)
|
||||
end
|
||||
UIManager:close(self.input)
|
||||
end,
|
||||
}}
|
||||
if self:scheduled() then
|
||||
description = description ..
|
||||
T(_("\n\nYou have already set up a timer for %1 minutes from now. Setting a new one will overwrite it."),
|
||||
string.format("%.2f", self:remainingMinutes()))
|
||||
table.insert(buttons, {
|
||||
text = _("Stop"),
|
||||
callback = function()
|
||||
self:unschedule()
|
||||
UIManager:close(self.input)
|
||||
end,
|
||||
})
|
||||
end
|
||||
description = description .. _("\n\n - Positive number is required.")
|
||||
|
||||
self.input = InputDialog:new{
|
||||
title = _("Read timer"),
|
||||
description = description,
|
||||
input_type = "number",
|
||||
input_hint = _("time in minutes"),
|
||||
buttons = { buttons },
|
||||
}
|
||||
self.input:onShowKeyboard()
|
||||
UIManager:show(self.input)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
return ReadTimer
|
Loading…
Reference in New Issue