From ef4d88ccd6f826bbc83b23f965fe8c0b2feaefc7 Mon Sep 17 00:00:00 2001 From: zwim <36999612+zwim@users.noreply.github.com> Date: Wed, 1 Dec 2021 12:39:48 +0100 Subject: [PATCH] Battery stats plugin: tidy up, single page (#8491) KeyValuePage: add a 'single_page' option to force showing all items on a single page. --- frontend/ui/widget/keyvaluepage.lua | 18 +++++++-- plugins/batterystat.koplugin/main.lua | 56 ++++++++++++--------------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/frontend/ui/widget/keyvaluepage.lua b/frontend/ui/widget/keyvaluepage.lua index bfae2c82f..c18d70b43 100644 --- a/frontend/ui/widget/keyvaluepage.lua +++ b/frontend/ui/widget/keyvaluepage.lua @@ -337,6 +337,7 @@ local KeyValuePage = InputContainer:new{ -- aligment of value when key or value overflows its reserved width (for -- now: 50%): "left" (stick to key), "right" (stick to scren right border) value_overflow_align = "left", + single_page = nil, -- show all items on one single page (and make them small) } function KeyValuePage:init() @@ -471,6 +472,10 @@ function KeyValuePage:init() dimen = self.inner_dimen:copy(), self.page_info, } + if self.single_page then + footer = nil + end + local page_return = BottomContainer:new{ dimen = self.inner_dimen:copy(), WidgetContainer:new{ @@ -495,11 +500,18 @@ function KeyValuePage:init() local available_height = self.inner_dimen.h - self.title_bar:getSize().h - Size.span.vertical_large -- for above page_info (as title_bar adds one itself) - - self.page_info:getSize().h + - (self.single_page and 0 or self.page_info:getSize().h) - 2*Size.line.thick -- account for possibly 2 separator lines added - self.items_per_page = G_reader_settings:readSetting("keyvalues_per_page") or self:getDefaultKeyValuesPerPage() + local force_items_per_page + if self.single_page then + force_items_per_page = math.max(#self.kv_pairs, + G_reader_settings:readSetting("keyvalues_per_page") or self:getDefaultKeyValuesPerPage()) + end + + self.items_per_page = force_items_per_page or + G_reader_settings:readSetting("keyvalues_per_page") or self:getDefaultKeyValuesPerPage() self.item_height = math.floor(available_height / self.items_per_page) -- Put half of the pixels lost by floor'ing between title and content local span_height = math.floor((available_height - (self.items_per_page * (self.item_height))) / 2) @@ -539,7 +551,7 @@ function KeyValuePage:init() margin = 0, bordersize = 0, background = Blitbuffer.COLOR_WHITE, - content + content, } end diff --git a/plugins/batterystat.koplugin/main.lua b/plugins/batterystat.koplugin/main.lua index d39134f8f..1774ac061 100644 --- a/plugins/batterystat.koplugin/main.lua +++ b/plugins/batterystat.koplugin/main.lua @@ -47,52 +47,50 @@ function Usage:append(state) self.time = self.time + os.difftime(curr.timestamp - state.timestamp) end -function Usage:minutes() - return self.time / 60 -end - -function Usage:hours() - return self:minutes() / 60 -end - -function Usage:percentagePerHour() +function Usage:percentageRate() if self.time == 0 then return 0 else - return self.percentage / self:hours() + return self.percentage / self.time end end -function Usage:remainingHours() - if self:percentagePerHour() == 0 then return "N/A" end +function Usage:remainingTime() + if self:percentageRate() == 0 then return "N/A" end local curr = State:new() - return curr.percentage / self:percentagePerHour() + return curr.percentage / self:percentageRate() end -function Usage:chargingHours() - if self:percentagePerHour() == 0 then return "N/A" end +function Usage:chargingTime() + if self:percentageRate() == 0 then return "N/A" end local curr = State:new() - return math.abs(curr.percentage - 100) / self:percentagePerHour() + return math.abs(curr.percentage - 100) / self:percentageRate() end local function shorten(number) if number == "N/A" then return _("N/A") end - return string.format("%.2f", number); + return string.format("%.2f%%", number) +end + +local function duration(number) + local duration_fmt = G_reader_settings:readSetting("duration_format", "classic") + return type(number) ~= "number" and number or + util.secondsToClockDuration(duration_fmt, number, true, true, true) end function Usage:dump(kv_pairs, id) - local name = id or _("Consumed %") - table.insert(kv_pairs, {INDENTATION .. name, shorten(self.percentage)}) - table.insert(kv_pairs, {INDENTATION .. _("Total time"), util.secondsToHClock(self.time, true, true)}) - table.insert(kv_pairs, {INDENTATION .. _("% per hour"), shorten(self:percentagePerHour())}) + local name = id or _("Consumed:") + table.insert(kv_pairs, {INDENTATION .. _("Total time:"), duration(self.time) }) + table.insert(kv_pairs, {INDENTATION .. name, shorten(self.percentage), "%"}) + table.insert(kv_pairs, {INDENTATION .. _("Change per hour:"), shorten(self:percentageRate())}) end function Usage:dumpRemaining(kv_pairs) - table.insert(kv_pairs, {INDENTATION .. _("Estimated remaining hours"), shorten(self:remainingHours())}) + table.insert(kv_pairs, {INDENTATION .. _("Estimated remaining time:"), duration(self:remainingTime())}) end function Usage:dumpCharging(kv_pairs) - table.insert(kv_pairs, {INDENTATION .. _("Estimated hours for charging"), shorten(self:chargingHours())}) + table.insert(kv_pairs, {INDENTATION .. _("Estimated time for charging:"), duration(self:chargingTime())}) end local BatteryStat = { @@ -201,14 +199,7 @@ function BatteryStat:showStatistics() self:accumulate() local kv_pairs = self:dump() kv_pairs[#kv_pairs].separator = true - table.insert(kv_pairs, {_("If you would like to reset the data,"), "", - callback = function() - UIManager:setDirty(self.kv_page, "fast") - UIManager:scheduleIn(0.1, function() - askResetData() - end) - end}) - table.insert(kv_pairs, {_("please tap here."), "", + table.insert(kv_pairs, {_("Tap to reset the data."), "", callback = function() UIManager:setDirty(self.kv_page, "fast") UIManager:scheduleIn(0.1, function() @@ -218,6 +209,7 @@ function BatteryStat:showStatistics() self.kv_page = KeyValuePage:new{ title = _("Battery statistics"), kv_pairs = kv_pairs, + single_page = true, } UIManager:show(self.kv_page) end @@ -256,7 +248,7 @@ function BatteryStat:dump() self.sleeping:dump(kv_pairs) self.sleeping:dumpRemaining(kv_pairs) table.insert(kv_pairs, {_("During last charge"), ""}) - self.charging:dump(kv_pairs, _("Charged %")) + self.charging:dump(kv_pairs, _("Charged:")) self.charging:dumpCharging(kv_pairs) table.insert(kv_pairs, {_("Since last charge"), ""}) self.discharging:dump(kv_pairs)