diff -r 6bcf277166c1 -r 451b2e1545b2 hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp --- a/hswidgetplugin/fmradiohswidgetplugin/src/fmradiohswidgetradioserviceclient.cpp Fri Jun 11 16:24:13 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,497 +0,0 @@ -/* -* Copyright (c) 2009 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: FM Radio widget radio service client -* -*/ - -// System includes -#include - -// User includes -#include "fmradiohswidgetradioserviceclient.h" -#include "fmradiohswidget.h" -#include "radioservicedef.h" -#include "radionotificationdata.h" - -/*! - Constructor - */ -FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) : - QObject(parent), - mRequestPending(false), - mRadioMonitorRequest(0), - mRadioControlRequest(0), - mDataInitialized(false) -{ -} - -/*! - Destructor - */ -FmRadioHsWidgetRadioServiceClient::~FmRadioHsWidgetRadioServiceClient() -{ - stopMonitoring(); -} - -/*! - * Initialize all data - */ -void FmRadioHsWidgetRadioServiceClient::init() -{ - const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now - if ( radioIsRunning ) { - //startMonitoring(); - } -} - - -/*! - Starting of FM Radio. - - /param startupState - */ -/* -void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState) -{ - if (!mRadioControlRequest) { - createControlServiceRequest(); - } - - QVariant commandArgument; - switch (startupState) { - case StartForeground: - // TODO: Include header and remove comment. - commandArgument.setValue(*//*RadioServiceCommand::Foreground*/ //6); -/* break; - case StartBackground: - // TODO: Include header and remove comment. - commandArgument.setValue(*//*RadioServiceCommand::Background*/ //7); -/* break; - default: - break; - } - QList arguments; - arguments.append(commandArgument); - mRadioControlRequest->setArguments(arguments); - - bool res = mRadioControlRequest->send(); -} -*/ -/*! - Bring FM Radio to foreground. - - */ -void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioVisibility(FmRadioVisibilty visibility) -{ - QVariant commandArgument; - switch (visibility) { - case ToForeground: - commandArgument.setValue((int) RadioServiceCommand::Foreground); - break; - case ToBackground: - commandArgument.setValue((int) RadioServiceCommand::Background); - case DoNotChange: - default: - break; - } - doSendControlRequest(commandArgument, visibility); -} - -/*! - Changing of FM Radio channel. - - /param command Command to execute. - */ -void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel( - FmRadioChannelChangeCommand command) -{ - QVariant commandArgument; - switch (command) { - case PreviousFavouriteChannel: - commandArgument.setValue((int) RadioServiceCommand::Previous); - break; - case NextFavouriteChannel: - commandArgument.setValue((int) RadioServiceCommand::Next); - break; - default: - break; - } - doSendControlRequest(commandArgument, DoNotChange); -} - -/*! - Changing of FM Radio channel. - - /param command Command to execute. - */ -void FmRadioHsWidgetRadioServiceClient::doControlFmRadioAudio( - FmRadioAudioControlCommand command) -{ - QVariant commandArgument; - switch (command) { - case Mute: - commandArgument.setValue((int) RadioServiceCommand::Pause); - break; - case Unmute: - commandArgument.setValue((int) RadioServiceCommand::Play); - break; - default: - break; - } - doSendControlRequest(commandArgument, DoNotChange); -} - -/*! - Start FM Radio information listening. - */ -void FmRadioHsWidgetRadioServiceClient::doSendControlRequest(QVariant &argument, - FmRadioVisibilty visibility) -{ - if (!mRadioControlRequest) { - createControlServiceRequest(); - } - - QList arguments; - arguments.append(argument); - mRadioControlRequest->setArguments(arguments); - - prepareRequestInfo(mRadioControlRequest, visibility); - - bool res = mRadioControlRequest->send(); - - if (!res) { - int error = mRadioControlRequest->lastError(); - handleRequestError(error); - } - - //stopMonitoring(); - //startMonitoring(); -} - -/*! - Start FM Radio information listening. - */ -void FmRadioHsWidgetRadioServiceClient::doSendMonitorRequest(FmRadioVisibilty visibility) -{ - prepareRequestInfo(mRadioMonitorRequest, visibility); - if (!mRequestPending) { - //FmRadioHsWidgetRadioServiceSingleton::instance()->sendRequest(); - mRequestPending = mRadioMonitorRequest->send(); - } -} - -/*! - Handle changes in FM Radio information texts. - - /param value - */ -void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value) -{ - mRequestPending = false; - if (!mDataInitialized) { - mRadioMonitorRequest->setOperation(KRadioServiceMonitorOperation); - mDataInitialized = true; - } - startMonitoring(DoNotChange); - if ( value.isValid() && value.canConvert( QVariant::List ) ) { - QVariantList notificationList = value.toList(); - foreach ( const QVariant& variant, notificationList ) { - RadioNotificationData notification = variant.value(); - const int notificationId = notification.mType; - emit radioInformationChanged( notificationId, notification.mData ); - } - } -} - -/*! - Handles request error. - - /param int Error value. - */ -void FmRadioHsWidgetRadioServiceClient::handleRequestError(int error) -{ - QString errorStr; - QVariant var(FmRadioHsWidget::NotRunning); - switch (error) { - case XQService::ENoError: - errorStr = "No error"; - break; - case XQService::EConnectionError: - errorStr = "(/*!< Error in IPC Connection */"; - break; - case XQService::EConnectionClosed: - errorStr = "/*!< IPC Connection is closed */"; - stopMonitoring(); - handleFmRadioStateChange(var); - break; - case XQService::EServerNotFound: - errorStr = "/*!< Can not find server */"; - break; - case XQService::EIPCError: - errorStr = "/*!< Known IPC error defined by SDK */"; - break; - case XQService::EUnknownError: - errorStr = "/*!< Unknown IPC error */"; - break; - case XQService::ERequestPending: - errorStr = "/*!< Already pending request */"; - break; - default: - break; - } -} - -/*! - Handle changes in FM Radio state. - - /param value New state of FM Radio. - */ -void FmRadioHsWidgetRadioServiceClient::handleFmRadioStateChange(QVariant& value) -{ - if (value.isValid()) { - emit radioStateChanged(value); - } -} - -/*! - Handle request completion. - - /param value - */ -void FmRadioHsWidgetRadioServiceClient::requestCompleted(const QVariant& value) -{ - if (value.isValid()) { - } -} - -/*! - Handle error. - - /param errorCode - /param errorMessage - */ -void FmRadioHsWidgetRadioServiceClient::handleError(int errorCode, const QString& errorMessage) -{ - int e = errorCode; - QString em = errorMessage; - handleRequestError(e); -} - -/*! - Creates control service request object. - */ -void FmRadioHsWidgetRadioServiceClient::createControlServiceRequest() -{ - if (!mRadioControlRequest) { - QString fullInterfaceName = /*KRadioServiceName +"."+*/ KRadioServiceControlInterfaceName; - mRadioControlRequest = mApplicationManager.create(fullInterfaceName, - KRadioServiceControlOperation, false); - - if (mRadioControlRequest) { - mRadioControlRequest->setEmbedded(false); - mRadioControlRequest->setSynchronous(true); - //TODO: Do backgound set through XQRequestInfo in MCL wk14. - //mRadioControlRequest->setBackground(true); - - /* - bool b = connect(mRadioControlRequest, SIGNAL(requestOk(const QVariant&)), this, - SLOT(requestCompleted(const QVariant&))); - bool t = connect(mRadioControlRequest, SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&))); - */ - } - } -} - -/*! - Creates monitor service request object. - */ -void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest() -{ - if (!mRadioMonitorRequest) { - QString operation = mDataInitialized ? KRadioServiceMonitorOperation - : KRadioServiceRefreshOperation; - QString fullInterfaceName = /*KRadioServiceName +"."+*/ KRadioServiceMonitorInterfaceName; - - /* - QList list; - list = mApplicationManager.list(KRadioServiceName, fullInterfaceName, ""); - XQAiwInterfaceDescriptor interfaceDescriptor; - foreach (XQAiwInterfaceDescriptor d, list) - { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - if (sn == KRadioServiceName && in == fullInterfaceName) { - interfaceDescriptor = d; - } - } - */ - - /* - mRadioMonitorRequest = mApplicationManager.create(interfaceDescriptor, - KRadioServiceMonitorOperation, false); - */ - - mRadioMonitorRequest = mApplicationManager.create( - fullInterfaceName, operation, false); - - if (mRadioMonitorRequest) { - connect(mRadioMonitorRequest, SIGNAL(requestOk(const QVariant&)), - this, SLOT(handleFmRadioInformationChange(const QVariant&))); - connect(mRadioMonitorRequest, - SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&))); - - mRadioMonitorRequest->setSynchronous(false); - mRadioMonitorRequest->setEmbedded(false); - } - } -} - -/*! - Start radio monitoring. - */ -void FmRadioHsWidgetRadioServiceClient::startMonitoring(FmRadioVisibilty visibility) -{ - //FmRadioHsWidgetRadioServiceSingleton::instance(this)->requestNotifications(this); - - if (!mRadioMonitorRequest) { - createMonitorServiceRequest(); - } - doSendMonitorRequest(visibility); -} - -/*! - Stops radio monitoring. - */ -void FmRadioHsWidgetRadioServiceClient::stopMonitoring() -{ - //FmRadioHsWidgetRadioServiceSingleton::instance(this)->cancelNotifications(this); - - if (mRadioMonitorRequest) { - delete mRadioMonitorRequest; - mRadioMonitorRequest = NULL; - } - mRequestPending = false; - mDataInitialized = false; -} - -/*! - Prepares the visibility of the request. - */ -void FmRadioHsWidgetRadioServiceClient::prepareRequestInfo(XQAiwRequest *request, - FmRadioVisibilty visibility) -{ - XQRequestInfo info; - switch (visibility) { - case ToForeground: - //info.setForeground(true); - break; - case ToBackground: - info.setBackground(true); - break; - case DoNotChange: - default: - break; - } - if (request) { - request->setInfo(info); - bool a = request->isBackground(); - } - //bool f = info.isForeground(); - bool b = info.isBackground(); -} - -void FmRadioHsWidgetRadioServiceClient::test() -{ - // Test is kept for example. We have to switch to use the XQAiwRequest and this includes workin example code. - //XQAiwRequest* req; -/* - QUrl uri("application://101FF976"); - QString a = "Uri=" + uri.toString(); - if (uri.isValid()) { - QString b = "isValid"; - } - QString c = "Uri authority=" + uri.authority(); -*/ -/* - QList list = mApplicationManager.list(KRadioServiceName, KRadioServiceMonitorInterfaceName); - foreach (XQAiwInterfaceDescriptor d, list) { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - } - - list = mApplicationManager.list(KRadioServiceName, KRadioServiceMonitorInterfaceName, ""); - foreach (XQAiwInterfaceDescriptor d, list) { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - } - - list = mApplicationManager.list(KRadioServiceMonitorInterfaceName, ""); - foreach (XQAiwInterfaceDescriptor d, list) { - QString in = d.interfaceName(); - QString sn = d.serviceName(); - } -*/ - //req = mApplicationManager.create(uri, false); - - /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation, - false);*/ - -/* /// - if (!mRadioMonitorRequest) { - createMonitorServiceRequest(); - } - bool res = mRadioMonitorRequest->send(); -/// -*/ - - /*if (req) {*/ -/* - // Connect signals once - bool a = connect(req, SIGNAL(requestOk(const QVariant&)), this, - SLOT(handleOk(const QVariant&))); - bool b = connect(req, SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&))); -*/ - /*bool b = connect(req, SIGNAL(requestOk(const QVariant&)), this, - SLOT(handleFmRadioInformationChange(QVariant))); - bool c = connect(req, SIGNAL(requestError(int,const QString&)), this, - SLOT(handleError(int,const QString&)));*/ -/* - QList arg; - arg << ""; - req->setArguments(arg); -*/ -/* - QString op = req->operation(); - req->setOperation(KRadioServiceMonitorOperation); - op = req->operation(); -*/ - /*bool res = req->send();*/ - - /*if (res) { - //QTimer::singleShot(40000, this, SLOT(doSendMonitorRequest())); - } - else { - // Request failed. - int x = 2; - } - - } - else { - int r; - r = 5; - }*/ -}