2
0
mirror of https://github.com/koreader/koreader synced 2024-11-10 01:10:34 +00:00
koreader/frontend/device/sdl/powerd.lua
NiLuJe 9af3e95d9d Kindle: Fix a smattering of frontlight bugs
* afterResume had *two* different implementations, so the historical one
  that handled frontlight fixups no longer ran
  (regression since #10426)
* isFrontlightOn was completely broken, for a couple of reasons:
  * There was no is isFrontlightOnHW implementation, so when it ran, it
    mostly always thought the frontlight was on, because
    self.fl_intensity doesn't change on toggle off.
  * _decideFrontlightState was never called on Kindle,
    so isFrontlightOnHW was never really called, making isFrontlightOn
    completely useless. Call it in setIntensityHW's coda, as it ought to
    be. And properly document that.

Generic *was* calling _decideFrontlightState is setIntensity, but
*before* actually setting the frontlight, which makes no goddamn sense,
so get rid of that, too.

* Also fix frontlight toggle notifications (regression since #10305)

TL;DR: The PowerD API being a mess strikes again.
2023-11-25 20:53:36 +01:00

54 lines
1.2 KiB
Lua

local BasePowerD = require("device/generic/powerd")
local SDL = require("ffi/SDL2_0")
local SDLPowerD = BasePowerD:new{
-- these values are just used on the emulator
hw_intensity = 50,
fl_min = 0,
fl_max = 100,
fl_warmth = 50,
fl_warmth_min = 0,
fl_warmth_max = 100,
}
function SDLPowerD:frontlightIntensityHW()
return self.hw_intensity
end
function SDLPowerD:setIntensityHW(intensity)
require("logger").info("set brightness to", intensity)
self.hw_intensity = intensity or self.hw_intensity
self:_decideFrontlightState()
end
function SDLPowerD:frontlightWarmthHW()
return self.fl_warmth
end
function SDLPowerD:getCapacityHW()
local _, _, _, percent = SDL.getPowerInfo()
-- -1 looks a bit odd compared to 0
if percent == -1 then return 0 end
return percent
end
function SDLPowerD:isChargingHW()
local ok, charging = SDL.getPowerInfo()
if ok then return charging end
return false
end
function SDLPowerD:beforeSuspend()
-- Inhibit user input and emit the Suspend event.
self.device:_beforeSuspend()
end
function SDLPowerD:afterResume()
self:invalidateCapacityCache()
-- Restore user input and emit the Resume event.
self.device:_afterResume()
end
return SDLPowerD