--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/homescreenapp/hsutils/src/hsdeviceinfolistener.cpp Mon May 03 12:24:59 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "hsdeviceinfolistener.h"
+#include <QDebug>
+
+#ifdef Q_OS_SYMBIAN
+#include <e32property.h>
+#include <startupdomainpskeys.h>
+#endif
+/*!
+
+*/
+HsDeviceInfoListener::HsDeviceInfoListener(QObject *parent)
+ : QObject(parent),
+ mCurrentNetworkMode(QSystemNetworkInfo::UnknownMode),
+ mStatus(NoService)
+{
+ mNetworkInfo = new QSystemNetworkInfo(this);
+ mDeviceInfo = new QSystemDeviceInfo(this);
+
+ connect(mNetworkInfo, SIGNAL(networkStatusChanged(QSystemNetworkInfo::NetworkMode, QSystemNetworkInfo::NetworkStatus)), SLOT(onNetworkStatusChanged(QSystemNetworkInfo::NetworkMode, QSystemNetworkInfo::NetworkStatus)));
+ connect(mNetworkInfo, SIGNAL(networkNameChanged(QSystemNetworkInfo::NetworkMode,const QString &)), SLOT(onNetworkNameChanged(QSystemNetworkInfo::NetworkMode,const QString &)));
+ connect(mDeviceInfo, SIGNAL(currentProfileChanged(QSystemDeviceInfo::Profile)), SLOT(onCurrentProfileChanged(QSystemDeviceInfo::Profile)));
+
+ updateCurrentNetworkMode();
+ updateStatus();
+}
+
+/*!
+
+*/
+HsDeviceInfoListener::~HsDeviceInfoListener()
+{
+}
+
+/*!
+
+*/
+QString HsDeviceInfoListener::operatorName() const
+{
+ return QSystemNetworkInfo::networkName(mCurrentNetworkMode);
+}
+
+/*!
+
+*/
+HsDeviceInfoListener::HsDeviceInfoStatus HsDeviceInfoListener::status() const
+{
+ return mStatus;
+}
+
+/*!
+
+*/
+void HsDeviceInfoListener::onNetworkStatusChanged(QSystemNetworkInfo::NetworkMode networkMode, QSystemNetworkInfo::NetworkStatus networkStatus)
+{
+ Q_UNUSED(networkMode);
+ Q_UNUSED(networkStatus);
+ updateCurrentNetworkMode();
+ updateStatus();
+}
+
+/*!
+
+*/
+void HsDeviceInfoListener::onNetworkNameChanged(QSystemNetworkInfo::NetworkMode networkMode,const QString &networkName)
+{
+ Q_UNUSED(networkMode);
+ updateCurrentNetworkMode();
+ if(mCurrentNetworkMode != QSystemNetworkInfo::UnknownMode) {
+ qDebug() << "HsDeviceInfoListener::onNetworkNameChanged() - " << networkName;
+ emit networkNameChanged(networkName);
+ }
+ updateStatus();
+}
+
+/*!
+
+*/
+void HsDeviceInfoListener::onCurrentProfileChanged(QSystemDeviceInfo::Profile profile)
+{
+ Q_UNUSED(profile);
+ updateStatus();
+}
+
+/*!
+
+*/
+QSystemNetworkInfo::NetworkStatus HsDeviceInfoListener::networkStatus()
+{
+ return mNetworkInfo->networkStatus(mCurrentNetworkMode);
+}
+
+/*!
+
+*/
+void HsDeviceInfoListener::updateCurrentNetworkMode()
+{
+ //We are keen only GSM and WCDMA network connections.
+ //Other networks (WLAN etc.) are treated as UnknowMode.
+ qDebug() << "HsDeviceInfoListener::updateCurrentNetworkMode() - Entry: mCurrentNetworkMode == "
+ << mCurrentNetworkMode;
+ if(isConnected(QSystemNetworkInfo::GsmMode)) {
+ mCurrentNetworkMode = QSystemNetworkInfo::GsmMode;
+ } else if (isConnected(QSystemNetworkInfo::WcdmaMode)) {
+ mCurrentNetworkMode = QSystemNetworkInfo::WcdmaMode;
+ } else {
+ mCurrentNetworkMode = QSystemNetworkInfo::UnknownMode;
+ }
+ qDebug() << "HsDeviceInfoListener::updateCurrentNetworkMode() - Exit: mCurrentNetworkMode == "
+ << mCurrentNetworkMode;
+}
+
+/*!
+
+*/
+bool HsDeviceInfoListener::isConnected(QSystemNetworkInfo::NetworkMode mode)
+{
+ bool connected = false;
+
+ qDebug() << "HsDeviceInfoListener::isConnected():";
+ qDebug() << " - Mode:" << (mode == QSystemNetworkInfo::WcdmaMode ? "WcdmaMode" : "GsmMode");
+ QSystemNetworkInfo::NetworkStatus status = mNetworkInfo->networkStatus(mode);
+ switch (status) {
+ case QSystemNetworkInfo::Connected:
+ qDebug() << " - Status: Connected";
+ //Fall through
+ case QSystemNetworkInfo::HomeNetwork:
+ qDebug() << " - Status: HomeNetwork";
+ //Fall through
+ case QSystemNetworkInfo::Roaming:
+ qDebug() << " - Status: Roaming";
+ connected = true;
+ break;
+ default:
+ qDebug() << " - Status: " << status;
+ break;
+ };
+
+ qDebug() << " - Is connected:" << connected;
+
+ return connected;
+}
+
+/*!
+
+*/
+void HsDeviceInfoListener::updateStatus()
+{
+ qDebug() << "HsDeviceInfoListener::updateStatus() - Entry: mStatus == "
+ << mStatus;
+
+ HsDeviceInfoStatus currentStatus;
+ if ( mDeviceInfo->currentProfile() == QSystemDeviceInfo::OfflineProfile &&
+ simStatus() != QSystemDeviceInfo::SimNotAvailable) {
+ currentStatus = OfflineProfile;
+ } else if (mCurrentNetworkMode == QSystemNetworkInfo::UnknownMode) {
+ currentStatus = NoService;
+ } else {
+ currentStatus = ServiceAvailable;
+ }
+
+ if(mStatus != currentStatus) {
+ mStatus = currentStatus;
+ emit statusChanged(mStatus);
+ }
+ qDebug() << "HsDeviceInfoListener::updateStatus() - Exit: mStatus == "
+ << mStatus;
+}
+
+/*!
+
+*/
+QSystemDeviceInfo::SimStatus HsDeviceInfoListener::simStatus() const
+{
+ QSystemDeviceInfo::SimStatus qtSimStatus = QSystemDeviceInfo::SimNotAvailable;
+
+#ifdef Q_OS_SYMBIAN
+ TInt simCardStatus(ESimNotPresent);
+ RProperty symbianSimStatus;
+ qt_symbian_throwIfError( symbianSimStatus.Attach( KPSUidStartup, KPSSimStatus ) );
+ qt_symbian_throwIfError( symbianSimStatus.Get( simCardStatus ) );
+ symbianSimStatus.Close();
+
+ switch (simCardStatus) {
+ case ESimUsable:
+ // The Sim card is fully usable.
+ qtSimStatus = QSystemDeviceInfo::SingleSimAvailable;
+ qDebug() << "HsDeviceInfoListener::simStatus() - SingleSimAvailable";
+ break;
+ default:
+ //ESimReadable == The SIM card is not fully usable, but the emergency number can be read.
+ //ESimNotReady == The Sim card is present but not ready or usable.
+ //ESimNotPresent == The Sim card is not present.
+ //ESimNotSupported == SIM/RUIM is not supported. Some CDMA phones do not support a SIM/RUIM at all.
+ qtSimStatus = QSystemDeviceInfo::SimNotAvailable;
+ qDebug() << "HsDeviceInfoListener::simStatus() - SimNotAvailable";
+ break;
+ };
+#else
+ qtSimStatus = mDeviceInfo->simStatus();
+#endif
+
+ return qtSimStatus;
+}