diff -r 77415202bfc8 -r fcbbe021d614 connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectionmonitoring/cellularindicatorplugin/src/cellularindicatorplugin.cpp Fri Apr 16 15:21:37 2010 +0300 @@ -0,0 +1,257 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cellularindicatorplugin.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cellularindicatorpluginTraces.h" +#endif + +Q_EXPORT_PLUGIN(CellularIndicatorPlugin) + +const static char IndicatorType[] = + "com.nokia.hb.indicator.connectivity.cellularindicatorplugin/1.0"; + +/*! + CellularIndicatorPlugin::CellularIndicatorPlugin + */ +CellularIndicatorPlugin::CellularIndicatorPlugin() : + HbIndicatorInterface(IndicatorType, GroupPriorityAverage, + InteractionActivated), + mError(0) +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_CELLULARINDICATORPLUGIN_ENTRY ); + mIndicatorTypes << + "com.nokia.hb.indicator.connectivity.cellularindicatorplugin/1.0"; + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_CELLULARINDICATORPLUGIN_EXIT ); +} + +/*! + CellularIndicatorPlugin::~CellularIndicatorPlugin + */ +CellularIndicatorPlugin::~CellularIndicatorPlugin() +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_DCELLULARINDICATORPLUGIN_ENTRY ); + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_DCELLULARINDICATORPLUGIN_EXIT ); +} + +/*! + CellularIndicatorPlugin::indicatorTypes + */ +QStringList CellularIndicatorPlugin::indicatorTypes() const +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_INDICATORTYPES_ENTRY ); + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_INDICATORTYPES_EXIT ); + return mIndicatorTypes; +} + +/*! + CellularIndicatorPlugin::accessAllowed + */ +bool CellularIndicatorPlugin::accessAllowed(const QString &indicatorType, + const HbSecurityInfo *securityInfo) const +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_ACCESSALLOWED_ENTRY ); + Q_UNUSED(indicatorType) + Q_UNUSED(securityInfo) + + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_ACCESSALLOWED_EXIT ); + return true; +} + +/*! + CellularIndicatorPlugin::createIndicator + */ +HbIndicatorInterface* CellularIndicatorPlugin::createIndicator( + const QString &indicatorType) +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_CREATEINDICATOR_ENTRY ); + + Q_UNUSED(indicatorType) + + // Install localization + QTranslator *translator = new QTranslator(this); + + QString lang = QLocale::system().name(); + QString path = "Z:/resource/qt/translations/"; + translator->load("cellularindicatorplugin_" + lang, path); + qApp->installTranslator(translator); + + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_CREATEINDICATOR_EXIT ); + return this; +} + +/*! + CellularIndicatorPlugin::error + */ +int CellularIndicatorPlugin::error() const +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_ERROR_ENTRY ); + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_ERROR_EXIT ); + return mError; +} + +/*! + CellularIndicatorPlugin::handleClientRequest + */ +bool CellularIndicatorPlugin::handleClientRequest(RequestType type, + const QVariant ¶meter) +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_HANDLECLIENTREQUEST_ENTRY ); + + bool handled(false); + + switch (type) { + case RequestActivate: + if (mParameter != parameter) { + mParameter = parameter; + emit dataChanged(); + } + handled = true; + break; + + case RequestDeactivate: + mParameter.clear(); + break; + + default: + // Do nothing + break; + } + + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_HANDLECLIENTREQUEST_EXIT ); + return handled; +} + +/*! + CellularIndicatorPlugin::handleInteraction + */ +bool CellularIndicatorPlugin::handleInteraction(InteractionType type) +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_HANDLEINTERACTION_ENTRY ); + + Q_UNUSED(type) + bool handled = false; + + switch(type) { + case InteractionActivated: + //connect error() to slot processError() to get error, + QObject::connect( &process, SIGNAL(error(QProcess::ProcessError)), + this, SLOT(processError(QProcess::ProcessError))); + + // Show connection view + process.start("connview"); + handled = true; + break; + + default: + break; + } + + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_HANDLEINTERACTION_EXIT ); + return handled; +} + +/*! + CellularIndicatorPlugin::indicatorData +*/ +QVariant CellularIndicatorPlugin::indicatorData(int role) const +{ + OstTraceFunctionEntry0( CELLULARINDICATORPLUGIN_INDICATORDATA_ENTRY ); + QVariant ret = NULL; + + switch(role) { + case PrimaryTextRole: + ret = QString(hbTrId("txt_occ_dblist_cellular_data")); + break; + + case SecondaryTextRole: + if (mParameter.isValid() && (mParameter.type() == QVariant::List)) { + + QList indicatorInfo; + indicatorInfo = mParameter.toList(); + + if (!indicatorInfo.count()) { + // No entries on the list -> don't even try to use this + break; + } + + if ( (indicatorInfo[0].toInt() > 1) && indicatorInfo.count() ) { + + // More than one connection -> show number of connections + QString str = QString(hbTrId("txt_occ_dblist_cellular_data_val_l1_connections")); + ret = str.arg(indicatorInfo[0].toInt()); + } + else if ( indicatorInfo[0].toInt() && (indicatorInfo.count() >= 2)) { + + // Only one connection -> show name of the iap + QString iapName; + iapName = indicatorInfo[1].toString(); + QString str = QString(hbTrId("txt_occ_dblist_cellular_data_val_1_connected")); + ret = str.arg(iapName); + } + } + break; + + case IconNameRole: + case DecorationNameRole: + // Return the icon + ret = HbIcon("qtg_small_gprs"); + break; + + default: + // Do nothing + break; + } + + OstTraceFunctionExit0( CELLULARINDICATORPLUGIN_INDICATORDATA_EXIT ); + return ret; +} + +/*! + The processError is a handler for error codes. +*/ +void CellularIndicatorPlugin::processError(QProcess::ProcessError err) + { + OstTraceFunctionEntry1(CELLULARINDICATORPLUGIN_PROCESSERROR_ENTRY, this); + + switch (err) { + case QProcess::FailedToStart: + case QProcess::Crashed: + case QProcess::Timedout: + case QProcess::ReadError: + case QProcess::WriteError: + case QProcess::UnknownError: + OstTrace1( CELLULARINDICATORPLUGIN_ERR,PROCESSERROR_KNOWN,"Process Error %u", err); + break; + default: + OstTrace1( CELLULARINDICATORPLUGIN_ERR,PROCESSERROR_UNKNOWN,"Unknown Process Error %u", err); + break; + } + OstTraceFunctionExit1(CELLULARINDICATORPLUGIN_PROCESSERROR_EXIT, this); + } +