mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Merge pull request #1997 from koreader/houqp-master
progressbar(fix): persist progressbar visibility
This commit is contained in:
2
base
2
base
Submodule base updated: afaf36bc7a...88aa05b664
@@ -18,9 +18,23 @@ local _ = require("gettext")
|
||||
local util = require("util")
|
||||
|
||||
|
||||
local MODE = {
|
||||
off = 0,
|
||||
page_progress = 1,
|
||||
time = 2,
|
||||
pages_left = 3,
|
||||
battery = 4,
|
||||
percentage = 5,
|
||||
book_time_to_read = 6,
|
||||
chapter_time_to_read = 7,
|
||||
}
|
||||
local MODE_INDEX = {}
|
||||
for k,v in pairs(MODE) do
|
||||
MODE_INDEX[v] = k
|
||||
end
|
||||
|
||||
local ReaderFooter = InputContainer:new{
|
||||
mode = 1,
|
||||
visible = true,
|
||||
mode = MODE.page_progress,
|
||||
pageno = nil,
|
||||
pages = nil,
|
||||
toc_level = 0,
|
||||
@@ -67,7 +81,6 @@ function ReaderFooter:init()
|
||||
face = Font:getFace(self.text_font_face, self.text_font_size),
|
||||
}
|
||||
self.text_width = self.progress_text:getSize().w + self.text_left_margin
|
||||
self:applyFooterMode()
|
||||
self.progress_bar = ProgressWidget:new{
|
||||
width = nil, -- width will be updated in self:resetLayout()
|
||||
height = self.bar_height,
|
||||
@@ -101,7 +114,8 @@ function ReaderFooter:init()
|
||||
}
|
||||
}
|
||||
|
||||
self.mode = G_reader_settings:readSetting("reader_footer_mode") or self.mode
|
||||
self:applyFooterMode(
|
||||
G_reader_settings:readSetting("reader_footer_mode") or self.mode)
|
||||
self:resetLayout()
|
||||
|
||||
if self.settings.auto_refresh_time then
|
||||
@@ -328,21 +342,23 @@ function ReaderFooter:updateFooterText()
|
||||
end
|
||||
self.progress_text:setText(table.concat(info, " | "))
|
||||
else
|
||||
local info = ""
|
||||
if self.mode == 1 then
|
||||
local info
|
||||
if self.mode == MODE.page_progress then
|
||||
info = self:getProgressInfo()
|
||||
elseif self.mode == 2 then
|
||||
elseif self.mode == MODE.time then
|
||||
info = self:getTimeInfo()
|
||||
elseif self.mode == 3 then
|
||||
elseif self.mode == MODE.pages_left then
|
||||
info = self:getNextChapterInfo()
|
||||
elseif self.mode == 4 then
|
||||
elseif self.mode == MODE.battery then
|
||||
info = self:getBatteryInfo()
|
||||
elseif self.mode == 5 then
|
||||
elseif self.mode == MODE.percentage then
|
||||
info = self:getProgressPercentage()
|
||||
elseif self.mode == 6 then
|
||||
elseif self.mode == MODE.book_time_to_read then
|
||||
info = self:getBookTimeToRead()
|
||||
elseif self.mode == 7 then
|
||||
elseif self.mode == MODE.chapter_time_to_read then
|
||||
info = self:getChapterTimeToRead()
|
||||
else
|
||||
info = ""
|
||||
end
|
||||
self.progress_text:setText(info)
|
||||
end
|
||||
@@ -384,16 +400,12 @@ function ReaderFooter:applyFooterMode(mode)
|
||||
-- 6 for from statistics book time to read
|
||||
-- 7 for from statistics chapter time to read
|
||||
if mode ~= nil then self.mode = mode end
|
||||
if self.mode == 0 then
|
||||
self.view.footer_visible = false
|
||||
else
|
||||
self.view.footer_visible = true
|
||||
end
|
||||
self.view.footer_visible = (self.mode ~= MODE.off)
|
||||
end
|
||||
|
||||
function ReaderFooter:onEnterFlippingMode()
|
||||
self.orig_mode = self.mode
|
||||
self:applyFooterMode(1)
|
||||
self:applyFooterMode(MODE.page_progress)
|
||||
end
|
||||
|
||||
function ReaderFooter:onExitFlippingMode()
|
||||
@@ -410,30 +422,24 @@ function ReaderFooter:onTapFooter(arg, ges)
|
||||
self.ui:handleEvent(Event:new("GotoPercentage", percentage))
|
||||
end
|
||||
else
|
||||
self.mode = (self.mode + 1) % 8
|
||||
if self.settings.all_at_once and (self.mode > 1) then
|
||||
self.mode = 0
|
||||
end
|
||||
if (self.mode == 1) and not self.settings.page_progress then
|
||||
self.mode = 2
|
||||
end
|
||||
if (self.mode == 2) and not self.settings.time then
|
||||
self.mode = 3
|
||||
end
|
||||
if (self.mode == 3) and not self.settings.pages_left then
|
||||
self.mode = 4
|
||||
end
|
||||
if (self.mode == 4) and not self.settings.battery then
|
||||
self.mode = 5
|
||||
end
|
||||
if (self.mode == 5) and not self.settings.percentage then
|
||||
self.mode = 6
|
||||
end
|
||||
if (self.mode == 6) and not self.settings.book_time_to_read then
|
||||
self.mode = 7
|
||||
end
|
||||
if (self.mode == 7) and not self.settings.chapter_time_to_read then
|
||||
self.mode = 0
|
||||
if self.settings.all_at_once then
|
||||
if self.mode >= 1 then
|
||||
self.mode = MODE.off
|
||||
else
|
||||
self.mode = MODE.page_progress
|
||||
end
|
||||
else
|
||||
self.mode = (self.mode + 1) % 8
|
||||
for i, m in ipairs(MODE_INDEX) do
|
||||
if self.mode == MODE.off then break end
|
||||
if self.mode == i then
|
||||
if self.settings[m] then
|
||||
break
|
||||
else
|
||||
self.mode = (self.mode + 1) % 8
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self:applyFooterMode()
|
||||
G_reader_settings:saveSetting("reader_footer_mode", self.mode)
|
||||
@@ -443,13 +449,13 @@ function ReaderFooter:onTapFooter(arg, ges)
|
||||
end
|
||||
|
||||
function ReaderFooter:onHoldFooter(arg, ges)
|
||||
if self.mode == 0 then return end
|
||||
if self.mode == MODE.off then return end
|
||||
self.ui:handleEvent(Event:new("ShowGotoDialog"))
|
||||
return true
|
||||
end
|
||||
|
||||
function ReaderFooter:onSetStatusLine(status_line)
|
||||
self.view.footer_visible = status_line == 1 and true or false
|
||||
self.view.footer_visible = (status_line == 1)
|
||||
self.ui.document:setStatusLineProp(status_line)
|
||||
self.ui:handleEvent(Event:new("UpdatePos"))
|
||||
end
|
||||
|
||||
@@ -94,7 +94,6 @@ function ReaderView:addWidgets()
|
||||
self.footer = ReaderFooter:new{
|
||||
view = self,
|
||||
ui = self.ui,
|
||||
visible = self.footer_visible,
|
||||
}
|
||||
self.flipping = ReaderFlipping:new{
|
||||
view = self,
|
||||
@@ -644,7 +643,9 @@ function ReaderView:onReadSettings(config)
|
||||
self.state.gamma = config:readSetting("gamma") or DGLOBALGAMMA
|
||||
local full_screen = config:readSetting("kopt_full_screen") or self.document.configurable.full_screen
|
||||
local status_line = config:readSetting("copt_status_line") or self.document.configurable.status_line
|
||||
self.footer_visible = (full_screen == 0 or status_line == 1) and true or false
|
||||
if full_screen == 0 or status_line == 0 then
|
||||
self.footer_visible = false
|
||||
end
|
||||
self:resetLayout()
|
||||
local page_scroll = config:readSetting("kopt_page_scroll") or self.document.configurable.page_scroll
|
||||
self.page_scroll = page_scroll == 1 and true or false
|
||||
|
||||
1
kodev
1
kodev
@@ -13,6 +13,7 @@ function assert_ret_zero {
|
||||
|
||||
function setup_env {
|
||||
files=`ls -d ./koreader-emulator-*/koreader`
|
||||
assert_ret_zero $? "Emulator not found, please build it first."
|
||||
export EMU_DIR=${files[0]}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,67 @@ describe("Readerfooter module", function()
|
||||
})
|
||||
end)
|
||||
|
||||
it("should setup footer as visible", function()
|
||||
G_reader_settings:saveSetting("reader_footer_mode", 1)
|
||||
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
||||
purgeDir(DocSettings:getSidecarDir(sample_pdf))
|
||||
os.remove(DocSettings:getHistoryPath(sample_pdf))
|
||||
|
||||
local readerui = ReaderUI:new{
|
||||
document = DocumentRegistry:openDocument(sample_pdf),
|
||||
}
|
||||
assert.is.same(true, readerui.view.footer_visible)
|
||||
G_reader_settings:delSetting("reader_footer_mode")
|
||||
end)
|
||||
|
||||
it("should setup footer as invisible in full screen mode", function()
|
||||
G_reader_settings:saveSetting("reader_footer_mode", 1)
|
||||
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
||||
purgeDir(DocSettings:getSidecarDir(sample_pdf))
|
||||
os.remove(DocSettings:getHistoryPath(sample_pdf))
|
||||
local cfg = DocSettings:open(sample_pdf)
|
||||
cfg:saveSetting("kopt_full_screen", 0)
|
||||
cfg:flush()
|
||||
|
||||
local readerui = ReaderUI:new{
|
||||
document = DocumentRegistry:openDocument(sample_pdf),
|
||||
}
|
||||
assert.is.same(false, readerui.view.footer_visible)
|
||||
G_reader_settings:delSetting("reader_footer_mode")
|
||||
end)
|
||||
|
||||
it("should setup footer as visible in mini progress bar mode", function()
|
||||
G_reader_settings:saveSetting("reader_footer_mode", 1)
|
||||
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
||||
purgeDir(DocSettings:getSidecarDir(sample_pdf))
|
||||
os.remove(DocSettings:getHistoryPath(sample_pdf))
|
||||
local cfg = DocSettings:open(sample_pdf)
|
||||
cfg:saveSetting("kopt_full_screen", 0)
|
||||
cfg:flush()
|
||||
|
||||
local readerui = ReaderUI:new{
|
||||
document = DocumentRegistry:openDocument(sample_pdf),
|
||||
}
|
||||
assert.is.same(false, readerui.view.footer_visible)
|
||||
G_reader_settings:delSetting("reader_footer_mode")
|
||||
end)
|
||||
|
||||
it("should setup footer as invisible", function()
|
||||
G_reader_settings:saveSetting("reader_footer_mode", 1)
|
||||
local sample_epub = "spec/front/unit/data/juliet.epub"
|
||||
purgeDir(DocSettings:getSidecarDir(sample_epub))
|
||||
os.remove(DocSettings:getHistoryPath(sample_epub))
|
||||
local cfg = DocSettings:open(sample_epub)
|
||||
cfg:saveSetting("copt_status_line", 1)
|
||||
cfg:flush()
|
||||
|
||||
local readerui = ReaderUI:new{
|
||||
document = DocumentRegistry:openDocument(sample_epub),
|
||||
}
|
||||
assert.is.same(true, readerui.view.footer_visible)
|
||||
G_reader_settings:delSetting("reader_footer_mode")
|
||||
end)
|
||||
|
||||
it("should setup footer for epub without error", function()
|
||||
local sample_epub = "spec/front/unit/data/juliet.epub"
|
||||
purgeDir(DocSettings:getSidecarDir(sample_epub))
|
||||
@@ -100,6 +161,41 @@ describe("Readerfooter module", function()
|
||||
assert.are.same('TC: na', footer.progress_text.text)
|
||||
end)
|
||||
|
||||
it("should rotate through different modes", function()
|
||||
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
||||
local readerui = ReaderUI:new{
|
||||
document = DocumentRegistry:openDocument(sample_pdf),
|
||||
}
|
||||
local footer = readerui.view.footer
|
||||
footer.settings.all_at_once = false
|
||||
footer.mode = 0
|
||||
footer:onTapFooter()
|
||||
assert.is.same(1, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(2, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(3, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(4, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(5, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(6, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(7, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(0, footer.mode)
|
||||
|
||||
footer.settings.all_at_once = true
|
||||
footer.mode = 5
|
||||
footer:onTapFooter()
|
||||
assert.is.same(0, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(1, footer.mode)
|
||||
footer:onTapFooter()
|
||||
assert.is.same(0, footer.mode)
|
||||
end)
|
||||
|
||||
it("should pick up screen resize in resetLayout", function()
|
||||
local sample_pdf = "spec/front/unit/data/2col.pdf"
|
||||
purgeDir(DocSettings:getSidecarDir(sample_pdf))
|
||||
|
||||
@@ -88,6 +88,8 @@ describe("ReaderLink module", function()
|
||||
zoom = 0.9501187648456056456,
|
||||
},
|
||||
}
|
||||
-- disable footer
|
||||
G_reader_settings:saveSetting("reader_footer_mode", 0)
|
||||
local readerui = ReaderUI:new{
|
||||
document = DocumentRegistry:openDocument(sample_pdf),
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ describe("ProgressWidget widget", function()
|
||||
Screen = require("device").screen
|
||||
end)
|
||||
|
||||
it("should not crash with nil self.last #ok", function()
|
||||
it("should not crash with nil self.last", function()
|
||||
local progress = ProgressWidget:new{
|
||||
width = 100,
|
||||
height = 50,
|
||||
|
||||
Reference in New Issue
Block a user