diff --git a/frontend/apps/reader/modules/readerdevicestatus.lua b/frontend/apps/reader/modules/readerdevicestatus.lua index c53305d29..4910645bc 100644 --- a/frontend/apps/reader/modules/readerdevicestatus.lua +++ b/frontend/apps/reader/modules/readerdevicestatus.lua @@ -14,26 +14,38 @@ local ReaderDeviceStatus = InputContainer:new{ } function ReaderDeviceStatus:init() - self.has_battery = powerd:getCapacity() > 0 or powerd:isCharging() - if self.has_battery then + if Device:hasBattery() then self.battery_interval = G_reader_settings:readSetting("device_status_battery_interval") or 10 self.battery_threshold = G_reader_settings:readSetting("device_status_battery_threshold") or 20 + self.battery_threshold_high = G_reader_settings:readSetting("device_status_battery_threshold_high") or 100 self.checkLowBatteryLevel = function() + local is_charging = powerd:isCharging() local battery_capacity = powerd:getCapacity() - if powerd:isCharging() then - powerd:setDismissBatteryStatus(false) - elseif powerd:getDismissBatteryStatus() ~= true and battery_capacity <= self.battery_threshold then - powerd:setDismissBatteryStatus(true) - UIManager:show(ConfirmBox:new { - text = T(_("Low battery level: %1%\n\nDismiss low battery alarm?"), battery_capacity), - ok_text = _("Dismiss"), - dismissable = false, - cancel_callback = function() - powerd:setDismissBatteryStatus(false) - end, - }) - elseif powerd:getDismissBatteryStatus() and battery_capacity > self.battery_threshold then - powerd:setDismissBatteryStatus(false) + if powerd:getDismissBatteryStatus() == true then -- alerts dismissed + if (is_charging and battery_capacity <= self.battery_threshold_high) or + (not is_charging and battery_capacity > self.battery_threshold) then + powerd:setDismissBatteryStatus(false) + end + else + if is_charging and battery_capacity > self.battery_threshold_high then + UIManager:show(ConfirmBox:new { + text = T(_("High battery level: %1%\n\nDismiss battery level alert?"), battery_capacity), + ok_text = _("Dismiss"), + dismissable = false, + ok_callback = function() + powerd:setDismissBatteryStatus(true) + end, + }) + elseif not is_charging and battery_capacity <= self.battery_threshold then + UIManager:show(ConfirmBox:new { + text = T(_("Low battery level: %1%\n\nDismiss battery level alert?"), battery_capacity), + ok_text = _("Dismiss"), + dismissable = false, + ok_callback = function() + powerd:setDismissBatteryStatus(true) + end, + }) + end end UIManager:scheduleIn(self.battery_interval * 60, self.checkLowBatteryLevel) end @@ -101,10 +113,10 @@ function ReaderDeviceStatus:addToMainMenu(menu_items) text = _("Device status alerts"), sub_item_table = {}, } - if self.has_battery then + if Device:hasBattery() then table.insert(menu_items.device_status_alarm.sub_item_table, { - text = _("Low battery level"), + text = _("Battery level"), checked_func = function() return G_reader_settings:isTrue("device_status_battery_alarm") end, @@ -149,28 +161,44 @@ function ReaderDeviceStatus:addToMainMenu(menu_items) table.insert(menu_items.device_status_alarm.sub_item_table, { text_func = function() - return T(_("Threshold (%1%)"), self.battery_threshold) + return T(_("Thresholds (%1% – %2%)"), self.battery_threshold, self.battery_threshold_high) end, enabled_func = function() return G_reader_settings:isTrue("device_status_battery_alarm") end, keep_menu_open = true, callback = function(touchmenu_instance) - UIManager:show(SpinWidget:new{ - width = math.floor(Screen:getWidth() * 0.6), - value = self.battery_threshold, - value_min = 1, - value_max = 99, - default_value = 20, - value_hold_step = 5, - title_text = _("Battery alarm threshold"), - callback = function(spin) - self.battery_threshold = spin.value + local DoubleSpinWidget = require("/ui/widget/doublespinwidget") + local thresholds_widget = DoubleSpinWidget:new{ + title_text = _("Battery level alert thresholds"), + info_text = _([[ +Low level threshold is checked when the device is not charging. +High level threshold is checked when the device is charging.]]), + width = math.floor(Screen:getWidth() * 0.8), + left_text = _("Low"), + left_value = self.battery_threshold, + left_min = 1, + left_max = self.battery_threshold_high, + left_default = 20, + left_hold_step = 5, + right_text = _("High"), + right_value = self.battery_threshold_high, + right_min = self.battery_threshold, + right_max = 100, + right_default = 100, + right_hold_step = 5, + default_values = true, + callback = function(left_value, right_value) + if not left_value then return end -- "Use defaults" pressed + self.battery_threshold = left_value + self.battery_threshold_high = right_value G_reader_settings:saveSetting("device_status_battery_threshold", self.battery_threshold) + G_reader_settings:saveSetting("device_status_battery_threshold_high", self.battery_threshold_high) touchmenu_instance:updateItems() powerd:setDismissBatteryStatus(false) end, - }) + } + UIManager:show(thresholds_widget) end, separator = true, }) @@ -236,7 +264,7 @@ function ReaderDeviceStatus:addToMainMenu(menu_items) default_value = 100, value_step = 5, value_hold_step = 10, - title_text = _("Memory alarm threshold"), + title_text = _("Memory alert threshold"), callback = function(spin) self.memory_threshold = spin.value G_reader_settings:saveSetting("device_status_memory_threshold", self.memory_threshold)