systemsettings/accindicatorplugin/src/accindicator.cpp
branchRCL_3
changeset 19 924385140d98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemsettings/accindicatorplugin/src/accindicator.cpp	Tue Aug 31 15:24:25 2010 +0300
@@ -0,0 +1,250 @@
+/*
+ * 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 "accindicator.h"
+
+#include <QtPlugin>
+#include <QProcess>
+#include <accpolgenericiddefinitions.h>
+
+Q_EXPORT_PLUGIN(AccIndicatorPlugin)
+const static char IndicatorType[] = "com.nokia.accessory.indicatorplugin/1.0";
+QString KAccMode = "AccMode";
+QString KAccType = "AccType";
+
+AccIndicatorPlugin::AccIndicatorPlugin() :
+HbIndicatorInterface(IndicatorType,
+        HbIndicatorInterface::SettingCategory,
+        InteractionActivated)
+    {
+    mIndicatorTypes << "com.nokia.accessory.indicatorplugin/1.0";
+    }
+
+AccIndicatorPlugin::~AccIndicatorPlugin()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicatorPlugin::indicatorTypes
+// returns the indicator types handled by this plugin
+// ----------------------------------------------------------------------------
+
+QStringList AccIndicatorPlugin::indicatorTypes() const
+    {
+    return mIndicatorTypes;
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicatorPlugin::createIndicator
+// creates an indicator.
+// ----------------------------------------------------------------------------
+
+HbIndicatorInterface* AccIndicatorPlugin::createIndicator(
+        const QString &indicatorType)
+    {
+    Q_UNUSED(indicatorType)
+    return this;
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicatorPlugin::error
+// returns the error code.
+// ----------------------------------------------------------------------------
+
+int AccIndicatorPlugin::error() const
+    {
+    return mError;
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicatorPlugin::accessAllowed
+// check for the access rights of the client. As there are no restrictions for 
+// this plugin it always returns true.
+// ----------------------------------------------------------------------------
+
+bool AccIndicatorPlugin::accessAllowed(const QString &indicatorType,const QVariantMap &securityInfo) const
+    {
+    Q_UNUSED(indicatorType)
+    Q_UNUSED(securityInfo)
+
+    return true;
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicator::handleInteraction
+// called when the user interacts with the indicator.Enable the interaction only
+// for headset,tty and tv-out for user to change the settings.
+// ----------------------------------------------------------------------------
+bool AccIndicatorPlugin::handleInteraction(InteractionType type)
+    {
+    bool handled = false;
+    if (type == InteractionActivated) 
+        {
+        // If it is 3-pole ( i.e., HeadSet or TTY ) and TV-Out enable the handleInteraction() to change the settings.
+        if(mAccMode == EAccModeWiredHeadset || mAccMode == EAccModeWirelessHeadset || mAccMode == EAccModeTextDevice || mAccMode == EAccModeTVOut )
+            {
+            QObject::connect( &mProcess, SIGNAL(error(QProcess::ProcessError)),                       
+                              this, SLOT(processError(QProcess::ProcessError)));
+
+            QVariant mode,type;
+            mode.setValue((int)mAccMode); 
+            type.setValue((int)mAccType);
+            mArgs.append(mode.toString());
+            mArgs.append(type.toString());
+            
+            // Launch the process to show the view.
+            mProcess.start("accindicatorsettings" , mArgs);
+            handled = true;
+            }
+        }
+    return handled;
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicator::indicatorData
+// returns the name and icon to be displayed in the universal indicator menu.
+// ----------------------------------------------------------------------------
+QVariant AccIndicatorPlugin::indicatorData(int role) const
+    {
+    switch(role)
+        {
+        //for displaying the string in indicator.
+        case PrimaryTextRole: 
+            {
+            QString type(mDisplayName);
+            return type;
+            }
+        //for displaying the icon in indicator.
+        case MonoDecorationNameRole:
+            {
+            QString iconName;
+            if(mAccType == KPCWired || mAccType == KPCUSB)
+                {
+                iconName = QString("z:/resource/accindicator/wired_accessory.svg");
+                }
+            else if (mAccType == KPCBluetooth || mAccType == KPCInfraRed)
+                {
+                iconName = QString("z:/resource/accindicator/wireless_accessory.svg");
+                }
+            return iconName;
+            }
+        default: 
+            return QVariant();      
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicatorPlugin::handleClientRequest
+// this function gets called when client activates plugin
+// ----------------------------------------------------------------------------
+bool AccIndicatorPlugin::handleClientRequest( RequestType type, 
+        const QVariant &parameter)
+    {    
+    bool handled(false);
+    switch (type) {
+        case RequestActivate:
+            {
+            // Get the params(acctype and mode) from the hbindicator.activate() which is called from sysap.
+            
+            QVariantMap mapValues = parameter.toMap();
+            if(mapValues.contains(KAccMode))
+                {
+                mAccMode = static_cast<TAccMode>(mapValues.value(KAccMode).toInt());
+                }
+            if(mapValues.contains(KAccType))
+                {
+                mAccType = mapValues.value(KAccType).toInt();
+                }
+
+            // prepare the name to be displayed in the universal indicator menu.
+            prepareDisplayName();
+            emit dataChanged();
+            handled =  true;
+            }
+            break;
+        case RequestDeactivate:
+            {
+            // reset data 
+            mDisplayName = QString();
+            emit deactivate();
+            }
+            break;
+        default:
+            break;
+    }
+    return handled;
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicator::prepareDisplayName
+// prepare the name to be displayed in the indicator menu.
+// ----------------------------------------------------------------------------
+void AccIndicatorPlugin::prepareDisplayName()
+    {
+    mDisplayName.clear();
+    switch(mAccMode)
+        {
+        case EAccModeWiredHeadset:
+            mDisplayName.append(QString("Wired Headset"));
+            break;
+        case EAccModeWirelessHeadset:
+            mDisplayName.append(QString("Wireless Headset"));
+            break;
+        case EAccModeWiredCarKit:
+            mDisplayName.append(QString("Wired CarKit"));
+            break;
+        case EAccModeWirelessCarKit:
+            mDisplayName.append(QString("Wireless Carkit"));
+            break;
+        case EAccModeTextDevice:
+            mDisplayName.append(QString("TTY"));
+            break;
+        case EAccModeLoopset:
+            mDisplayName.append(QString("LoopSet"));
+            break;
+        case EAccModeMusicStand:
+            mDisplayName.append(QString("Music Stand"));
+            break;
+        case EAccModeTVOut:
+            mDisplayName.append(QString("TV Out"));
+            break;
+        case EAccModeHeadphones:
+            mDisplayName.append(QString("Head Phones"));
+            break;
+        default :
+            mDisplayName.append(QString("Unknown"));
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// AccIndicator::processError
+// handle the error conditions reurned by the QProcess.
+// ----------------------------------------------------------------------------
+
+void AccIndicatorPlugin::processError(QProcess::ProcessError err)
+    {
+    switch (err) {   
+        case QProcess::FailedToStart: 
+        case QProcess::Crashed: 
+        case QProcess::Timedout: 
+        case QProcess::ReadError: 
+        case QProcess::WriteError: 
+        case QProcess::UnknownError:
+             break;  
+        default:
+            break;
+        }
+    }