Allow closing full screen dialogs with swipe down (#4237)

Mostly all that have a close button at top right, that may
be hard to reach or hit for some people: TOC, Bookmarks, History,
KeyValuePage (Book information, Statistics...), Book status...
Added full refresh on diagonal swipe where it was missing.
CoverMenu: removed onSwipe override, as it had become the same as
Menu a few months ago.
pull/4244/head
poire-z 6 years ago committed by GitHub
parent a037fc65aa
commit 47bcfc531e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -6,6 +6,7 @@ local Device = require("device")
local Font = require("ui/font")
local FrameContainer = require("ui/widget/container/framecontainer")
local Geom = require("ui/geometry")
local GestureRange = require("ui/gesturerange")
local HorizontalGroup = require("ui/widget/horizontalgroup")
local HorizontalSpan = require("ui/widget/horizontalspan")
local ImageWidget = require("ui/widget/imagewidget")
@ -91,6 +92,14 @@ function BookStatusWidget:init()
seqtext = "any key", doc = "close dialog" }
}
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {
GestureRange:new{
ges = "swipe",
range = function() return self.dimen end,
}
}
end
local screen_size = Screen:getSize()
self.covers_fullscreen = true -- hint for UIManager:_repaint()
@ -540,6 +549,22 @@ function BookStatusWidget:onAnyKeyPressed()
return self:onClose()
end
function BookStatusWidget:onSwipe(arg, ges_ev)
if ges_ev.direction == "south" then
-- Allow easier closing with swipe down
self:onClose()
elseif ges_ev.direction == "east" or ges_ev.direction == "west" or ges_ev.direction == "north" then
-- no use for now
do end -- luacheck: ignore 541
else -- diagonal swipe
-- trigger full refresh
UIManager:setDirty(nil, "full")
-- a long diagonal swipe may also be used for taking a screenshot,
-- so let it propagate
return false
end
end
function BookStatusWidget:onClose()
self:saveSummary()
-- NOTE: Flash on close to avoid ghosting, since we show an image.

@ -529,7 +529,13 @@ function KeyValuePage:onSwipe(arg, ges_ev)
elseif ges_ev.direction == "east" then
self:prevPage()
return true
else
elseif ges_ev.direction == "south" then
-- Allow easier closing with swipe down
self:onClose()
elseif ges_ev.direction == "north" then
-- no use for now
do end -- luacheck: ignore 541
else -- diagonal swipe
-- trigger full refresh
UIManager:setDirty(nil, "full")
-- a long diagonal swipe may also be used for taking a screenshot,

@ -1176,7 +1176,18 @@ function Menu:onSwipe(arg, ges_ev)
self:onNextPage()
elseif ges_ev.direction == "east" then
self:onPrevPage()
else
elseif ges_ev.direction == "south" then
if self.has_close_button and not self.no_title then
-- If there is a close button displayed (so, this Menu can be
-- closed), allow easier closing with swipe up/down
self:onClose()
end
-- If there is no close button, it's a top level Menu and swipe
-- up/down may hide/show top menu
elseif ges_ev.direction == "north" then
-- no use for now
do end -- luacheck: ignore 541
else -- diagonal swipe
-- trigger full refresh
UIManager:setDirty(nil, "full")
end

@ -16,7 +16,6 @@ local BookInfoManager = require("bookinfomanager")
-- Here are defined the common overriden methods of Menu:
-- :updateItems(select_number)
-- :onCloseWidget()
-- :onSwipe(arg, ges_ev)
--
-- MosaicMenu or ListMenu should implement specific UI methods:
-- :_recalculateDimen()
@ -452,19 +451,6 @@ function CoverMenu:onCloseWidget()
Menu.onCloseWidget(self)
end
-- Overriden just to allow full refresh (useful with images)
function CoverMenu:onSwipe(arg, ges_ev)
if ges_ev.direction == "west" then
self:onNextPage()
elseif ges_ev.direction == "east" then
self:onPrevPage()
elseif ges_ev.direction ~= "north" and ges_ev.direction ~= "south" then
-- but not if north/south, and we're triggering menu
-- trigger full refresh
UIManager:setDirty(nil, "full")
end
end
function CoverMenu:tapPlus()
-- Call original function: it will create a ButtonDialogTitle
-- and store it as self.file_dialog, and UIManager:show() it.

@ -18,7 +18,6 @@ local FileChooser = require("ui/widget/filechooser")
local _FileChooser__recalculateDimen_orig = FileChooser._recalculateDimen
local _FileChooser_updateItems_orig = FileChooser.updateItems
local _FileChooser_onCloseWidget_orig = FileChooser.onCloseWidget
local _FileChooser_onSwipe_orig = FileChooser.onSwipe
local FileManagerHistory = require("apps/filemanager/filemanagerhistory")
local _FileManagerHistory_updateItemTable_orig = FileManagerHistory.updateItemTable
@ -454,7 +453,6 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
-- Put back original methods
FileChooser.updateItems = _FileChooser_updateItems_orig
FileChooser.onCloseWidget = _FileChooser_onCloseWidget_orig
FileChooser.onSwipe = _FileChooser_onSwipe_orig
FileChooser._recalculateDimen = _FileChooser__recalculateDimen_orig
FileManager.tapPlus = _FileManager_tapPlus_orig
-- Also clean-up what we added, even if it does not bother original code
@ -471,7 +469,6 @@ function CoverBrowser:setupFileManagerDisplayMode(display_mode)
local CoverMenu = require("covermenu")
FileChooser.updateItems = CoverMenu.updateItems
FileChooser.onCloseWidget = CoverMenu.onCloseWidget
FileChooser.onSwipe = CoverMenu.onSwipe
if display_mode == "mosaic_image" or display_mode == "mosaic_text" then -- mosaic mode
-- Replace some other original methods with those from our MosaicMenu
@ -534,7 +531,6 @@ local function _FileManagerHistory_updateItemTable(self)
local CoverMenu = require("covermenu")
hist_menu.updateItems = CoverMenu.updateItems
hist_menu.onCloseWidget = CoverMenu.onCloseWidget
hist_menu.onSwipe = CoverMenu.onSwipe
-- Also replace original onMenuHold (it will use original method, so remember it)
hist_menu.onMenuHold_orig = hist_menu.onMenuHold
hist_menu.onMenuHold = CoverMenu.onHistoryMenuHold

@ -435,6 +435,18 @@ function DoubleKeyValuePage:onSwipe(arg, ges_ev)
elseif ges_ev.direction == "east" then
self:prevPage()
return true
elseif ges_ev.direction == "south" then
-- Allow easier closing with swipe down
self:onClose()
elseif ges_ev.direction == "north" then
-- no use for now
do end -- luacheck: ignore 541
else -- diagonal swipe
-- trigger full refresh
UIManager:setDirty(nil, "full")
-- a long diagonal swipe may also be used for taking a screenshot,
-- so let it propagate
return false
end
end

@ -5,6 +5,7 @@ local Device = require("device")
local Font = require("ui/font")
local FrameContainer = require("ui/widget/container/framecontainer")
local Geom = require("ui/geometry")
local GestureRange = require("ui/gesturerange")
local HorizontalGroup = require("ui/widget/horizontalgroup")
local HorizontalSpan = require("ui/widget/horizontalspan")
local InputContainer = require("ui/widget/container/inputcontainer")
@ -61,6 +62,14 @@ function ReaderProgress:init()
seqtext = "any key", doc = "close dialog" }
}
end
if Device:isTouchDevice() then
self.ges_events.Swipe = {
GestureRange:new{
ges = "swipe",
range = function() return self.dimen end,
}
}
end
self[1] = FrameContainer:new{
width = self.width,
height = self.height,
@ -488,6 +497,22 @@ function ReaderProgress:onAnyKeyPressed()
return self:onClose()
end
function ReaderProgress:onSwipe(arg, ges_ev)
if ges_ev.direction == "south" then
-- Allow easier closing with swipe up/down
self:onClose()
elseif ges_ev.direction == "east" or ges_ev.direction == "west" or ges_ev.direction == "north" then
-- no use for now
do end -- luacheck: ignore 541
else -- diagonal swipe
-- trigger full refresh
UIManager:setDirty(nil, "full")
-- a long diagonal swipe may also be used for taking a screenshot,
-- so let it propagate
return false
end
end
function ReaderProgress:onClose()
UIManager:close(self)
return true

Loading…
Cancel
Save