diff -r 594d59766373 -r 7d48bed6ce0c telutils/keysequencerecognitionservice/src/manufacturerkeysequencehandler.cpp --- /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 +#include +#include +#include +#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 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; +}