diff --git a/frontend/apps/reader/modules/readerfrontlight.lua b/frontend/apps/reader/modules/readerfrontlight.lua index d1cbda5c9..893151304 100644 --- a/frontend/apps/reader/modules/readerfrontlight.lua +++ b/frontend/apps/reader/modules/readerfrontlight.lua @@ -179,7 +179,9 @@ end function ReaderFrontLight:onShowFlDialog() local FrontLightWidget = require("ui/widget/frontlightwidget") - UIManager:show(FrontLightWidget:new{}) + UIManager:show(FrontLightWidget:new{ + use_system_fl = Device:hasLightLevelFallback() + }) end function ReaderFrontLight:close() diff --git a/frontend/apps/reader/modules/readergesture.lua b/frontend/apps/reader/modules/readergesture.lua index 86ff904d6..84337961b 100644 --- a/frontend/apps/reader/modules/readergesture.lua +++ b/frontend/apps/reader/modules/readergesture.lua @@ -8,6 +8,7 @@ local InfoMessage = require("ui/widget/infomessage") local InputContainer = require("ui/widget/container/inputcontainer") local InputDialog = require("ui/widget/inputdialog") local LuaData = require("luadata") +local Notification = require("ui/widget/notification") local Screen = require("device").screen local UIManager = require("ui/uimanager") local T = require("ffi/util").template @@ -1196,6 +1197,10 @@ function ReaderGesture:registerGesture(ges, action, ges_type, zone, overrides, d }) end +local function lightFrontlight() + return Device:hasLightLevelFallback() and G_reader_settings:nilOrTrue("light_fallback") +end + function ReaderGesture:gestureAction(action, ges) if action == "ignore" then return @@ -1302,6 +1307,14 @@ function ReaderGesture:gestureAction(action, ges) self.ui:handleEvent(Event:new("ShowFlDialog")) end elseif action == "increase_frontlight" then + -- when using frontlight system settings + if lightFrontlight() then + UIManager:show(Notification:new{ + text = _("Frontlight controlled by system settings."), + timeout = 2.5, + }) + return true + end if self.ges_mode == "gesture_fm" then local ReaderFrontLight = require("apps/reader/modules/readerfrontlight") ReaderFrontLight:onChangeFlIntensity(ges, 1) @@ -1309,6 +1322,14 @@ function ReaderGesture:gestureAction(action, ges) self.ui:handleEvent(Event:new("ChangeFlIntensity", ges, 1)) end elseif action == "decrease_frontlight" then + -- when using frontlight system settings + if lightFrontlight() then + UIManager:show(Notification:new{ + text = _("Frontlight controlled by system settings."), + timeout = 2.5, + }) + return true + end if self.ges_mode == "gesture_fm" then local ReaderFrontLight = require("apps/reader/modules/readerfrontlight") ReaderFrontLight:onChangeFlIntensity(ges, -1) @@ -1332,6 +1353,14 @@ function ReaderGesture:gestureAction(action, ges) elseif action == "toggle_bookmark" then self.ui:handleEvent(Event:new("ToggleBookmark")) elseif action == "toggle_frontlight" then + -- when using frontlight system settings + if lightFrontlight() then + UIManager:show(Notification:new{ + text = _("Frontlight controlled by system settings."), + timeout = 2.5, + }) + return true + end Device:getPowerDevice():toggleFrontlight() self:onShowFLOnOff() elseif action == "toggle_gsensor" then @@ -1490,7 +1519,6 @@ function ReaderGesture:pageUpdate(page) end function ReaderGesture:onShowFLOnOff() - local Notification = require("ui/widget/notification") local powerd = Device:getPowerDevice() local new_text if powerd.is_fl_on then @@ -1506,7 +1534,6 @@ function ReaderGesture:onShowFLOnOff() end function ReaderGesture:onGSensorToggle() - local Notification = require("ui/widget/notification") local new_text if G_reader_settings:isTrue("input_ignore_gsensor") then new_text = _("Accelerometer rotation events will now be ignored.") diff --git a/frontend/device/android/device.lua b/frontend/device/android/device.lua index 61e6be91a..4deee2c19 100644 --- a/frontend/device/android/device.lua +++ b/frontend/device/android/device.lua @@ -66,6 +66,7 @@ local Device = Generic:new{ hasEinkScreen = function() return android.isEink() end, hasColorScreen = function() return not android.isEink() end, hasFrontlight = yes, + hasLightLevelFallback = yes, canRestart = no, firmware_rev = android.app.activity.sdkVersion, display_dpi = android.lib.AConfiguration_getDensity(android.app.config), @@ -194,6 +195,12 @@ function Device:init() android.setVolumeKeysIgnored(true); end + -- check if we enable a custom light level for this activity + local last_value = G_reader_settings:readSetting("fl_last_level") + if type(last_value) == "number" and last_value >= 0 then + Device:setScreenBrightness(last_value) + end + Generic.init(self) end @@ -233,6 +240,10 @@ function Device:setViewport(x,y,w,h) self.screen:setViewport(viewport) end +function Device:setScreenBrightness(level) + android.setScreenBrightness(level) +end + function Device:toggleFullscreen() local api = android.app.activity.sdkVersion if api >= 19 then diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index c83b888e3..4c2e53128 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -27,6 +27,7 @@ local Device = { hasWifiManager = no, isTouchDevice = no, hasFrontlight = no, + hasLightLevelFallback = no, hasNaturalLight = no, -- FL warmth implementation specific to NTX boards (Kobo, Cervantes) hasNaturalLightMixer = no, -- Same, but only found on newer boards needsTouchScreenProbe = no, @@ -292,6 +293,9 @@ function Device:saveSettings() end -- Device specific method for toggling the GSensor function Device:toggleGSensor(toggle) end +-- Device specific method for set custom light levels +function Device:setScreenBrightness(level) end + --[[ prepare for application shutdown --]] diff --git a/frontend/ui/widget/frontlightwidget.lua b/frontend/ui/widget/frontlightwidget.lua index 064908206..ed6844e2d 100644 --- a/frontend/ui/widget/frontlightwidget.lua +++ b/frontend/ui/widget/frontlightwidget.lua @@ -31,9 +31,11 @@ local FrontLightWidget = InputContainer:new{ height = nil, -- This should stay active during natural light configuration is_always_active = true, + use_system_fl = false, } function FrontLightWidget:init() + self.light_fallback = self.use_system_fl and G_reader_settings:nilOrTrue("light_fallback") self.medium_font_face = Font:getFace("ffont") self.larger_font_face = Font:getFace("cfont") self.light_bar = {} @@ -76,7 +78,7 @@ function FrontLightWidget:init() margin = button_margin, padding = button_padding, bordersize = button_bordersize, - enabled = true, + enabled = not self.light_fallback, width = self.button_width, show_parent = self, } @@ -117,6 +119,7 @@ function FrontLightWidget:setProgress(num, step, num_warmth) local button_group_up = HorizontalGroup:new{ align = "center" } local fl_group = HorizontalGroup:new{ align = "center" } local vertical_group = VerticalGroup:new{ align = "center" } + self.fl_prog_button.enabled = not self.light_fallback local set_fl local enable_button_plus = true local enable_button_minus = true @@ -136,6 +139,14 @@ function FrontLightWidget:setProgress(num, step, num_warmth) else self.powerd:setIntensity(set_fl) end + + if not self.light_fallback and self.fl_cur >= 0 then + G_reader_settings:saveSetting("fl_last_level", self.fl_cur * 10) + elseif self.light_fallback then + G_reader_settings:saveSetting("fl_last_level", nil) + Device:setScreenBrightness(-1) + end + -- get back the real level (different from set_fl if untoggle) self.fl_cur = self.powerd:frontlightIntensity() -- and update our step_num with it for accurate progress bar @@ -176,7 +187,7 @@ function FrontLightWidget:setProgress(num, step, num_warmth) text = "-1", margin = Size.margin.small, radius = 0, - enabled = enable_button_minus, + enabled = enable_button_minus and not self.light_fallback, width = self.screen_width * 0.20, show_parent = self, callback = function() self:setProgress(self.fl_cur - 1, step) end, @@ -185,7 +196,7 @@ function FrontLightWidget:setProgress(num, step, num_warmth) text = "+1", margin = Size.margin.small, radius = 0, - enabled = enable_button_plus, + enabled = enable_button_plus and not self.light_fallback, width = self.screen_width * 0.20, show_parent = self, callback = function() self:setProgress(self.fl_cur + 1, step) end, @@ -200,7 +211,7 @@ function FrontLightWidget:setProgress(num, step, num_warmth) text = _("Min"), margin = Size.margin.small, radius = 0, - enabled = true, + enabled = not self.light_fallback, width = self.screen_width * 0.20, show_parent = self, callback = function() self:setProgress(self.fl_min+1, step) end, -- min is 1 (use toggle for 0) @@ -209,7 +220,7 @@ function FrontLightWidget:setProgress(num, step, num_warmth) text = _("Max"), margin = Size.margin.small, radius = 0, - enabled = true, + enabled = not self.light_fallback, width = self.screen_width * 0.20, show_parent = self, callback = function() self:setProgress(self.fl_max, step) end, @@ -218,7 +229,7 @@ function FrontLightWidget:setProgress(num, step, num_warmth) text = _("Toggle"), margin = Size.margin.small, radius = 0, - enabled = true, + enabled = not self.light_fallback, width = self.screen_width * 0.20, show_parent = self, callback = function() @@ -247,6 +258,20 @@ function FrontLightWidget:setProgress(num, step, num_warmth) -- widgets below. table.insert(vertical_group, text_br) end + local system_level_checkbutton + system_level_checkbutton = CheckButton:new{ + text = _("Use system settings"), + checked = self.light_fallback, + callback = function() + if system_level_checkbutton.checked then + self.light_fallback = false + else + self.light_fallback = true + end + G_reader_settings:saveSetting("light_fallback", self.light_fallback) + self:setProgress(self.fl_cur, step) + end, + } table.insert(button_group_up, button_table_up) table.insert(button_group_down, button_table_down) table.insert(vertical_group, padding_span) @@ -256,6 +281,10 @@ function FrontLightWidget:setProgress(num, step, num_warmth) table.insert(vertical_group, padding_span) table.insert(vertical_group, button_group_down) table.insert(vertical_group, padding_span) + if self.use_system_fl then + table.insert(vertical_group, system_level_checkbutton) + table.insert(vertical_group, padding_span) + end if self.natural_light then -- If the device supports natural light, add the widgets for 'warmth', -- as well as a 'Configure' button for devices *without* a mixer diff --git a/platform/android/luajit-launcher b/platform/android/luajit-launcher index 4c8319700..3750551c6 160000 --- a/platform/android/luajit-launcher +++ b/platform/android/luajit-launcher @@ -1 +1 @@ -Subproject commit 4c8319700f0b5dae5685df7c561edaa627f19189 +Subproject commit 3750551c6607aa5fa53c77a7095e1dba0b11237b