diff -r 0f2326c2a325 -r 1c3b8676e58c ginebra2/SystemNetworkImpl.cpp --- 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 -