From 66e8087c66791e381feb59051a0f89660bd89628 Mon Sep 17 00:00:00 2001 From: zwim <36999612+zwim@users.noreply.github.com> Date: Tue, 25 Aug 2020 14:42:39 +0200 Subject: [PATCH] [android]: fix backlight toggle (#6520) * check on startup if frontlight can be changed. * Init fl_min if necessary not to use intensity==0 --- frontend/device/android/powerd.lua | 39 ++++++++++++++++++++++++++++++ frontend/device/kobo/powerd.lua | 1 + platform/android/luajit-launcher | 2 +- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/frontend/device/android/powerd.lua b/frontend/device/android/powerd.lua index 9b3d402cc..00f043844 100644 --- a/frontend/device/android/powerd.lua +++ b/frontend/device/android/powerd.lua @@ -6,17 +6,37 @@ local AndroidPowerD = BasePowerD:new{ fl_max = 100, } +-- Let the footer know of the change +local function broadcastLightChanges() + if package.loaded["ui/uimanager"] ~= nil then + local Event = require("ui/event") + local UIManager = require("ui/uimanager") + UIManager:broadcastEvent(Event:new("FrontlightStateChanged")) + end +end + 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)) end function AndroidPowerD:init() self.bright_diff = android:getScreenMaxBrightness() - android:getScreenMinBrightness() + + -- if necessary scale fl_min: + -- do not use fl_min==0 if getScreenMinBrightness!=0, + -- because intenstiy==0 would mean to use system intensity + if android:getScreenMinBrightness() ~= self.fl_min then + self.fl_min = math.ceil(android:getScreenMinBrightness() * self.bright_diff / self.fl_max) + end + if self.device:hasNaturalLight() then self.warm_diff = android:getScreenMaxWarmth() - android:getScreenMinWarmth() self.fl_warmth = self:getWarmth() @@ -42,4 +62,23 @@ function AndroidPowerD:isChargingHW() return android.isCharging() end +function AndroidPowerD:turnOffFrontlightHW() + if not self:isFrontlightOnHW() then + return + end + android.setScreenBrightness(self.fl_min) + self.is_fl_on = false + broadcastLightChanges() +end + +function AndroidPowerD:turnOnFrontlightHW() + if self:isFrontlightOn() and self:isFrontlightOnHW() then + return + end + android.setScreenBrightness(math.floor(self.fl_intensity * self.bright_diff / self.fl_max)) + + self.is_fl_on = true + broadcastLightChanges() +end + return AndroidPowerD diff --git a/frontend/device/kobo/powerd.lua b/frontend/device/kobo/powerd.lua index 361de610f..a80a8e1b8 100644 --- a/frontend/device/kobo/powerd.lua +++ b/frontend/device/kobo/powerd.lua @@ -348,6 +348,7 @@ function KoboPowerD:turnOffFrontlightHW() UIManager:broadcastEvent(Event:new("FrontlightStateChanged")) end end + function KoboPowerD:turnOnFrontlightHW() -- NOTE: Insane workaround for the first toggle after a startup with the FL off. -- The light is actually off, but hw_intensity couldn't have been set to a sane value because of a number of interactions. diff --git a/platform/android/luajit-launcher b/platform/android/luajit-launcher index eaa5cff5a..8d0ebd894 160000 --- a/platform/android/luajit-launcher +++ b/platform/android/luajit-launcher @@ -1 +1 @@ -Subproject commit eaa5cff5a0b0162e870792489e70434c0541ee93 +Subproject commit 8d0ebd894561bd6d9671f74646479e748208dc28