@ -1,6 +1,7 @@
local isAndroid , android = pcall ( require , " android " )
local Device = require ( " device " )
local Geom = require ( " ui/geometry " )
local ffi = require ( " ffi " )
local logger = require ( " logger " )
local _ = require ( " gettext " )
local Input = Device.input
@ -9,20 +10,19 @@ local T = require("ffi/util").template
if not isAndroid then return end
local system = ffi.C . AKEEP_SCREEN_ON_DISABLED
local screenOn = ffi.C . AKEEP_SCREEN_ON_ENABLED
local needs_wakelocks = android.needsWakelocks ( )
-- custom timeouts (in milliseconds)
local timeout_custom1 = 30 * 1000
local timeout_custom2 = 60 * 1000
local timeout_custom3 = 2 * 60 * 1000
local timeout_custom4 = 5 * 60 * 1000
local timeout_custom5 = 1 0 * 60 * 1000
local timeout_custom6 = 1 5 * 60 * 1000
local timeout_custom1 = 2 * 6 0 * 1000
local timeout_custom2 = 5 * 60 * 1000
local timeout_custom3 = 10 * 60 * 1000
local timeout_custom4 = 1 5 * 60 * 1000
local timeout_custom5 = 2 0 * 60 * 1000
local timeout_custom6 = 2 5 * 60 * 1000
local timeout_custom7 = 30 * 60 * 1000
local timeout_system = 0 -- same as system (do nothing!)
local timeout_disabled = - 1 -- disable timeout using wakelocks
local can_modify_timeout = not android.needsWakelocks ( )
local function humanReadableTimeout ( timeout )
local sec = timeout / 1000
if sec >= 120 then
@ -32,13 +32,35 @@ local function humanReadableTimeout(timeout)
end
end
local function canModifyTimeout ( timeout )
if needs_wakelocks then return false end
if timeout == system or timeout == screenOn then
return true
else
return android.settings . canWrite ( )
end
end
local function timeoutEquals ( timeout )
return timeout == android.getScreenOffTimeout ( )
return timeout == android. timeout. ge t( )
end
local function saveAndApplyTimeout ( timeout )
G_reader_settings : saveSetting ( " android_screen_timeout " , timeout )
android.setScreenOffTimeout ( timeout )
android.timeout . set ( timeout )
end
local function requestWriteSettings ( )
local UIManager = require ( " ui/uimanager " )
local ConfirmBox = require ( " ui/widget/confirmbox " )
UIManager : show ( ConfirmBox : new {
text = _ ( " Allow KOReader to modify system settings? \n \n You will be prompted with a permission management screen. You'll need to give KOReader permission and then restart the program. " ) ,
ok_text = _ ( " Allow " ) ,
ok_callback = function ( )
UIManager : scheduleIn ( 1 , function ( ) UIManager : quit ( ) end )
android.settings . requestWritePermission ( )
end ,
} )
end
local ScreenHelper = { }
@ -93,66 +115,77 @@ end
-- timeout menu table
function ScreenHelper : getTimeoutMenuTable ( )
return {
text = _ ( " Screen Timeout " ) ,
sub_item_table = {
local t = {
{
text = _ ( " Use system settings " ) ,
enabled_func = function ( ) return can _modify_timeout end ,
checked_func = function ( ) return timeoutEquals ( timeout_ system) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_ system) end
enabled_func = function ( ) return can ModifyTimeout( system ) end ,
checked_func = function ( ) return timeoutEquals ( system) end ,
callback = function ( ) saveAndApplyTimeout ( system) end
} ,
{
text = humanReadableTimeout ( timeout_custom1 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom1 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom1 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom1 ) end
} ,
{
text = humanReadableTimeout ( timeout_custom2 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom2 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom2 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom2 ) end
} ,
{
text = humanReadableTimeout ( timeout_custom3 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom3 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom3 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom3 ) end
} ,
{
text = humanReadableTimeout ( timeout_custom4 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom4 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom4 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom4 ) end
} ,
{
text = humanReadableTimeout ( timeout_custom5 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom5 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom5 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom5 ) end
} ,
{
text = humanReadableTimeout ( timeout_custom6 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom6 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom6 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom6 ) end
} ,
{
text = humanReadableTimeout ( timeout_custom7 ) ,
enabled_func = function ( ) return can _modify_timeout end ,
enabled_func = function ( ) return can ModifyTimeout( timeout_custom7 ) end ,
checked_func = function ( ) return timeoutEquals ( timeout_custom7 ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_custom7 ) end
} ,
{
text = _ ( " Keep screen on " ) ,
enabled_func = function ( ) return can _modify_timeout end ,
checked_func = function ( ) return timeoutEquals ( timeout_disabled ) end ,
callback = function ( ) saveAndApplyTimeout ( timeout_disabled ) end
enabled_func = function ( ) return can ModifyTimeout( screenOn ) end ,
checked_func = function ( ) return timeoutEquals ( screenOn ) end ,
callback = function ( ) saveAndApplyTimeout ( screenOn ) end
} ,
}
if not android.settings . canWrite ( ) then
table.insert ( t , 1 , {
text = _ ( " Allow system settings override " ) ,
enabled_func = function ( ) return not android.settings . canWrite ( ) end ,
checked_func = function ( ) return android.settings . canWrite ( ) end ,
callback = function ( ) requestWriteSettings ( ) end ,
separator = true ,
} )
end
return {
text = _ ( " Screen Timeout " ) ,
sub_item_table = t
}
end
return ScreenHelper