Several improvements of AutoFrontlight plugin and enable it by default (#2975)

* Force refresh when kindle is out of screensaver or usb is unpluged.

* Improve AutoFrontlight

* More plugins sub menu

* Last brightness should always be updated

* Finish autofrontlight improvement and enable it by default.

* More tets

* onFlushSettings

* MenuSorter can now correctly sort sub menus
This commit is contained in:
Hzj_jie
2017-06-24 00:55:31 -07:00
committed by Frans de Jonge
parent 808766b7f3
commit 970f2e7306
8 changed files with 208 additions and 57 deletions

View File

@@ -5,54 +5,78 @@ if not Device:isKindle() or
return { disabled = true, }
end
local ConfirmBox = require("ui/widget/confirmbox")
local DataStorage = require("datastorage")
local LuaSettings = require("luasettings")
local UIManager = require("ui/uimanager")
local WidgetContainer = require("ui/widget/container/widgetcontainer")
local logger = require("logger")
local _ = require("gettext")
local T = require("ffi/util").template
local AutoFrontlight = {
settings = LuaSettings:open(DataStorage:getSettingsDir() .. "/autofrontlight.lua"),
settings_id = 0,
enabled = false,
last_brightness = -1,
}
function AutoFrontlight:_schedule()
function AutoFrontlight:_schedule(settings_id)
if not self.enabled then
logger.dbg("AutoFrontlight:_schedule() is disabled")
return
end
local settings_id = self.settings_id
logger.dbg("AutoFrontlight:_schedule() @ ", os.time(), ", it should be executed at ", os.time() + 1)
UIManager:scheduleIn(1, function()
self:_action(settings_id)
self:_schedule(self.settings_id)
end)
end
function AutoFrontlight:_action(settings_id)
if settings_id ~= self.settings_id then
logger.dbg("AutoFrontlight:_action(): registered settings_id ",
logger.dbg("AutoFrontlight:_schedule(): registered settings_id ",
settings_id,
" does not equal to current one ",
self.settings_id)
return
end
logger.dbg("AutoFrontlight:_schedule() starts with settings_id ", settings_id)
self:_action()
logger.dbg("AutoFrontlight:_schedule() @ ", os.time(), ", it should be executed at ", os.time() + 2)
UIManager:scheduleIn(2, function()
self:_schedule(settings_id)
end)
end
function AutoFrontlight:_action()
logger.dbg("AutoFrontlight:_action() @ ", os.time())
if Device:ambientBrightnessLevel() <= 1 then
local current_level = Device:ambientBrightnessLevel()
logger.dbg("AutoFrontlight:_action(): Retrieved ambient brightness level: ", current_level)
if self.last_brightness == current_level then
logger.dbg("AutoFrontlight:_action(): recorded brightness is same as current level ",
self.last_brightness)
return
end
if current_level <= 1 then
logger.dbg("AutoFrontlight: going to turn on frontlight")
Device:getPowerDevice():turnOnFrontlight()
else
elseif current_level >= 3 then
logger.dbg("AutoFrontlight: going to turn off frontlight")
Device:getPowerDevice():turnOffFrontlight()
end
self.last_brightness = current_level
end
function AutoFrontlight:init()
self.enabled = not self.settings:nilOrFalse("enable")
logger.dbg("AutoFrontlight:init() self.enabled: ", self.enabled)
self:_schedule()
self.enabled = self.settings:nilOrTrue("enable")
self.settings_id = self.settings_id + 1
logger.dbg("AutoFrontlight:init() self.enabled: ", self.enabled, " with id ", self.settings_id)
self:_schedule(self.settings_id)
end
function AutoFrontlight:flipSetting()
self.settings:flipNilOrTrue("enable")
self:init()
end
function AutoFrontlight:onFlushSettings()
self.settings:flush()
end
AutoFrontlight:init()
@@ -61,4 +85,42 @@ local AutoFrontlightWidget = WidgetContainer:new{
name = "AutoFrontlight",
}
function AutoFrontlightWidget:init()
-- self.ui and self.ui.menu are nil in unittests.
if self.ui ~= nil and self.ui.menu ~= nil then
self.ui.menu:registerToMainMenu(self)
end
end
function AutoFrontlightWidget:flipSetting()
AutoFrontlight:flipSetting()
end
-- For test only.
function AutoFrontlightWidget:deprecateLastTask()
logger.dbg("AutoFrontlightWidget:deprecateLastTask() @ ", AutoFrontlight.settings_id)
AutoFrontlight.settings_id = AutoFrontlight.settings_id + 1
end
function AutoFrontlightWidget:addToMainMenu(menu_items)
menu_items.auto_frontlight = {
text = _("Auto frontlight"),
callback = function()
UIManager:show(ConfirmBox:new{
text = T(_("Auto frontlight detects the brightness of the environment and automatically turn on and off the frontlight.\nFrontlight will be turned off to save battery in bright environment, and turned on in dark environment.\nDo you want to %1 it?"),
AutoFrontlight.enabled and _("disable") or _("enable")),
ok_text = AutoFrontlight.enabled and _("Disable") or _("Enable"),
ok_callback = function()
self:flipSetting()
end
})
end,
checked_func = function() return AutoFrontlight.enabled end,
}
end
function AutoFrontlightWidget:onFlushSettings()
AutoFrontlight:onFlushSettings()
end
return AutoFrontlightWidget