telutils/keysequencerecognitionservice/src/manufacturerkeysequencehandler.cpp
branchRCL_3
changeset 19 7d48bed6ce0c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telutils/keysequencerecognitionservice/src/manufacturerkeysequencehandler.cpp	Tue Aug 31 15:45:17 2010 +0300
@@ -0,0 +1,162 @@
+/*!
+* 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: Implements manufacturer key sequence handling.
+*
+*/
+
+#include <QDebug>
+#include <xqserviceutil.h>
+#include <xqservicerequest.h>
+#include <hbapplication.h>
+#include "manufacturerkeysequencehandler.h"
+#include "keysequencerecognitionservicedefs.h"
+#include "keysequencerecognitionservicelog.h"
+
+/*!
+  ManufacturerKeySequenceHandler::ManufacturerKeySequenceHandler.
+ */
+ManufacturerKeySequenceHandler::ManufacturerKeySequenceHandler(
+    QObject* parent)
+    : 
+    KeySequenceHandler(parent),
+    m_currentRequest(0)
+{
+    DPRINT_METHODENTRYEXIT;
+    
+    setKeySequenceValidator(
+        QRegExp::escape(KCodeSwVersion) + "|" +
+        QRegExp::escape(KCodeActivateRfsNormal)  + "|" +
+        QRegExp::escape(KCodeActivateRfsDeep) + "|" +
+        QRegExp::escape(KCodeBtAddress) + "|" +
+        QRegExp::escape(KCodeRFLoopback));
+    
+    m_codeToInterfaceMappings[KCodeSwVersion] = InterfaceDescription(
+        "com.nokia.services", "devicemanager", "showVersionNumber()");
+    
+    m_codeToInterfaceMappings[KCodeActivateRfsNormal] = InterfaceDescription(
+        "com.nokia.symbian", "IFactoryReset", "showResetUi()");
+    m_codeToInterfaceMappings[KCodeActivateRfsDeep] = InterfaceDescription(
+        "com.nokia.symbian", "IFactoryReset", "showResetUi()");
+    
+    m_codeToInterfaceMappings[KCodeBtAddress] = InterfaceDescription(
+        "com.nokia.services", "bluetooth", "showBluetoothDeviceAddress()");
+    m_codeToInterfaceMappings[KCodeRFLoopback] = InterfaceDescription(
+        "com.nokia.services", "bluetooth", "showBluetoothLoopback()");
+}
+
+
+/*!
+  ManufacturerKeySequenceHandler::~ManufacturerKeySequenceHandler.
+ */
+ManufacturerKeySequenceHandler::~ManufacturerKeySequenceHandler()
+{
+    DPRINT_METHODENTRYEXIT;
+}
+
+
+/*!
+  ManufacturerKeySequenceHandler::executeKeySequence.
+ */
+bool ManufacturerKeySequenceHandler::executeKeySequence(
+    const QString &keySequence)
+{
+    DPRINT_METHODENTRYEXIT;
+    
+    bool handled = true;
+    
+    if (m_codeToInterfaceMappings.contains(keySequence)) {
+        handled = issueServiceRequest(m_codeToInterfaceMappings[keySequence]);
+    } else {
+        handled = false;
+    }
+    
+    return handled;
+}
+
+
+/*!
+  ManufacturerKeySequenceHandler::issueServiceRequest.
+ */
+bool ManufacturerKeySequenceHandler::issueServiceRequest(
+    const InterfaceDescription &description)
+{
+    DPRINT_METHODENTRYEXIT;
+    
+    bool serviceRequestOk = false;
+    if (m_currentRequest.isNull()) {
+        const bool isEmbedded = false;
+        QScopedPointer<XQAiwRequest> request(m_aiwManager.create(
+            description.m_service, 
+            description.m_interface, 
+            description.m_method, 
+            isEmbedded));
+        
+        if (!request.isNull()) {
+            m_currentRequest = request.data();
+            
+            // Due to a Qt Highway bug in assignment operator implementation we
+            // need to set request as asynchronous with a setter function.
+            request->setSynchronous(false);
+            
+            connect(
+                request.data(), SIGNAL(requestOk(const QVariant &)), 
+                this, SLOT(requestOk(const QVariant &)));
+            connect(
+                request.data(), SIGNAL(requestError(int, const QString&)), 
+                this, SLOT(requestError(int, const QString&)));
+            
+            serviceRequestOk = request->send();
+            if (serviceRequestOk) {
+                m_currentRequest = request.take();
+            } else {
+                // On a controlled error Qt Highway should call requestError,
+                // so clean scoped pointer here.
+                request.take();
+            }
+        }
+    }
+    
+    return serviceRequestOk;
+}
+
+
+/*!
+  ManufacturerKeySequenceHandler::requestOk.
+ */
+void ManufacturerKeySequenceHandler::requestOk(
+    const QVariant &returnValue)
+{
+    DPRINT_METHODENTRYEXIT;
+    
+    Q_UNUSED(returnValue)
+    
+    delete m_currentRequest;
+    m_currentRequest = 0;
+}
+
+
+/*!
+  ManufacturerKeySequenceHandler::requestError.
+ */
+void ManufacturerKeySequenceHandler::requestError(
+    int error, const QString& errorMessage)
+{
+    DPRINT_METHODENTRYEXIT;
+    
+    Q_UNUSED(error)
+    Q_UNUSED(errorMessage)
+    
+    delete m_currentRequest;
+    m_currentRequest = 0;
+}