--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneplugins/infowidgetplugin/infowidget/src/infowidgetnetworkhandler.cpp Tue Aug 31 15:14:29 2010 +0300
@@ -0,0 +1,337 @@
+/*
+ * Copyright (c) 2009 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 <networkhandlingproxy.h>
+#include <cnwsession.h>
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
+#include <settingsinternalcrkeys.h>
+#include "infowidgetnetworkhandler.h"
+#include "infowidgetlogging.h"
+
+/*!
+ \class InfoWidgetNetworkHandler
+ \brief Handles network specific functionality of
+ Operator info widget
+*/
+
+// Local constants
+const int KMcnValueOff = 0;
+const int KMcnValueOn = 1;
+
+/*!
+ InfoWidgetNetworkHandler::InfoWidgetNetworkHandler()
+*/
+InfoWidgetNetworkHandler::InfoWidgetNetworkHandler(QObject *parent)
+ :QObject(parent),
+ m_nwSession(NULL)
+{
+ DPRINT;
+ if (!createSession()) {
+ DCRITICAL << ": session creation failed!";
+ }
+}
+
+/*!
+ InfoWidgetNetworkHandler::~InfoWidgetNetworkHandler()
+*/
+InfoWidgetNetworkHandler::~InfoWidgetNetworkHandler()
+{
+ DPRINT;
+ try {
+ // Disable MCN setting,
+ // display client is being deleted
+ disableMcn();
+ } catch (const std::exception& ex) {
+ DCRITICAL << ": exception detected: " << ex.what();
+ }
+
+}
+
+/*!
+ InfoWidgetNetworkHandler::createSession()
+*/
+bool InfoWidgetNetworkHandler::createSession()
+{
+ DPRINT;
+ bool success(false);
+ if (!m_nwSession) {
+ QT_TRAP_THROWING(m_nwSession.reset(
+ CreateL(*this, m_nwInfo)));
+ if (m_nwSession) {
+ DPRINT << ": session created";
+ success = true;
+ }
+ } else {
+ DWARNING << ": session already created!";
+ }
+
+ return success;
+}
+
+/*!
+ InfoWidgetNetworkHandler::suspend()
+*/
+void InfoWidgetNetworkHandler::suspend()
+{
+ DPRINT;
+}
+
+/*!
+ InfoWidgetNetworkHandler::resume()
+*/
+void InfoWidgetNetworkHandler::resume()
+{
+ DPRINT;
+}
+
+/*!
+ InfoWidgetNetworkHandler::serviceProviderName()
+*/
+QString InfoWidgetNetworkHandler::serviceProviderName() const
+{
+ QString qBuf;
+ qBuf = QString((QChar*)m_nwInfo.iSPName.Ptr(),
+ m_nwInfo.iSPName.Length());
+ DPRINT << ": serviceProviderName: " << qBuf;
+
+ return qBuf;
+}
+
+/*!
+ InfoWidgetNetworkHandler::serviceProviderNameDisplayRequired()
+*/
+bool InfoWidgetNetworkHandler::serviceProviderNameDisplayRequired() const
+{
+ bool displayRequired(true);
+ if (m_nwInfo.iServiceProviderNameDisplayReq ==
+ RMobilePhone::KDisplaySPNNotRequired) {
+ displayRequired = false;
+ }
+ return displayRequired;
+}
+
+/*!
+ InfoWidgetNetworkHandler::homeZoneTextTag()
+*/
+QString InfoWidgetNetworkHandler::homeZoneTextTag() const
+{
+ QString qBuf;
+ qBuf = QString((QChar*)m_nwInfo.iViagTextTag.Ptr(),
+ m_nwInfo.iViagTextTag.Length());
+ return qBuf;
+}
+
+/*!
+ InfoWidgetNetworkHandler::homeZoneIndicatorType()
+*/
+int InfoWidgetNetworkHandler::homeZoneIndicatorType() const
+{
+ int indicatorType = m_nwInfo.iViagIndicatorType;
+ return indicatorType;
+}
+
+/*!
+ InfoWidgetNetworkHandler::enableMcn()
+*/
+void InfoWidgetNetworkHandler::enableMcn()
+{
+ DPRINT;
+ if (!readMcnDisplayState()) {
+ DPRINT << ": enabling mcn display cenrep";
+ writeMcnDisplayState(true);
+ }
+}
+
+/*!
+ InfoWidgetNetworkHandler::disableMcn()
+*/
+void InfoWidgetNetworkHandler::disableMcn()
+{
+ DPRINT;
+ if (readMcnDisplayState()) {
+ DPRINT << ": disabling mcn display cenrep";
+ writeMcnDisplayState(false);
+ }
+}
+
+/*!
+ InfoWidgetNetworkHandler::mcnName()
+*/
+QString InfoWidgetNetworkHandler::mcnName() const
+{
+ QString qBuf;
+ qBuf = QString((QChar*)m_nwInfo.iMCNName.Ptr(),
+ m_nwInfo.iMCNName.Length());
+ DPRINT << ": mcnName: " << qBuf;
+ return qBuf;
+}
+
+/*!
+ InfoWidgetNetworkHandler::mcnIndicatorType()
+*/
+int InfoWidgetNetworkHandler::mcnIndicatorType() const
+{
+ DPRINT << ": mcnIndicatorType: " << m_nwInfo.iMCNIndicatorType;
+ return m_nwInfo.iMCNIndicatorType;
+}
+
+/*!
+ InfoWidgetNetworkHandler::networkRegistrationStatus()
+*/
+int InfoWidgetNetworkHandler::networkRegistrationStatus() const
+{
+ DPRINT << ": networkRegistrationStatus: "
+ << static_cast<int>(m_nwInfo.iRegistrationStatus);
+ return static_cast<int>(m_nwInfo.iRegistrationStatus);
+}
+
+/*!
+ InfoWidgetNetworkHandler::isOnline()
+
+ Check if network registration status is registered and
+ return status accordingly
+*/
+bool InfoWidgetNetworkHandler::isOnline() const
+{
+ bool online(false);
+
+ if (!m_nwSession.isNull()) {
+ switch (networkRegistrationStatus()) {
+ case ENWRegisteredBusy: // Fall through
+ case ENWRegisteredOnHomeNetwork: // Fall through
+ case ENWRegisteredRoaming:
+ online = true;
+ break;
+ default:
+ break;
+ }
+ }
+ DPRINT << ": online: " << online;
+ return online;
+}
+
+/*!
+ InfoWidgetNetworkHandler::HandleNetworkMessage()
+
+ Implementation for MNWMessageObserver callback
+ function
+*/
+void InfoWidgetNetworkHandler::HandleNetworkMessage(
+ const TNWMessages aMessage )
+{
+ DPRINT << ": message: " << aMessage;
+
+ bool acceptedMessage = false;
+ switch (aMessage) {
+ case ENWMessageCurrentCellInfoMessage: // Fall through
+ case ENWMessageServiceProviderNameChange: // Fall through
+ case ENWMessageNetworkRegistrationStatusChange: // Fall through
+ acceptedMessage = true;
+ break;
+ default:
+ // not interesting message, filter out
+ DPRINT << ": message filtered out";
+ acceptedMessage = false;
+ }
+
+ if (acceptedMessage) {
+ int result = 0;
+ QT_TRYCATCH_ERROR(result, emit networkDataChanged());
+ if (0 != result) {
+ DPRINT << ": Exception occured while emitting signal:" << result;
+ }
+ }
+}
+
+/*!
+ InfoWidgetNetworkHandler::HandleNetworkError()
+
+ Implementation for MNWMessageObserver callback
+ function
+*/
+void InfoWidgetNetworkHandler::HandleNetworkError(
+ const TNWOperation aOperation,
+ TInt aErrorCode )
+{
+ DPRINT << ": operation: " << aOperation <<
+ " error code: " << aErrorCode;
+
+ // Reset invalid data
+ switch (aOperation) {
+ case MNWMessageObserver::ENWGetServiceProviderName:
+ m_nwInfo.iServiceProviderNameDisplayReq =
+ RMobilePhone::KDisplaySPNNotRequired;
+ m_nwInfo.iSPName.Zero();
+ break;
+ default:
+ break;
+ }
+
+ // Emit error signal
+ int result = 0;
+ QT_TRYCATCH_ERROR(result, emit networkError(
+ static_cast<int>(aOperation), static_cast<int>(aErrorCode)));
+ if (0 != result) {
+ DPRINT << ": Exception occured while emitting signal:" << result;
+ }
+}
+
+/*!
+ Write Mcn cenrep key.
+*/
+void InfoWidgetNetworkHandler::writeMcnDisplayState(bool enabled)
+{
+ QScopedPointer<XQSettingsManager> settingsManager(new XQSettingsManager);
+ XQSettingsKey settingsKey(XQSettingsKey::TargetCentralRepository,
+ KCRUidNetworkSettings.iUid, KSettingsMcnDisplay);
+ int value;
+ if (enabled) {
+ value = KMcnValueOn;
+ } else {
+ value = KMcnValueOff;
+ }
+
+ bool result = settingsManager->writeItemValue(settingsKey, value);
+ DPRINT << ": write success: " << result << " mcn enabled: " << enabled;
+
+}
+
+/*!
+ Read Mcn cenrep key.
+*/
+bool InfoWidgetNetworkHandler::readMcnDisplayState()
+{
+ QScopedPointer<XQSettingsManager> settingsManager(new XQSettingsManager);
+ XQSettingsKey settingsKey(XQSettingsKey::TargetCentralRepository,
+ KCRUidNetworkSettings.iUid, KSettingsMcnDisplay);
+ bool success(false);
+ int value = settingsManager->readItemValue(
+ settingsKey,
+ XQSettingsManager::TypeInt).toInt(&success);
+
+ bool mcnEnabled(false);
+ if (success && value == KMcnValueOn) {
+ mcnEnabled = true;
+ }
+
+ DPRINT << ": read success: " << success << " mcn enabled: " << mcnEnabled;
+ return mcnEnabled;
+}
+
+
+// End of File.