Bug 960426 - Part 4: Support Network Information API in Fifrefox OS. r=vchang

This commit is contained in:
John Shih 2014-03-17 14:33:48 +08:00
parent 1165b217c9
commit 04d698a1a5
2 changed files with 48 additions and 12 deletions

View File

@ -107,6 +107,13 @@ const MOBILE_DUN_CONNECT_TIMEOUT = 30000;
const MOBILE_DUN_RETRY_INTERVAL = 5000;
const MOBILE_DUN_MAX_RETRIES = 5;
// Connection Type for Network Information API
const CONNECTION_TYPE_CULLULAR = 0;
const CONNECTION_TYPE_BLUETOOTH = 1;
const CONNECTION_TYPE_ETHERNET = 2;
const CONNECTION_TYPE_WIFI = 3;
const CONNECTION_TYPE_OTHER = 4;
const CONNECTION_TYPE_NONE = 5;
const DEBUG = false;
@ -280,7 +287,8 @@ NetworkManager.prototype = {
#ifdef MOZ_B2G_RIL
// Notify outer modules like MmsService to start the transaction after
// the configuration of the network interface is done.
Services.obs.notifyObservers(network, TOPIC_CONNECTION_STATE_CHANGED, null);
Services.obs.notifyObservers(network, TOPIC_CONNECTION_STATE_CHANGED,
this.convertConnectionType(network));
#endif
break;
#ifdef MOZ_B2G_RIL
@ -652,6 +660,27 @@ NetworkManager.prototype = {
},
#endif
convertConnectionType: function(network) {
// If there is internal interface change (e.g., MOBILE_MMS, MOBILE_SUPL),
// the function will return null so that it won't trigger type change event
// in NetworkInformation API.
if (network.type != Ci.nsINetworkInterface.NETWORK_TYPE_WIFI &&
network.type != Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE) {
return null;
}
if (network.state == Ci.nsINetworkInterface.NETWORK_STATE_DISCONNECTED) {
return CONNECTION_TYPE_NONE;
}
switch (network.type) {
case Ci.nsINetworkInterface.NETWORK_TYPE_WIFI:
return CONNECTION_TYPE_WIFI;
case Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE:
return CONNECTION_TYPE_CULLULAR;
}
},
// nsISettingsServiceCallback
tetheringSettings: {},

View File

@ -956,6 +956,7 @@ nsAppShell::Init()
nsCOMPtr<nsIObserverService> obsServ = GetObserverService();
if (obsServ) {
obsServ->AddObserver(this, "browser-ui-startup-complete", false);
obsServ->AddObserver(this, "network-connection-state-changed", false);
}
#ifdef MOZ_NUWA_PROCESS
@ -973,19 +974,24 @@ nsAppShell::Observe(nsISupports* aSubject,
const char* aTopic,
const char16_t* aData)
{
if (strcmp(aTopic, "browser-ui-startup-complete")) {
return nsBaseAppShell::Observe(aSubject, aTopic, aData);
if (!strcmp(aTopic, "network-connection-state-changed")) {
NS_ConvertUTF16toUTF8 type(aData);
if (!type.IsEmpty()) {
hal::NotifyNetworkChange(hal::NetworkInformation(atoi(type.get()), 0, 0));
}
return NS_OK;
} else if (!strcmp(aTopic, "browser-ui-startup-complete")) {
if (sDevInputAudioJack) {
sHeadphoneState = mReader->getSwitchState(-1, AINPUT_SOURCE_SWITCH, SW_HEADPHONE_INSERT);
sMicrophoneState = mReader->getSwitchState(-1, AINPUT_SOURCE_SWITCH, SW_MICROPHONE_INSERT);
updateHeadphoneSwitch();
}
mEnableDraw = true;
NotifyEvent();
return NS_OK;
}
if (sDevInputAudioJack) {
sHeadphoneState = mReader->getSwitchState(-1, AINPUT_SOURCE_SWITCH, SW_HEADPHONE_INSERT);
sMicrophoneState = mReader->getSwitchState(-1, AINPUT_SOURCE_SWITCH, SW_MICROPHONE_INSERT);
updateHeadphoneSwitch();
}
mEnableDraw = true;
NotifyEvent();
return NS_OK;
return nsBaseAppShell::Observe(aSubject, aTopic, aData);
}
NS_IMETHODIMP
@ -995,6 +1001,7 @@ nsAppShell::Exit()
nsCOMPtr<nsIObserverService> obsServ = GetObserverService();
if (obsServ) {
obsServ->RemoveObserver(this, "browser-ui-startup-complete");
obsServ->RemoveObserver(this, "network-connection-state-changed");
}
return nsBaseAppShell::Exit();
}