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 ,
} ,
}
}