mirror of
https://github.com/koreader/koreader.git
synced 2025-12-13 20:36:53 +01:00
network(fix): automaticallly obtain IP if network is already authenticated
This commit is contained in:
2
base
2
base
Submodule base updated: 0f7eceea34...df6a716807
@@ -54,6 +54,8 @@ local ListView = InputContainer:new{
|
||||
}
|
||||
|
||||
function ListView:init()
|
||||
if #self.items <= 0 then return end
|
||||
|
||||
self.show_page = 1
|
||||
self.dimen = Geom:new{w = self.width, h = self.height}
|
||||
|
||||
|
||||
@@ -53,9 +53,21 @@ local Geom = require("ui/geometry")
|
||||
local Device = require("device")
|
||||
local Screen = Device.screen
|
||||
local Font = require("ui/font")
|
||||
local T = require("ffi/util").template
|
||||
local _ = require("gettext")
|
||||
|
||||
|
||||
|
||||
local function obtainIP()
|
||||
-- TODO: check for DHCP result
|
||||
local info = InfoMessage:new{text = _("Obtaining IP address…")}
|
||||
UIManager:show(info)
|
||||
UIManager:forceRePaint()
|
||||
NetworkMgr:obtainIP()
|
||||
UIManager:close(info)
|
||||
end
|
||||
|
||||
|
||||
local MinimalPaginator = Widget:new{
|
||||
width = nil,
|
||||
height = nil,
|
||||
@@ -147,6 +159,7 @@ function NetworkItem:init()
|
||||
horizontal_space,
|
||||
}
|
||||
})
|
||||
self.setting_ui:setConnectedItem(self)
|
||||
elseif self.info.password then
|
||||
self.btn_edit_nw = FrameContainer:new{
|
||||
bordersize = 0,
|
||||
@@ -193,18 +206,14 @@ function NetworkItem:refresh()
|
||||
end
|
||||
|
||||
function NetworkItem:connect()
|
||||
local connected_item = self.setting_ui:getConnectedItem(self)
|
||||
local connected_item = self.setting_ui:getConnectedItem()
|
||||
if connected_item then connected_item:disconnect() end
|
||||
|
||||
local success, err_msg = NetworkMgr:authenticateNetwork(self.info)
|
||||
|
||||
local text
|
||||
if success then
|
||||
local info = InfoMessage:new{text = _("Obtaining IP address…")}
|
||||
UIManager:show(info)
|
||||
UIManager:forceRePaint()
|
||||
NetworkMgr:obtainIP()
|
||||
UIManager:close(info)
|
||||
obtainIP()
|
||||
self.info.connected = true
|
||||
self.setting_ui:setConnectedItem(self)
|
||||
text = _("Connected.")
|
||||
@@ -215,6 +224,8 @@ function NetworkItem:connect()
|
||||
if self.setting_ui.connect_callback then
|
||||
self.setting_ui.connect_callback()
|
||||
end
|
||||
|
||||
self:refresh()
|
||||
UIManager:show(InfoMessage:new{text = text})
|
||||
end
|
||||
|
||||
@@ -229,6 +240,7 @@ function NetworkItem:disconnect()
|
||||
UIManager:close(info)
|
||||
self.info.connected = nil
|
||||
self:refresh()
|
||||
self.setting_ui:setConnectedItem(nil)
|
||||
if self.setting_ui.connect_callback then
|
||||
self.setting_ui.connect_callback()
|
||||
end
|
||||
@@ -246,7 +258,6 @@ function NetworkItem:saveAndConnectToNetwork(password_input)
|
||||
NetworkMgr:saveNetwork(self.info)
|
||||
end
|
||||
self:connect()
|
||||
self:refresh()
|
||||
end
|
||||
|
||||
UIManager:close(password_input)
|
||||
@@ -342,7 +353,6 @@ function NetworkItem:onTapSelect(arg, ges_ev)
|
||||
self:onEditNetwork()
|
||||
else
|
||||
self:connect()
|
||||
self:refresh()
|
||||
end
|
||||
else
|
||||
self:onAddNetwork()
|
||||
@@ -446,6 +456,19 @@ function NetworkSetting:init()
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
UIManager:nextTick(function()
|
||||
local connected_item = self:getConnectedItem()
|
||||
if connected_item ~= nil then
|
||||
obtainIP()
|
||||
UIManager:show(InfoMessage:new{
|
||||
text = T(_("Connected to network %1"), connected_item.info.ssid)
|
||||
})
|
||||
if self.connect_callback then
|
||||
self.connect_callback()
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function NetworkSetting:setConnectedItem(item)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
export PATH=$PATH:/sbin
|
||||
|
||||
# Release IP and shutdown udhcpc.
|
||||
|
||||
pkill -9 -f '/bin/sh /etc/udhcpc.d/default.script'
|
||||
|
||||
68
spec/unit/networksetting_spec.lua
Normal file
68
spec/unit/networksetting_spec.lua
Normal file
@@ -0,0 +1,68 @@
|
||||
describe("NetworkSetting module", function()
|
||||
local NetworkSetting, NetworkMgr
|
||||
setup(function()
|
||||
require("commonrequire")
|
||||
NetworkSetting = require("ui/widget/networksetting")
|
||||
NetworkMgr = require("ui/network/manager")
|
||||
end)
|
||||
|
||||
it("should initilize properly with empty network list", function()
|
||||
local ns = NetworkSetting:new{network_list = {}}
|
||||
assert.is.falsy(ns.connected_item)
|
||||
end)
|
||||
|
||||
it("should call connect_callback after disconnect", function()
|
||||
stub(NetworkMgr, "disconnectNetwork")
|
||||
stub(NetworkMgr, "releaseIP")
|
||||
|
||||
local called = false
|
||||
local network_list = {
|
||||
{
|
||||
ssid = "foo",
|
||||
signal_level = -58,
|
||||
flags = "[WPA2-PSK-CCMP][ESS]",
|
||||
signal_quality = 84,
|
||||
password = "123abc",
|
||||
connected = true,
|
||||
},
|
||||
}
|
||||
local ns = NetworkSetting:new{
|
||||
network_list = network_list,
|
||||
connect_callback = function() called = true end
|
||||
}
|
||||
ns.connected_item:disconnect()
|
||||
assert.truthy(called)
|
||||
|
||||
NetworkMgr.disconnectNetwork:revert()
|
||||
NetworkMgr.releaseIP:revert()
|
||||
end)
|
||||
|
||||
it("should set connected_item to nil after disconnect", function()
|
||||
stub(NetworkMgr, "disconnectNetwork")
|
||||
stub(NetworkMgr, "releaseIP")
|
||||
|
||||
local network_list = {
|
||||
{
|
||||
ssid = "foo",
|
||||
signal_level = -58,
|
||||
flags = "[WPA2-PSK-CCMP][ESS]",
|
||||
signal_quality = 84,
|
||||
password = "123abc",
|
||||
connected = true,
|
||||
},
|
||||
{
|
||||
ssid = "bar",
|
||||
signal_level = -258,
|
||||
signal_quality = 44,
|
||||
flags = "[WEP][ESS]",
|
||||
},
|
||||
}
|
||||
local ns = NetworkSetting:new{network_list = network_list}
|
||||
assert.is.same("foo", ns.connected_item.info.ssid)
|
||||
ns.connected_item:disconnect()
|
||||
assert.is.falsy(ns.connected_item)
|
||||
|
||||
NetworkMgr.disconnectNetwork:revert()
|
||||
NetworkMgr.releaseIP:revert()
|
||||
end)
|
||||
end)
|
||||
Reference in New Issue
Block a user