mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
* 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.
76 lines
2.1 KiB
Lua
76 lines
2.1 KiB
Lua
local BasePowerD = require("device/generic/powerd")
|
|
local _, android = pcall(require, "android")
|
|
|
|
local AndroidPowerD = BasePowerD:new{
|
|
fl_min = 0,
|
|
fl_max = 100,
|
|
}
|
|
|
|
function AndroidPowerD:frontlightIntensityHW()
|
|
return math.floor(android.getScreenBrightness() / self.bright_diff * self.fl_max)
|
|
end
|
|
|
|
function AndroidPowerD:setIntensityHW(intensity)
|
|
-- if frontlight switch was toggled of, turn it on
|
|
android.enableFrontlightSwitch()
|
|
|
|
self.fl_intensity = intensity
|
|
android.setScreenBrightness(math.floor(intensity * self.bright_diff / self.fl_max))
|
|
self:_decideFrontlightState()
|
|
end
|
|
|
|
function AndroidPowerD:init()
|
|
local min_bright = android.getScreenMinBrightness()
|
|
self.bright_diff = android.getScreenMaxBrightness() - min_bright
|
|
|
|
-- if necessary scale fl_min:
|
|
-- do not use fl_min==0 if getScreenMinBrightness!=0,
|
|
-- because intenstiy==0 would mean to use system intensity
|
|
if min_bright ~= self.fl_min then
|
|
self.fl_min = math.ceil(min_bright * self.bright_diff / self.fl_max)
|
|
end
|
|
|
|
if self.device:hasNaturalLight() then
|
|
self.fl_warmth_min = android.getScreenMinWarmth()
|
|
self.fl_warmth_max = android.getScreenMaxWarmth()
|
|
self.warm_diff = self.fl_warmth_max - self.fl_warmth_min
|
|
end
|
|
end
|
|
|
|
function AndroidPowerD:setWarmthHW(warmth)
|
|
android.setScreenWarmth(warmth)
|
|
end
|
|
|
|
function AndroidPowerD:frontlightWarmthHW()
|
|
return android.getScreenWarmth() * self.warm_diff
|
|
end
|
|
|
|
function AndroidPowerD:getCapacityHW()
|
|
return android.getBatteryLevel()
|
|
end
|
|
|
|
function AndroidPowerD:isChargingHW()
|
|
return android.isCharging()
|
|
end
|
|
|
|
function AndroidPowerD:turnOffFrontlightHW()
|
|
if not self:isFrontlightOnHW() then
|
|
return
|
|
end
|
|
android.setScreenBrightness(self.fl_min)
|
|
end
|
|
|
|
function AndroidPowerD:turnOnFrontlightHW(done_callback)
|
|
if self:isFrontlightOn() and self:isFrontlightOnHW() then
|
|
return
|
|
end
|
|
-- on devices with a software frontlight switch (e.g Tolinos), enable it
|
|
android.enableFrontlightSwitch()
|
|
|
|
android.setScreenBrightness(math.floor(self.fl_intensity * self.bright_diff / self.fl_max))
|
|
|
|
return false
|
|
end
|
|
|
|
return AndroidPowerD
|