network(fix): automaticallly obtain IP if network is already authenticated

pull/2320/head
Qingping Hou 8 years ago
parent 8a9811804d
commit efae2ed16f

@ -1 +1 @@
Subproject commit 0f7eceea34b5c64a7ac968eb0ce208740930891c
Subproject commit df6a7168074685fd216a9b07d785adcc50a0132d

@ -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'

@ -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)
Loading…
Cancel
Save