try {
var results = [];
- console.log('Found ' + network_list.length + ' networks');
for (var i = 0; i < network_list.length; i++) {
if (network_list[i][1] === undefined) {
console.log('Badly form json message: ' + json_msg);
wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'connect', network_id, success_cb, error_cb);
};
- WiFiAdapter.prototype.disconnectNetwork = function(network, success_cb, error_cb) {
+ WiFiAdapter.prototype.disconnectNetwork = function(network_id, success_cb, error_cb) {
if (wsAPI === undefined) return;
- wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'disconnect', network, success_cb, error_cb);
+ wsAPI.sendRequest(WS_REQUEST_TYPE.WIFI, 'disconnect', network_id, success_cb, error_cb);
};
/* Network class */
/* Settings Panel */
$('#main').on('pageshow', function(event, data) {
/* TODO: unsubscribe events if neccessary */
- if (data.prevPage.attr('id') === 'page_wifi') console.log('Wi-Fi settings exited');
- else if (data.prevPage.attr('id') === 'page_bluetooth') console.log('Bluetooth settings exited');
- else if (data.prevPage.attr('id') === 'page_datetime') console.log('Date and Time settings exited');
+ if (data.prevPage.attr('id') === 'page_wifi') {
+ console.log('Wi-Fi settings exited');
+ settings.wifi.unsubscribeEvents(wifiEventReceived);
+ } else if (data.prevPage.attr('id') === 'page_bluetooth') {
+ console.log('Bluetooth settings exited');
+ settings.wifi.unsubscribeEvents(bluetoothEventReceived);
+ } else if (data.prevPage.attr('id') === 'page_datetime') {
+ console.log('Date and Time settings exited');
+ }
});
/* Different sub panels */
function bluetoothPanelInit() {
- settings.bluetooth.subscribeEvents(bluetoothEventReceived);
-
/* Bluetooth Settings Panel */
$('#page_bluetooth').on('pageshow', function(event, data) {
if (data.prevPage.attr('id') === 'page_bluetooth_detail') return;
+ settings.bluetooth.subscribeEvents(bluetoothEventReceived);
var adapter = settings.bluetooth.getDefaultAdapter();
if (adapter === null) {
showMsg('Error', 'Bluetooth adapter not found');
function bluetoothEventReceived(event) {
if (event.type !== WS_EVENT_TYPE.BLUETOOTH) return;
- console.log('Bluetooth event received: [' + event.name + ', ' + event.value + ']');
+ if ($.mobile.activePage.attr('id') !== 'page_bluetooth' || $.mobile.activePage.attr('id') !== 'page_bluetooth_detail') {
+ return;
+ }
+
+ if (event.name === 'PropertyChanged') {
+ bluetoothHandlePropertyChanged(event.value);
+ } else {
+ console.log('Unsupported bluetooth event received: ' + event.name);
+ }
+}
+
+function bluetoothHandlePropertyChanged(property) {
+ if (property[0] === 'Powered') {
+ if (property[1] === true) {
+ bluetoothToggleOn();
+ adapter.stopScanDevices(function() {
+ bluetoothStartScan(adapter);
+ }, null);
+ } else {
+ bluetoothToggleOff();
+ }
+ }
}
function bluetoothClearAvailableList() {
function wifiPanelInit() {
- settings.wifi.subscribeEvents(wifiEventReceived);
-
/* WiFi Settings Panel */
$('#page_wifi').on('pageshow', function(event, data) {
if (data.prevPage.attr('id') === 'page_wifi_detail') return;
+ settings.wifi.subscribeEvents(wifiEventReceived);
var adapter = settings.wifi.getDefaultAdapter();
if (adapter === null) {
showMsg('Error', 'WiFi adapter not found');
function wifiEventReceived(event) {
if (event.type !== WS_EVENT_TYPE.WIFI) return;
- console.log('WiFi event received: [' + event.name + ', ' + event.value + ']');
+ if ($.mobile.activePage.attr('id') !== 'page_wifi' && $.mobile.activePage.attr('id') !== 'page_wifi_detail') {
+ return;
+ }
+
+ if (event.name === 'ServicesChanged') {
+ wifiHandleServicesChanged(event.id, event.value);
+ } else if (event.name === 'PropertyChanged') {
+ wifiHandlePropertyChanged(event.id, event.value);
+ } else {
+ console.log('Unsupported WiFi event received: ' + event.name);
+ }
+}
+
+function wifiHandleServicesChanged(object_path, services) {
+ var servicesChanged = services[0];
+ var servicesRemoved = services[1];
+
+ if ($('#toggle_wifi').val() === 'off') return;
+
+ console.log(servicesChanged.length + ' networks changed');
+ for (var i = 0; i < servicesChanged.length; i++) {
+ if (servicesChanged[i][0] === undefined) {
+ console.log('Invalid parameters, missing object path');
+ continue;
+ }
+
+ if (servicesChanged[i][1].Type === 'wifi') {
+ var network = $(jqId(servicesChanged[i][0])).data('network-object');
+
+ if (network == null) {
+ console.log('could not find network object ' + servicesChanged[i][0]);
+ continue;
+ }
+
+ var network = new settings.wifi.WiFiNetwork(servicesChanged[i][0]);
+ if (servicesChanged[i][1].Name !== undefined) {
+ network.ssid = servicesChanged[i][1].Name;
+ }
+ if (servicesChanged[i][1].State === 'ready') {
+ network.connected = true;
+ } else if (servicesChanged[i][1].State === 'idle') {
+ network.connected = false;
+ }
+ if (servicesChanged[i][1].EncryptionMode !== undefined) {
+ network.encryption = servicesChanged[i][1].EncryptionMode;
+ }
+ if (servicesChanged[i][1].Strength !== undefined) {
+ network.strength = servicesChanged[i][1].Strength;
+ }
+ if (servicesChanged[i][1].IPv4.Address !== undefined) {
+ network.ipAddress = servicesChanged[i][1].IPv4.Address;
+ }
+ if (servicesChanged[i][1].IPv4.Gateway !== undefined) {
+ network.gateway = servicesChanged[i][1].IPv4.Gateway;
+ }
+ if (servicesChanged[i][1].IPv4.Netmask !== undefined) {
+ network.netmask = servicesChanged[i][1].IPv4.Netmask;
+ }
+
+ if ($.mobile.activePage.attr('id') === 'page_wifi') {
+ console.log('Network updated');
+ wifiUpdateNetwork(network);
+ }
+ }
+ }
+
+ console.log(servicesRemoved.length + ' networks removed');
+ for (var i = 0; i < servicesRemoved.length; i++) {
+ if (servicesRemoved[i] === undefined) {
+ console.log('Invalid parameters, missing object path');
+ continue;
+ }
+
+ wifiRemoveFromKnownList(servicesRemoved[i]);
+ wifiRemoveFromAvailableList(servicesRemoved[i]);
+ }
+}
+
+function wifiHandlePropertyChanged(id, property) {
+ if (property[0] === 'Powered') {
+ if (property[1] === true) {
+ wifiClearKnownList();
+ wifiClearAvailableList();
+ wifiToggleOn();
+ setTimeout(function() {
+ var adapter = settings.wifi.getDefaultAdapter();
+ wifiScan(adapter);
+ }, 1000);
+ } else {
+ wifiToggleOff();
+ }
+ }
+
+ /* if wifi is off, ignore all the propertyChanged events */
+ if ($('#toggle_wifi').val() === 'off') return;
+
+ if (property[0] === 'State') {
+ /* specific network has changed */
+ var network = $(jqId(parent)).data('network-object');
+ if (network == null) {
+ console.error('Wifi network not found');
+ return;
+ }
+
+ if (property[1] === 'ready') {
+ network.connected = true;
+ } else if (property[1] === 'idle') {
+ network.connected = false;
+ }
+
+ wifiUpdateNetwork(network);
+ } else if (property[0] === 'Connected') {
+ /* unknown network has changed, sync WiFi network */
+ console.log('Unknown network connected property changed');
+ var adapter = settings.wifi.getDefaultAdapter();
+ wifiSync(adapter, null, null);
+ }
}
function wifiClearKnownList() {
for (var i = 0; i < networks.length; i++) {
var network = networks[i];
if (network.ssid && network.ssid !== '') {
- console.log('Skipping hidden network - ' + network.address);
wifiUpdateNetwork(network);
+ } else {
+ console.log('Skipping hidden network - ' + network.ipAddress);
}
}
}, function(e) {
wifiUpdateNetwork(network);
}
}
- success_cb();
+ if (success_cb) {
+ success_cb();
+ }
}, function(e) {
wifiScanInProgress = false;
$('#toggle_wifi').slider('enable');
$('#toggle_wifi').slider('refresh');
- error_cb(e);
+ if (error_cb) {
+ error_cb(e);
+ }
});
}
wifiRefreshList();
}
-function wifiRemoveFromAvailableList(network_ssid) {
+function wifiRemoveFromAvailableList(network_id) {
var removeThis = $('#listview_network_available li').filter(function() {
- return $(this).find(jqId(network_ssid)).length === 1;
+ return $(this).find(jqId(network_id)).length === 1;
});
if (removeThis.length !== 0) {
/* retrieve the network object from element */
var network = $(jqId(parent)).data('network-object');
- if (network == undefined) {
+ if (network == null) {
console.error('Wifi network not found');
return;
}
/* error */
hideSpinner();
showMsg('Error', 'Network disconnect failed: ' + e);
-
- /* Something is wrong, remove from connected list */
- wifiRemoveFromKnownList(network.id);
});
}
});
/* update network connection status */
wifiUpdateConnectionStatus(network);
+
+ /* update network detail panel */
+ if ($.mobile.activePage.attr('id') === 'page_wifi_detail') {
+ var network_id = localStorage.getItem('wifi_network_id');
+ if (network_id == undefined) return;
+ var network_object = $(jqId(network_id)).data('network-object');
+ if (network.id === network_object.id) {
+ wifiConstructDetailPanel(network);
+ }
+ }
}
function wifiUpdateNetworkButton(network) {
}
}
- this.EventObject = function(type, name, value) {
+ this.EventObject = function(type, id, name, value) {
var me = this;
this.type = type;
+ this.id = id;
this.name = name;
this.value = value;
}
this.methodCalls[i].start();
var jsonMsg = JSON.stringify(msg);
- console.log('Sending json msg: ' + jsonMsg);
if (dummyBackend) {
/* fake with dummy data */
dummyBackendSend(msg);
}
}
- function fireEvent(type, name, value) {
- var event = new this.EventObject(type, name, value);
- console.log('Fire event: [' + type + ', ' + name + ', ' + value + ']');
+ function fireEvent(type, id, name, value) {
+ var event = new this.EventObject(type, id, name, value);
event_callbacks.fire(event);
}
var self = this;
var response;
try {
- console.log("Received json msg: " + msg);
response = JSON.parse(msg);
} catch (e) {
console.error('Garbage message: ' + msg);
return;
}
- if ((response === undefined) || (response.type === undefined) || (response.transactionid === undefined)) {
+ if ((response === undefined) || (response.type === undefined)) {
console.error('Badly formed message: ' + msg);
- return;
- } else {
- if (response.type === 'event') {
- console.log('new event: ' + response.name + ', ' + response.data);
- self.fireSevent(response.name, response.value);
+ } else if (response.type === 'event' && response.value !== undefined) {
+ if (response.value.interface_name === 'net.connman.Manager' || response.value.interface_name === 'net.connman.Service' || response.value.interface_name === 'net.connman.Technology') {
+ if (response.value.signal_name === undefined || response.value.parameters === undefined) {
+ console.error('Badly formed event: ' + msg);
+ return;
+ }
+ if (response.value.signal_name === 'ServiceChanged' && response.value.parameters.length !== 2) {
+ console.error('Badly formed event parameters: ' + msg);
+ return;
+ }
+
+ if (response.value.object_path === '/' || response.value.object_path.indexOf('/net/connman/technology/wifi') >= 0) {
+ fireEvent(WS_REQUEST_TYPE.WIFI, response.value.object_path, response.value.signal_name, response.value.parameters);
+ } else if (response.value.object_path.indexOf('/net/connman/technology/bluetooth') >= 0) {
+ fireEvent(WS_REQUEST_TYPE.BLUETOOTH, response.value.object_path, response.value.signal_name, response.value.parameters);
+ } else {
+ console.error('Unrecognized event object_path, skipping');
+ }
} else {
- var calls = this.methodCalls;
- for (var i = 0; i < calls.length; i++) {
- var call = calls[i];
- if (call && (!call.done) && (call.transactionid === response.transactionid)) {
- call.finish();
- console.log('response matched');
- if (response.result !== 'succeeded' && response.reason !== undefined && call.errorCB !== undefined) {
- console.log('error - ' + response.reason);
- call.errorCB(response.reason);
- } else if (call.successCB !== undefined) {
- if (response.value !== undefined) {
- call.successCB(response.value);
- } else {
- call.successCB();
- }
+ console.error('Unrecognized event, skipping');
+ }
+ } else if (response.transactionid === undefined) {
+ console.error('Badly formed response: ' + msg);
+ } else {
+ var calls = this.methodCalls;
+ for (var i = 0; i < calls.length; i++) {
+ var call = calls[i];
+ if (call && (!call.done) && (call.transactionid === response.transactionid)) {
+ call.finish();
+ if (response.result !== 'succeeded' && response.reason !== undefined && call.errorCB !== undefined) {
+ console.log('error - ' + response.reason);
+ call.errorCB(response.reason);
+ } else if (call.successCB !== undefined) {
+ if (response.value !== undefined) {
+ call.successCB(response.value);
+ } else {
+ call.successCB();
}
- return;
}
+ return;
}
}
}
if (msg.name === 'is_enabled') {
/* default to enabled */
var result = true;
- console.log('is_enabled response ' + result);
call.successCB(result);
return;
} else if (msg.name === 'enable' && msg.value === true) {
"BSSID": "11:5d:49:88:3d:20",
"MaxRate": 54000000,
"Frequency": 2417,
- "EncryptionMode": "aes",
+ "EncryptionMode": "none",
"Ethernet": {
"Method": "auto",
"Interface": "wlp1s0",
];
replyMsg = JSON.stringify(results);
- console.log('scan response ' + replyMsg);
/* simulate scan behavior */
setTimeout(function() {
call.successCB(results);
return;
} else if (msg.name === 'connect') {
call.successCB();
+ setTimeout(function() {
+ fireEvent(WS_REQUEST_TYPE.WIFI, '/net/connman/service/wifi_c8f733acdf96_3558364737_managed_psk', 'PropertyChanged', ["Connected", true]);
+ }, 2000);
return;
} else if (msg.name === 'disconnect') {
call.successCB();
+ setTimeout(function() {
+ fireEvent(WS_REQUEST_TYPE.WIFI, '/net/connman/service/wifi_c8f733acdf96_3558364737_managed_psk', 'PropertyChanged', ["Connected", false]);
+ }, 2000);
return;
} else {
call.errorCB('Unsupported request: ' + msg.name + ', ' + msg.value);
if (msg.name === 'is_time_updates_auto' && msg.value !== undefined) {
/* default to manual */
var result = false;
- console.log('is_time_updates_auto response ' + result);
call.successCB(result);
return;
} else if (msg.name === 'is_timezone_updates_auto' && msg.value !== undefined) {
/* default to manual */
var result = false;
- console.log('is_timezone_updates_auto response ' + result);
call.successCB(result);
return;
} else if (msg.name === 'time' && msg.value !== undefined) {
connect: connect,
reconnect: reconnect,
sendRequest: sendRequest,
- subscribeEvents: subscribeEvents
+ subscribeEvents: subscribeEvents,
+ unsubscribeEvents: unsubscribeEvents
}
})();
\ No newline at end of file
+* Tue Oct 15 2013 Jimmy Huang <jimmy.huang@intel.com> accepted/tizen/20131007.221312@71c3e9e
+- Monitor settings daemon events and update changes
+
* Tue Oct 15 2013 Jimmy Huang <jimmy.huang@intel.com> accepted/tizen/20131007.221312@ff849bb
- Remove duplicating disconnect button from WiFi details panel