locationsystemui/locationsysui/posindicator/posindicatorplugin/src/posindicator.cpp
changeset 33 834e27cad510
child 37 e175e2ba2fb0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/src/posindicator.cpp	Tue Jul 06 14:44:11 2010 +0300
@@ -0,0 +1,383 @@
+/*
+* 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:  Implementation for positioning indicator plugin class
+*
+*/
+
+#include "posindicator.h"
+#include "posindicatorinfo.h"
+#include "posgeoaddress.h"
+#include "apilogger.h"
+
+#include <QtPlugin>
+#include <QVariant>
+#include <QDebug>
+#include <QTranslator>
+#include <QTCore>
+
+
+Q_EXPORT_PLUGIN(PosIndicatorPlugin)
+
+// This plugin implements just one indicator type
+const QString typeOfIndicator ="com.nokia.positioning.indicatorplugin/1.0";
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::PosIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+PosIndicatorPlugin::PosIndicatorPlugin() : mError(0), mTranslator(0)
+{
+    #ifndef QT_NO_DEBUG_OUTPUT
+    ApiLogger::OpenLogFile();
+        #ifndef POSINDICATOR_NFT
+        qInstallMsgHandler(ApiLogger::MyOutputHandler);
+        #endif
+    #endif
+        
+    qDebug() << "+ PosIndicatorPlugin::PosIndicatorPlugin()";
+    
+    mTranslator = new QTranslator();
+    
+    QString locale = QLocale::system().name();
+    QString path = "z:/resource/qt/translations/";
+    bool loaded = false;
+    loaded = mTranslator->load(path + QString("lilocationmw_") + locale);
+    if (loaded == false)
+        {
+        loaded = mTranslator->load("lilocationmw", ":/translations");
+        }
+    if (loaded)
+        {
+        qApp->installTranslator(mTranslator);
+        }
+        
+    mIndicatorTypes.append(typeOfIndicator);
+    qDebug() << "- PosIndicatorPlugin::PosIndicatorPlugin()";
+
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::~PosIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+PosIndicatorPlugin::~PosIndicatorPlugin()
+{   
+    qDebug() << "+ PosIndicatorPlugin::~PosIndicatorPlugin()";
+    if (mTranslator)
+    {
+    if (mTranslator->isEmpty() == false)
+        qApp->removeTranslator(mTranslator);
+    delete mTranslator;
+    }
+	qInstallMsgHandler(0);
+    ApiLogger::CloseLogFile();
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::indicatorTypes
+// ---------------------------------------------------------------------------
+//
+QStringList PosIndicatorPlugin::indicatorTypes() const
+{
+	qDebug() << "+ PosIndicatorPlugin::indicatorTypes()";
+	// Return indicator types this plugin implements
+    return mIndicatorTypes;
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::createIndicator
+// ---------------------------------------------------------------------------
+//
+HbIndicatorInterface* PosIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+{
+	qDebug() << "+ PosIndicatorPlugin::createIndicator()";
+	ApiLogger::NftLogger("Before launching indicator");
+    PosIndicator* ind = new PosIndicator( indicatorType );
+    ApiLogger::NftLogger("After launching indicator");
+    return ind;
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::accessAllowed
+// ---------------------------------------------------------------------------
+//
+bool PosIndicatorPlugin::accessAllowed(const QString &/*indicatorType*/, const QVariantMap &securityInfo) const
+{
+	qDebug() << "+ PosIndicatorPlugin::accessAllowed()";
+	QVariant value = securityInfo.value("sym-caps");
+	if ((value.toInt() && ECapabilityLocation) == true )
+	    {
+        qDebug() << "Location capability present, pass";
+        return true;
+	    }
+	else
+	    {
+        qDebug() << "Location capability absent, fail";
+        return false;
+	    }
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::error
+// ---------------------------------------------------------------------------
+//
+int PosIndicatorPlugin::error() const
+{
+	qDebug() << "+ PosIndicatorPlugin::error()";
+    return mError;
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::PosIndicator
+// ---------------------------------------------------------------------------
+//
+PosIndicator::PosIndicator(const QString &indicatorType) :
+    HbIndicatorInterface(indicatorType, SettingCategory, NoInteraction),
+    mDisplayString(QString(hbTrId("txt_loe_dblist_positioning_val_acquiring_position"))),
+    mPosIndicatorInfo(0),
+    processedAddess(false)
+{
+	qDebug() << "+ PosIndicator::PosIndicator()";
+	qDebug() << "- PosIndicator::PosIndicator()";
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::RefreshPosIndicatorPane
+// ---------------------------------------------------------------------------
+//
+void PosIndicator::refreshPosIndicatorPane(PosGeoAddress& posGeoAddress, int error)
+    {
+	qDebug() << "+ PosIndicator::refreshPosIndicatorPane()";
+    if(error!=KErrNone)
+        {
+        qDebug() << "- PosIndicator::refreshPosIndicatorPane(),error code : "<<error;
+        return;
+        }
+    qDebug() << "latitude : "<< posGeoAddress.latitude() << ", longitude : "<<posGeoAddress.longitude();
+    TBool addressResolved = false;
+    qDebug() << " No Errors.";
+    mDisplayString.clear();
+    if(!posGeoAddress.number().isEmpty())
+        {
+        qDebug() << "Number - %s"<<posGeoAddress.number();
+
+        addressResolved = true;
+        mDisplayString = mDisplayString + QString(posGeoAddress.number()) + QString(' '); 
+        }
+    if(!posGeoAddress.street().isEmpty())
+        {
+        qDebug() << "street - %d"<<posGeoAddress.street();
+
+        addressResolved = true;
+        mDisplayString = mDisplayString + QString(posGeoAddress.street()) + QString(' ');
+        }
+    if(!posGeoAddress.district().isEmpty())
+        {
+        qDebug() << "district - %s"<<posGeoAddress.district();
+
+        addressResolved = true;
+        mDisplayString = mDisplayString + QString(posGeoAddress.district()) + QString(' ');
+        }
+    if(!posGeoAddress.city().isEmpty())
+        {
+        qDebug() << "city - %s"<<posGeoAddress.city();
+
+        addressResolved = true;
+        mDisplayString = mDisplayString + QString(posGeoAddress.city()) + QString(' ');
+        }
+    if(!posGeoAddress.state().isEmpty())
+        {
+        qDebug() << "state - %s"<<posGeoAddress.state();
+
+        addressResolved = true;
+        mDisplayString = mDisplayString + QString(posGeoAddress.state()) + QString(' ');
+        }
+    if(!posGeoAddress.country().isEmpty())
+        {
+        qDebug() << "country - %s"<<posGeoAddress.country();
+
+        addressResolved = true;
+        mDisplayString = mDisplayString + QString(posGeoAddress.country());
+        ApiLogger::NftLogger("address information available");
+        }
+    
+    if(addressResolved == false)
+            {
+                qDebug() << "Address Not available, displaying lat,long";
+                QString latitude, longitude;
+                latitude = QString("latitude");
+                ConvertToDMSFormat(latitude, posGeoAddress.latitude());
+                longitude = QString("longitude");
+                ConvertToDMSFormat(longitude, posGeoAddress.longitude());
+
+                QString comma(", ");
+                mDisplayString.clear();
+                mDisplayString.append(latitude);
+                mDisplayString.append(comma);
+                mDisplayString.append(longitude);
+                ApiLogger::NftLogger("Position information available");
+            }
+    
+    if( processedAddess == true)
+        {
+        processedAddess = false;
+        }
+    else
+        {
+        processedAddess = true;
+        }
+    
+    emit dataChanged();
+	qDebug() << "- PosIndicator::refreshPosIndicatorPane()";
+    }
+
+// ---------------------------------------------------------------------------
+// PosIndicator::~PosIndicator
+// ---------------------------------------------------------------------------
+//
+PosIndicator::~PosIndicator()
+{
+    qDebug() << "+ PosIndicator::~PosIndicator()";
+    if(mPosIndicatorInfo)
+    		{
+			mPosIndicatorInfo->cancelPosInfo();
+		    delete mPosIndicatorInfo;
+		    mPosIndicatorInfo = 0;
+				}    			
+    qDebug() << "- PosIndicator::~PosIndicator()";
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::indicatorData
+// ---------------------------------------------------------------------------
+//
+QVariant PosIndicator::indicatorData(int role) const
+{
+   qDebug() << "+ PosIndicator::indicatorData(), role = "<< role;
+//    Q_UNUSED(role)
+        
+    if (role == PrimaryTextRole) {
+        return QString(hbTrId("txt_loe_dblist_positioning"));
+    } else if (role == SecondaryTextRole) {
+        return mDisplayString;   
+    } else if (role == DecorationNameRole) {
+        return QString("qtg_mono_gps");
+    } else if (role == MonoDecorationNameRole  ) {
+        return QString("qtg_mono_gps");
+    }
+     else
+        return QVariant();
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::refreshData
+// ---------------------------------------------------------------------------
+//
+bool PosIndicator::refreshData()
+    {
+    qDebug() << "+ PosIndicator::refreshData()";
+    if(!mPosIndicatorInfo)
+    {
+    qDebug() << "First Call";
+    	mPosIndicatorInfo = new PosIndicatorInfo();
+			if(!mPosIndicatorInfo)
+	    		{
+                qDebug() << "Error in constructing PosIndicatorInfo class";
+                throw;
+	    		}
+	    		
+     	QObject::connect(mPosIndicatorInfo, SIGNAL(posInfoUpdated(PosGeoAddress&, int)), this, SLOT(refreshPosIndicatorPane(PosGeoAddress&, int))); 
+	  }
+		ApiLogger::NftLogger("Before requesting position information");
+	  qDebug() << "Call requestPosInfo()";
+    mPosIndicatorInfo->requestPosInfo();
+    return true;
+    }
+
+// ---------------------------------------------------------------------------
+// PosIndicator::ConvertToDMSFormat
+// ---------------------------------------------------------------------------
+//
+void PosIndicator::ConvertToDMSFormat(QString &displayString, double decimal)
+{
+    qDebug() << "+ PosIndicator::ConvertToDMSFormat()";
+
+    int tempNum;
+    QString temp;
+    float tempDec;
+    
+    int degrees = (int)decimal;
+    
+    tempDec = decimal - degrees;
+    tempDec = tempDec * 60;
+    int minutes = (int)tempDec;
+
+    tempDec = tempDec - minutes;
+    tempDec = tempDec * 60;
+    int seconds = (int)tempDec;
+    
+    tempDec = tempDec - seconds;
+    tempNum = tempDec * 100;
+ 
+    QVariant varDegrees(degrees);
+    QVariant varMinutes(minutes);
+    QVariant varSeconds(seconds);
+    QVariant varTemp(tempNum);
+       
+    if (QString::compare(displayString, "latitude") == KErrNone)
+    {
+    displayString.clear();
+
+    if (decimal>=0)
+        {
+        displayString = QString(hbTrId("txt_loe_list_l1l2l3l4n"))
+                                .arg(varDegrees.toString())
+                                .arg(varMinutes.toString())
+                                .arg(varSeconds.toString())
+                                .arg(varTemp.toString());
+        }
+    else
+        {
+        displayString = QString(hbTrId("txt_loe_list_l1l2l3l4s"))
+                                .arg(varDegrees.toString())
+                                .arg(varMinutes.toString())
+                                .arg(varSeconds.toString())
+                                .arg(varTemp.toString());
+        }
+    }
+    else
+        {
+        displayString.clear();
+        {
+        if (decimal>=0)
+            {
+            displayString = QString(hbTrId("txt_loe_list_l1l2l3l4e"))
+                                .arg(varDegrees.toString())
+                                .arg(varMinutes.toString())
+                                .arg(varSeconds.toString())
+                                .arg(varTemp.toString());
+            }
+        else
+            {
+            displayString = QString(hbTrId("txt_loe_list_l1l2l3l4w"))
+                                .arg(varDegrees.toString())
+                                .arg(varMinutes.toString())
+                                .arg(varSeconds.toString())
+                                .arg(varTemp.toString());
+            }
+        }
+        }
+    qDebug() << "- PosIndicator::ConvertToDMSFormat()";
+}