mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
Kindle: Log the suspend/wakeup source
We currently don't do anything with it, but this might help someone come up with fancier smartcover handling, like we do on Kobo... Simplify the fake events w/args checks: We can just hitcheck the table directly, no need for another hash Also catch ExitedSS on Kindle. And, again, dn't do anything with it ;p.
This commit is contained in:
@@ -145,17 +145,13 @@ local Input = {
|
||||
},
|
||||
|
||||
fake_event_set = {
|
||||
IntoSS = true, OutOfSS = true,
|
||||
IntoSS = true, OutOfSS = true, ExitingSS = true,
|
||||
UsbPlugIn = true, UsbPlugOut = true,
|
||||
Charging = true, NotCharging = true,
|
||||
WakeupFromSuspend = true, ReadyToSuspend = true,
|
||||
UsbDevicePlugIn = true, UsbDevicePlugOut = true,
|
||||
},
|
||||
-- Subset of fake_event_set for events that require passing a parameter along
|
||||
complex_fake_event_set = {
|
||||
UsbDevicePlugIn = true, UsbDevicePlugOut = true,
|
||||
},
|
||||
-- Crappy FIFO to forward parameters for those events to UIManager
|
||||
-- Crappy FIFO to forward parameters to UIManager for the subset of fake_event_set that require passing a parameter along
|
||||
fake_event_args = {
|
||||
UsbDevicePlugIn = {},
|
||||
UsbDevicePlugOut = {},
|
||||
@@ -246,8 +242,9 @@ function Input:init()
|
||||
end
|
||||
|
||||
-- set up fake event map
|
||||
self.event_map[10000] = "IntoSS" -- go into screen saver
|
||||
self.event_map[10001] = "OutOfSS" -- go out of screen saver
|
||||
self.event_map[10000] = "IntoSS" -- Requested to go into screen saver
|
||||
self.event_map[10001] = "OutOfSS" -- Requested to go out of screen saver
|
||||
self.event_map[10002] = "ExitingSS" -- Specific to Kindle, SS *actually* closed
|
||||
self.event_map[10010] = "UsbPlugIn"
|
||||
self.event_map[10011] = "UsbPlugOut"
|
||||
self.event_map[10020] = "Charging"
|
||||
@@ -618,7 +615,7 @@ function Input:handleKeyBoardEv(ev)
|
||||
-- So, we simply store it somewhere our handler can find and call it a day.
|
||||
-- And we use an array as a FIFO because we cannot guarantee that insertions and removals will interleave nicely.
|
||||
-- (This is all in the name of avoiding complexifying the common codepaths for events that should be few and far between).
|
||||
if self.complex_fake_event_set[keycode] then
|
||||
if self.fake_event_args[keycode] then
|
||||
table.insert(self.fake_event_args[keycode], ev.value)
|
||||
end
|
||||
return keycode
|
||||
@@ -708,6 +705,9 @@ function Input:handlePowerManagementOnlyEv(ev)
|
||||
end
|
||||
|
||||
if self.fake_event_set[keycode] then
|
||||
if self.fake_event_args[keycode] then
|
||||
table.insert(self.fake_event_args[keycode], ev.value)
|
||||
end
|
||||
return keycode
|
||||
end
|
||||
|
||||
|
||||
@@ -280,7 +280,18 @@ function Kindle:usbPlugIn()
|
||||
-- NOTE: If the device is put in USBNet mode before we even start, everything's peachy, though :).
|
||||
end
|
||||
|
||||
function Kindle:intoScreenSaver()
|
||||
-- Hopefully, the event sources are fairly portable...
|
||||
-- c.f., https://github.com/koreader/koreader/pull/11174#issuecomment-1830064445
|
||||
-- NOTE: There's no distinction between real button presses and powerd_test -p or lipc-set-prop -i com.lab126.powerd powerButton 1
|
||||
local POWERD_EVENT_SOURCES = {
|
||||
[1] = "BUTTON_WAKEUP", -- outOfScreenSaver 1
|
||||
[2] = "BUTTON_SUSPEND", -- goingToScreenSaver 2
|
||||
[4] = "HALL_SUSPEND", -- goingToScreenSaver 4
|
||||
[6] = "HALL_WAKEUP", -- outOfScreenSaver 6
|
||||
}
|
||||
|
||||
function Kindle:intoScreenSaver(source)
|
||||
logger.dbg("Kindle:intoScreenSaver via", POWERD_EVENT_SOURCES[source] or string.format("UNKNOWN_SUSPEND (%d)", source or -1))
|
||||
if not self.screen_saver_mode then
|
||||
if self:supportsScreensaver() then
|
||||
-- NOTE: Meaning this is not a SO device ;)
|
||||
@@ -304,7 +315,8 @@ function Kindle:intoScreenSaver()
|
||||
self.powerd:beforeSuspend()
|
||||
end
|
||||
|
||||
function Kindle:outofScreenSaver()
|
||||
function Kindle:outofScreenSaver(source)
|
||||
logger.dbg("Kindle:outofScreenSaver via", POWERD_EVENT_SOURCES[source] or string.format("UNKNOWN_WAKEUP (%d)", source or -1))
|
||||
if self.screen_saver_mode then
|
||||
if self:supportsScreensaver() then
|
||||
local Screensaver = require("ui/screensaver")
|
||||
@@ -357,6 +369,9 @@ function Kindle:outofScreenSaver()
|
||||
self.powerd:afterResume()
|
||||
end
|
||||
|
||||
-- On stock, there's a distinction between OutOfSS (which *requests* closing the SS) and ExitingSS, which fires once they're *actually* closed...
|
||||
function Kindle:exitingScreenSaver() end
|
||||
|
||||
function Kindle:usbPlugOut()
|
||||
-- NOTE: See usbPlugIn(), we don't have anything fancy to do here either.
|
||||
end
|
||||
@@ -382,14 +397,24 @@ function Kindle:UIManagerReady(uimgr)
|
||||
end
|
||||
|
||||
function Kindle:setEventHandlers(uimgr)
|
||||
-- These custom fake events *will* pass an argument...
|
||||
self.input.fake_event_args.IntoSS = {}
|
||||
self.input.fake_event_args.OutOfSS = {}
|
||||
|
||||
UIManager.event_handlers.Suspend = function()
|
||||
self.powerd:toggleSuspend()
|
||||
end
|
||||
UIManager.event_handlers.IntoSS = function()
|
||||
self:intoScreenSaver()
|
||||
UIManager.event_handlers.IntoSS = function(input_event)
|
||||
-- Retrieve the argument set by Input:handleKeyBoardEv
|
||||
local arg = table.remove(self.input.fake_event_args[input_event])
|
||||
self:intoScreenSaver(arg)
|
||||
end
|
||||
UIManager.event_handlers.OutOfSS = function()
|
||||
self:outofScreenSaver()
|
||||
UIManager.event_handlers.OutOfSS = function(input_event)
|
||||
local arg = table.remove(self.input.fake_event_args[input_event])
|
||||
self:outofScreenSaver(arg)
|
||||
end
|
||||
UIManager.event_handlers.ExitingSS = function()
|
||||
self:exitingScreenSaver()
|
||||
end
|
||||
UIManager.event_handlers.Charging = function()
|
||||
self:_beforeCharging()
|
||||
|
||||
Reference in New Issue
Block a user