diff --git a/frontend/ui/network/manager.lua b/frontend/ui/network/manager.lua index 641e5f239..2dc492522 100644 --- a/frontend/ui/network/manager.lua +++ b/frontend/ui/network/manager.lua @@ -497,7 +497,6 @@ function NetworkMgr:getPowersaveMenuTable() text = _("Disable Wi-Fi connection when inactive"), help_text = _([[This will automatically turn Wi-Fi off after a generous period of network inactivity, without disrupting workflows that require a network connection, so you can just keep reading without worrying about battery drain.]]), checked_func = function() return G_reader_settings:isTrue("auto_disable_wifi") end, - enabled_func = function() return Device:hasWifiManager() end, callback = function() G_reader_settings:flipNilOrFalse("auto_disable_wifi") -- NOTE: Well, not exactly, but the activity check wouldn't be (un)scheduled until the next Network(Dis)Connected event... @@ -608,8 +607,12 @@ function NetworkMgr:getMenuTable(common_settings) common_settings.network_proxy = self:getProxyMenuTable() common_settings.network_info = self:getInfoMenuTable() - if Device:hasWifiManager() or Device:isEmulator() then + -- Allow auto_disable_wifi on devices where the net sysfs entry is exposed. + if self:getNetworkInterfaceName() then common_settings.network_powersave = self:getPowersaveMenuTable() + end + + if Device:hasWifiManager() or Device:isEmulator() then common_settings.network_restore = self:getRestoreMenuTable() common_settings.network_dismiss_scan = self:getDismissScanMenuTable() common_settings.network_before_wifi_action = self:getBeforeWifiActionMenuTable() diff --git a/frontend/ui/network/networklistener.lua b/frontend/ui/network/networklistener.lua index 73a9bb432..87c4b6f56 100644 --- a/frontend/ui/network/networklistener.lua +++ b/frontend/ui/network/networklistener.lua @@ -115,8 +115,8 @@ local network_activity_noise_margin = 12 -- unscaled_size_check: ignore -- Read the statistics/tx_packets sysfs entry for the current network interface. -- It *should* be the least noisy entry on an idle network... --- The fact that auto_disable_wifi is only available on Device:hasWifiManager() --- allows us to get away with a Linux-only solution. +-- The fact that auto_disable_wifi is only available on devices that expose a +-- net sysfs entry allows us to get away with a Linux-only solution. function NetworkListener:_getTxPackets() -- read tx_packets stats from sysfs (for the right network if) local file = io.open("/sys/class/net/" .. NetworkMgr:getNetworkInterfaceName() .. "/statistics/tx_packets", "rb") @@ -198,14 +198,12 @@ end function NetworkListener:onNetworkConnected() logger.dbg("NetworkListener: onNetworkConnected") - if not Device:hasWifiManager() then - return + if Device:hasWifiManager() then + -- This is for the sake of events that don't emanate from NetworkMgr itself... + NetworkMgr:setWifiState(true) + NetworkMgr:setConnectionState(true) end - -- This is for the sake of events that don't emanate from NetworkMgr itself... - NetworkMgr:setWifiState(true) - NetworkMgr:setConnectionState(true) - if not G_reader_settings:isTrue("auto_disable_wifi") then return end @@ -218,13 +216,11 @@ end function NetworkListener:onNetworkDisconnected() logger.dbg("NetworkListener: onNetworkDisconnected") - if not Device:hasWifiManager() then - return + if Device:hasWifiManager() then + NetworkMgr:setWifiState(false) + NetworkMgr:setConnectionState(false) end - NetworkMgr:setWifiState(false) - NetworkMgr:setConnectionState(false) - if not G_reader_settings:isTrue("auto_disable_wifi") then return end