Battery stats plugin: tidy up, single page (#8491)

KeyValuePage: add a 'single_page' option to force
showing all items on a single page.
pull/8498/head
zwim 2 years ago committed by GitHub
parent 6a01abb52c
commit ef4d88ccd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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

@ -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)

Loading…
Cancel
Save