From d52e0a0dfe2f6d6f30161bfa3735036bed25628d Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Thu, 17 Aug 2023 11:08:12 +0200 Subject: [PATCH] NetworkManager: Always flip wifi_was_on when interactively tearing down Wi-Fi Fix #10823 (For reference, we *enable* wifi_was_on no matter *how* wifi is enabled, but we only toggle it off when it's killed by a *direct* user interaction, the intent being that if *something* non-interactive enabled wifi, you'll probably silently need it on resume too). --- frontend/ui/network/manager.lua | 20 ++++++++++---------- frontend/ui/network/networklistener.lua | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/frontend/ui/network/manager.lua b/frontend/ui/network/manager.lua index b23a0dded..6a01fc521 100644 --- a/frontend/ui/network/manager.lua +++ b/frontend/ui/network/manager.lua @@ -266,7 +266,7 @@ function NetworkMgr:enableWifi(wifi_cb, connectivity_cb, connectivity_widget, in return true end -function NetworkMgr:disableWifi(cb) +function NetworkMgr:disableWifi(cb, interactive) local complete_callback = function() UIManager:broadcastEvent(Event:new("NetworkDisconnected")) if cb then @@ -275,6 +275,11 @@ function NetworkMgr:disableWifi(cb) end UIManager:broadcastEvent(Event:new("NetworkDisconnecting")) self:turnOffWifi(complete_callback) + + if interactive then + self.wifi_was_on = false + G_reader_settings:makeFalse("wifi_was_on") + end end function NetworkMgr:toggleWifiOn(complete_callback, long_press, interactive) @@ -284,8 +289,6 @@ function NetworkMgr:toggleWifiOn(complete_callback, long_press, interactive) UIManager:show(toggle_im) UIManager:forceRePaint() - self.wifi_was_on = true - G_reader_settings:makeTrue("wifi_was_on") self.wifi_toggle_long_press = long_press self:enableWifi(complete_callback, nil, nil, interactive) @@ -293,17 +296,14 @@ function NetworkMgr:toggleWifiOn(complete_callback, long_press, interactive) UIManager:close(toggle_im) end -function NetworkMgr:toggleWifiOff(complete_callback) +function NetworkMgr:toggleWifiOff(complete_callback, interactive) local toggle_im = InfoMessage:new{ text = _("Turning off Wi-Fi…"), } UIManager:show(toggle_im) UIManager:forceRePaint() - self.wifi_was_on = false - G_reader_settings:makeFalse("wifi_was_on") - - self:disableWifi(complete_callback) + self:disableWifi(complete_callback, interactive) UIManager:close(toggle_im) end @@ -335,7 +335,7 @@ function NetworkMgr:promptWifi(complete_callback, long_press, interactive) text = _("Wi-Fi is enabled, but you're currently not connected to a network.\nHow would you like to proceed?"), choice1_text = _("Turn Wi-Fi off"), choice1_callback = function() - self:toggleWifiOff(complete_callback) + self:toggleWifiOff(complete_callback, interactive) end, choice2_text = _("Connect"), choice2_callback = function() @@ -683,7 +683,7 @@ function NetworkMgr:getWifiToggleMenuTable() touchmenu_instance:updateItems() end -- complete_callback() if fully_connected then - self:toggleWifiOff(complete_callback) + self:toggleWifiOff(complete_callback, true) elseif self.is_wifi_on and not self.is_connected then -- ask whether user wants to connect or turn off wifi self:promptWifi(complete_callback, long_press, true) diff --git a/frontend/ui/network/networklistener.lua b/frontend/ui/network/networklistener.lua index cf783683a..61e11c5aa 100644 --- a/frontend/ui/network/networklistener.lua +++ b/frontend/ui/network/networklistener.lua @@ -26,7 +26,7 @@ local function enableWifi() -- NB Normal widgets should use NetworkMgr:promptWifiOn() -- (or, better yet, the NetworkMgr:beforeWifiAction wrappers: NetworkMgr:runWhenOnline() & co.) -- This is specifically the toggle Wi-Fi action, so consent is implied. - NetworkMgr:enableWifi(nil, nil, nil, true) -- flag it as interactive, though + NetworkMgr:enableWifi(nil, nil, nil, true) -- flag it as interactive UIManager:close(toggle_im) end @@ -38,7 +38,7 @@ local function disableWifi() UIManager:show(toggle_im) UIManager:forceRePaint() - NetworkMgr:disableWifi() + NetworkMgr:disableWifi(nil, true) -- flag it as interactive UIManager:close(toggle_im) UIManager:show(InfoMessage:new{