diff -r 5d007b20cfd0 -r cd2778e5acfe qthighway/xqservice/src/xqaiwuridriver.cpp --- a/qthighway/xqservice/src/xqaiwuridriver.cpp Tue Aug 31 16:02:37 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,238 +0,0 @@ -/* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU Lesser General Public License as published by -* the Free Software Foundation, version 2.1 of the License. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this program. If not, -* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". -* -* Description: -* -*/ - -#include -#include -#include -#include - -#include -#include "xqserviceglobal.h" -#include "xqservicelog.h" -#include "xqaiwuridriver.h" -#include // Integrate to activity manager - -using namespace QtMobility; - -XQAiwUriDriver::XQAiwUriDriver(const QUrl &uri, const XQAiwInterfaceDescriptor& descriptor, const QString &operation) - : XQAiwRequestDriver(), - mUtilities(NULL) -{ - - mErrorMsg = ""; - mDescr = descriptor; - mUri = uri; - mOperation = operation; - - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::XQAiwUriDriver: %s", - qPrintable(mUri.toString())); - -} - -XQAiwUriDriver::~XQAiwUriDriver() -{ - XQSERVICE_DEBUG_PRINT("~XQAiwUriDriver::XQAiwUriDriver"); - delete mUtilities; - -} - -QAction *XQAiwUriDriver::createAction() -{ - return NULL; // Not supported -} - -void XQAiwUriDriver::setArguments(const QList &arguments) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::setArguments"); - mArguments = arguments; -} - - -bool XQAiwUriDriver::send(QVariant& retValue) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::send %s", qPrintable(mUri.toString())); - - mErrorCode = XQService::ENoError; - - // Browser URI - if (mUri.scheme().compare("http", Qt::CaseInsensitive) == 0 || - mUri.scheme().compare("https", Qt::CaseInsensitive) == 0) - { - XQSERVICE_DEBUG_PRINT("Apply QDesktopServices::openUrl"); - bool b = QDesktopServices::openUrl(mUri); - if (!b) - { - mErrorCode = XQService::EConnectionError; - mErrorMsg = XQAiwUtils::createErrorMessage(mErrorCode, "QDesktopServices::openUrl", mUri.toString()); - } - return b; - } - - // "appto" URI - if (mUri.scheme().compare(XQURI_SCHEME_ACTIVITY,Qt::CaseInsensitive) == 0) - { - return handleApptoUri(mUri); - } - - // - // The rest - // - mErrorCode = XQService::EArgumentError; - mErrorMsg = XQAiwUtils::createErrorMessage(mErrorCode, "XQAiwUriDriver:Not custom handler for", mUri.toString()); - - return false; - -} - -const QString& XQAiwUriDriver::lastErrorMessage() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::lastErrorMessage: %s", qPrintable(mErrorMsg)); - return mErrorMsg; -} - -int XQAiwUriDriver::lastError() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::lastError %d", mErrorCode); - return mErrorCode; -} - -const XQAiwInterfaceDescriptor &XQAiwUriDriver::descriptor() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::descriptor"); - return mDescr; -} - -void XQAiwUriDriver::setEmbedded(bool embedded) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::setEmbedded"); - mEmbedded = embedded; -} -bool XQAiwUriDriver::isEmbedded() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::isEmbedded"); - return mEmbedded; -} - -void XQAiwUriDriver::setOperation(const QString &operation) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::setOperation"); - mOperation = operation; -} -const QString &XQAiwUriDriver::operation() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::operation"); - return mOperation; -} - -void XQAiwUriDriver::setSynchronous(bool synchronous) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::setSynchronous"); - mSynchronous = synchronous; -} -bool XQAiwUriDriver::isSynchronous() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::isSynchronous"); - return mSynchronous; -} - -// -// Check if we can handle the URI -// -bool XQAiwUriDriver::hasCustomHandler(const QUrl &uri) -{ - QString scheme = uri.scheme(); - return (scheme.compare(XQURI_SCHEME_ACTIVITY,Qt::CaseInsensitive) == 0 || - scheme.compare(XQURI_SCHEME_HTTP,Qt::CaseInsensitive) == 0 || - scheme.compare(XQURI_SCHEME_HTTPS,Qt::CaseInsensitive) == 0); -} - - -void XQAiwUriDriver::handleAsyncResponse(const QVariant& value) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::handleAsyncResponse"); - emit requestOk(value); -} - -void XQAiwUriDriver::handleAsyncError(int err) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::handleAsyncError"); - - mErrorCode = err; - mErrorMsg = XQAiwUtils::createErrorMessage(mErrorCode,"XQAiwUriDriver", "async send"); - emit requestError(mErrorCode, mErrorMsg); -} - -void XQAiwUriDriver::setBackground(bool background ) -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::setBackground"); - mBackground = background; -} -bool XQAiwUriDriver::isBackground() const -{ - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::isBackground"); - return mBackground; -} - -bool XQAiwUriDriver::handleApptoUri(const QUrl &uri) -{ - // - // Use Qt service framework errors as is (they are in different range than XQ errors) - // - QLatin1String xml("Z:/resource/activity/activityserviceplugin.xml"); - mErrorCode = QServiceManager::NoError; - - QtMobility::QServiceManager serviceManager; - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::handleApptoUri"); - - bool b = serviceManager.addService(xml); - mErrorCode = serviceManager.error(); - XQSERVICE_DEBUG_PRINT("\taddService=%d", mErrorCode); - switch (mErrorCode) - { - case QServiceManager::NoError: - case QServiceManager::ServiceAlreadyExists: - case QServiceManager::ImplementationAlreadyExists: - // These are OK cases. - mErrorCode = QServiceManager::NoError; - break; - default: - return false; - } - - QObject* activityManager = serviceManager.loadInterface("com.nokia.qt.activities.ActivityManager"); - mErrorCode = serviceManager.error(); - XQSERVICE_DEBUG_PRINT("\tloadInterface %s=%d", "com.nokia.qt.activities.ActivityManager", mErrorCode); - if (!activityManager) - { - mErrorCode = serviceManager.error(); - return false; - } - - QMetaObject::invokeMethod(activityManager, "launchActivity", Q_ARG(QUrl,uri)); - mErrorCode = serviceManager.error(); - - XQSERVICE_DEBUG_PRINT("\tinvokeMethod=%d", mErrorCode); - delete activityManager; - - XQSERVICE_DEBUG_PRINT("XQAiwUriDriver::handleApptoUri done"); - - return mErrorCode == QServiceManager::NoError; -}