--- a/ginebra2/SystemNetworkImpl.cpp Wed Jun 23 17:59:43 2010 +0300
+++ b/ginebra2/SystemNetworkImpl.cpp Tue Jul 06 14:03:49 2010 +0300
@@ -29,8 +29,11 @@
namespace GVA {
+#define WCDMA2GSM_WORKAROUND // work around for QtMobility issue
+
SystemNetworkImpl::SystemNetworkImpl()
- : m_currentMode(QSystemNetworkInfo::UnknownMode)
+ : m_currentMode(QSystemNetworkInfo::UnknownMode),
+ m_sessionNetworkName("")
{
// create Qt Mobility API objects for network information
m_networkInfo = new QSystemNetworkInfo(this);
@@ -49,17 +52,16 @@
QSystemNetworkInfo::NetworkMode, QSystemNetworkInfo::NetworkStatus)), this,
SLOT(handleNetworkStatusChanged(QSystemNetworkInfo::NetworkMode, QSystemNetworkInfo::NetworkStatus)));
-#ifdef QT_MOBILITY_BEARER_MANAGEMENT
+#ifdef QT_MOBILITY_BEARER_MANAGEMENT
// Get the singleton instance of WebNetworkConnectionManager
WRT::WebNetworkConnectionManager &webNetworkConnectionManager
= WRT::WebNetworkConnectionManagerSingleton::Instance();
-
- safe_connect(&webNetworkConnectionManager, SIGNAL(networkNameChanged(
+
+ safe_connect(&webNetworkConnectionManager, SIGNAL(networkOnlineStateChanged(bool)),
+ this, SLOT(handleNetworkOnlineStateChanged(bool)));
+ safe_connect(&webNetworkConnectionManager, SIGNAL(networkSessionNameChanged(
QSystemNetworkInfo::NetworkMode, const QString&)), this,
- SLOT(handleNetworkNameChanged(QSystemNetworkInfo::NetworkMode, const QString&)));
- safe_connect(&webNetworkConnectionManager, SIGNAL(networkSignalStrengthChanged(
- QSystemNetworkInfo::NetworkMode, int)), this,
- SLOT(handleNetworkSignalStrengthChanged(QSystemNetworkInfo::NetworkMode, int)));
+ SLOT(handleNetworkSessionNameChanged(QSystemNetworkInfo::NetworkMode, const QString&)));
// Update all configurations
webNetworkConnectionManager.updateConfigurations();
@@ -74,28 +76,43 @@
//! Gets the network name for the current network mode.
QString SystemNetworkImpl::getNetworkName() const
{
- QString netName = m_networkInfo->networkName(m_currentMode);
+ QString netName;
- // if WLAN SSID name is unknown show "WiFi"
- if ((m_currentMode == QSystemNetworkInfo::WlanMode) &&
- (netName == "")) {
- netName = "WiFi";
+ switch(m_currentMode) {
+ case QSystemNetworkInfo::WlanMode:
+ case QSystemNetworkInfo::EthernetMode:
+ case QSystemNetworkInfo::BluetoothMode:
+ case QSystemNetworkInfo::WimaxMode:
+ // for wireless cases use name from session.
+#ifdef QT_MOBILITY_BEARER_MANAGEMENT
+ netName = m_sessionNetworkName;
+#else
+ netName = m_networkInfo->networkName(m_currentMode);
+ // if WLAN SSID name is unknown show "WiFi"
+ if (netName == "")
+ netName = "WiFi";
+#endif // QT_MOBILITY_BEARER_MANAGEMENT
+ break;
+
+ default:
+ netName = m_networkInfo->networkName(m_currentMode);
+ break;
}
- //qDebug() << "DeviceDelegate: network name " << netName;
+ qDebug() << "SystemNetworkImpl::getNetworkName: network name " << netName;
return (netName);
}
//! Gets the network signal strength for the current network mode.
int SystemNetworkImpl::getNetworkSignalStrength() const
{
- int strength = m_networkInfo->networkSignalStrength(m_currentMode);
-
+ int strength = m_networkInfo->networkSignalStrength(m_currentMode);
+
// Strength in WLAN mode is reported as -1 by QtMobility
if ((strength == -1) && (m_currentMode == QSystemNetworkInfo::WlanMode)) {
strength = 100;
}
-
+
return (strength);
}
@@ -106,8 +123,7 @@
void SystemNetworkImpl::handleNetworkModeChanged(
QSystemNetworkInfo::NetworkMode mode)
{
- qDebug() << "handleNetworkModeChanged" << "Mode:" << mode;
- m_currentMode = mode;
+ qDebug() << "SystemNetworkImpl::handleNetworkModeChanged" << "Mode:" << mode;
}
//! Handles the networkSignalStrengthChanged signal from system network info.
@@ -118,15 +134,17 @@
void SystemNetworkImpl::handleNetworkSignalStrengthChanged(
QSystemNetworkInfo::NetworkMode mode, int strength)
{
- qDebug() << "handleNetworkSignalStrengthChanged" << "Mode:" << mode << "strength:" << strength;
+ qDebug() << "SystemNetworkImpl::handleNetworkSignalStrengthChanged" << "Mode:" << mode << "strength:" << strength;
+
+ // Only send signal strength changes for current mode.
+ if (mode == m_currentMode) {
+ // Unknown mode could mean network error so send negative strength to indicate offline.
+ if (m_currentMode == QSystemNetworkInfo::UnknownMode)
+ strength = -1;
- // Bootstrap the mode change if no networkModeChanged signal is recived
- if (m_currentMode == 0)
- m_currentMode = mode;
-
- // Only send signal strength changes for current mode.
- if (mode == m_currentMode)
+ qDebug() << "SystemNetworkImpl::handleNetworkSignalStrengthChanged" << "emit strength:" << strength;
emit networkSignalStrengthChanged(strength);
+ }
}
//! Handles the networkNameChanged signal from system network info.
@@ -137,15 +155,13 @@
void SystemNetworkImpl::handleNetworkNameChanged(
QSystemNetworkInfo::NetworkMode mode, const QString& name)
{
- qDebug() << "handleNetworkStatusChanged" << "Mode:" << mode << "name:" << name;
-
- // Bootstrap the mode change if no networkModeChanged signal is recived
- if (m_currentMode == 0)
- m_currentMode = mode;
-
+ qDebug() << "SystemNetworkImpl::handleNetworkNameChanged" << "Mode:" << mode << "name:" << name;
+
// Only send network name changes for current mode.
- if (mode == m_currentMode)
+ if (mode == m_currentMode) {
+ // Now update name.
emit networkNameChanged(name);
+ }
}
//! Handles the networkStatusChanged signal from system network info.
@@ -156,8 +172,73 @@
void SystemNetworkImpl::handleNetworkStatusChanged(
QSystemNetworkInfo::NetworkMode mode, QSystemNetworkInfo::NetworkStatus status)
{
- qDebug() << "handleNetworkSignalStrengthChanged" << "Mode:" << mode << "status:" << status;
+ qDebug() << "SystemNetworkImpl::handleNetworkStatusChanged" << "mode: " << mode << "status: " << status;
+}
+
+#ifdef QT_MOBILITY_BEARER_MANAGEMENT
+//! Handles online state changed signal from the web network connection manager.
+/*!
+ \param mode network mode of connection that changed
+*/
+void SystemNetworkImpl::handleNetworkOnlineStateChanged(bool isOnline)
+{
+ qDebug() << "SystemNetworkImpl::handleOnlineStateChanged" << "isOnline:" << isOnline;
+
+ // Offline indicates no active network configurations.
+ if (!isOnline) {
+ qDebug() << "SystemNetworkImpl::handleOnlineStateChanged: change mode to unknown, emit -1 str";
+ m_currentMode = QSystemNetworkInfo::UnknownMode;
+ // negative strength indicates offline to UI
+ emit networkSignalStrengthChanged(-1);
+ }
+ // Online indicates at least 1 active network config but not necessarily
+ // one being used by the browser.
}
+void SystemNetworkImpl::handleNetworkSessionNameChanged(QSystemNetworkInfo::NetworkMode mode, const QString& name)
+{
+ // UI must get non-negative strength to indicate online status
+ int strength = m_networkInfo->networkSignalStrength(mode);
+
+ qDebug() << "SystemNetworkImpl::handleNetworkSessionNameChanged" << "Mode:" << mode << "name:" << name << "strength:" << strength;
+
+ switch (mode) {
+ case QSystemNetworkInfo::WlanMode:
+ case QSystemNetworkInfo::EthernetMode:
+ case QSystemNetworkInfo::BluetoothMode:
+ case QSystemNetworkInfo::WimaxMode:
+ // for wireless cases use name from session.
+ m_sessionNetworkName = name;
+ break;
+
+ default:
+ // clear session name - not needed in this mode
+ m_sessionNetworkName = "";
+ break;
+ }
+
+#ifdef WCDMA2GSM_WORKAROUND
+ // Work around for QtMobility issue. Bearer management reports WCDMA bearer but
+ // QSystemNetworkInfo sees connection as GSM mode.
+ if ((mode == QSystemNetworkInfo::WcdmaMode) && (strength < 0)) {
+ strength = m_networkInfo->networkSignalStrength(QSystemNetworkInfo::GsmMode);
+ if (strength >= 0)
+ mode = QSystemNetworkInfo::GsmMode;
+ }
+#endif
+
+ qDebug() << "SystemNetworkImpl::handleNetworkSessionNameChanged: set mode to " << mode;
+ m_currentMode = mode;
+
+ // emit signal strength of new connection,
+ // use wrapper access method for correct WLAN strength
+ qDebug() << "SystemNetworkImpl::handleNetworkSessionNameChanged: emit str=" << getNetworkSignalStrength();
+ emit networkSignalStrengthChanged(getNetworkSignalStrength());
+
+ // Update network name on mode change.
+ qDebug() << "SystemNetworkImpl::handleNetworkSessionNameChanged: emit network name= " << getNetworkName();
+ emit networkNameChanged(getNetworkName());
+}
+#endif // QT_MOBILITY_BEARER_MANAGEMENT
+
} // GVA
-