You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koreader/frontend/ui/elements/screen_notification_menu_ta...

83 lines
3.2 KiB
Lua

local Notification = require("ui/widget/notification")
local TextViewer = require("ui/widget/textviewer")
local UIManager = require("ui/uimanager")
local logger = require("logger")
local _ = require("gettext")
local band = bit.band
local bor = bit.bor
local bnot = bit.bnot
local function getMask()
return G_reader_settings:readSetting("notification_sources_to_show_mask") or Notification.SOURCE_DEFAULT
end
local function setMask(source)
logger.dbg(string.format("Notification: Updating display mask from %#x to %#x", getMask(), source))
G_reader_settings:saveSetting("notification_sources_to_show_mask", source)
end
local function isEnabled(source)
return band(getMask(), source) == source
end
-- Helper function to avoid repeating boilerplate code, as we just flip a few bits one way or the other
local function genMenuItem(source, label, help, separator)
return {
text = label,
help_text = help,
checked_func = function() return isEnabled(source) end,
callback = function()
if isEnabled(source) then
setMask(
band(getMask(), bnot(source)))
else
setMask(
bor(getMask(), source))
end
end,
separator = separator,
}
end
-- NOTE: Default is MORE + DISPATCHER; i.e., BOTTOM_MENU_FINE + BOTTOM_MENU_MORE + BOTTOM_MENU_PROGRESS + DISPATCHER
return {
text = _("Notifications"),
help_text = _([[Notification popups may be shown at the top of screen on various occasions.
This allows selecting which to show or hide.]]),
checked_func = function()
local value = G_reader_settings:readSetting("notification_sources_to_show_mask") or Notification.SOURCE_DEFAULT
return value ~= 0
end,
sub_item_table = {
genMenuItem(Notification.SOURCE_BOTTOM_MENU_ICON, _("From bottom menu icons")),
genMenuItem(Notification.SOURCE_BOTTOM_MENU_TOGGLE, _("From bottom menu toggles")),
genMenuItem(Notification.SOURCE_BOTTOM_MENU_FINE, _("From bottom menu ± buttons")), -- Poor man's +/- w/ \u{207a}\u{2044}\u{208b} doesn't look too great because subscript minus sits on the baseline in most fonts...
genMenuItem(Notification.SOURCE_BOTTOM_MENU_MORE, _("From bottom menu ⋮ buttons")),
genMenuItem(Notification.SOURCE_BOTTOM_MENU_PROGRESS, _("From bottom menu progress bars")),
genMenuItem(Notification.SOURCE_DISPATCHER, _("From gestures and profiles")),
genMenuItem(Notification.SOURCE_OTHER, _("From all other sources"), nil, true),
{
text = _("Show past notifications"),
callback = function()
local content = require("ui/widget/notification"):getPastMessages()
if not content or #content == 0 then
content = _("No notifications available.")
else
content = table.concat(content, "\n")
end
local textviewer
textviewer = TextViewer:new{
title = _("Past notifications"),
text = content,
justified = false,
}
UIManager:show(textviewer)
end,
keep_menu_open = true,
},
}
}