19 #include <xqserviceglobal.h> |
19 #include <xqserviceglobal.h> |
20 |
20 |
21 // User includes |
21 // User includes |
22 #include "fmradiohswidgetradioserviceclient.h" |
22 #include "fmradiohswidgetradioserviceclient.h" |
23 #include "fmradiohswidget.h" |
23 #include "fmradiohswidget.h" |
|
24 #include "radioservicedef.h" |
|
25 #include "radionotificationdata.h" |
24 |
26 |
25 /*! |
27 /*! |
26 Constructor |
28 Constructor |
27 */ |
29 */ |
28 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) : |
30 FmRadioHsWidgetRadioServiceClient::FmRadioHsWidgetRadioServiceClient(QObject *parent) : |
29 QObject(parent), |
31 QObject(parent), |
30 mRadioInformationServiceRequest(0), |
32 mRadioInformationServiceRequest( 0 ), |
31 mRadioControlServiceRequest(0) |
33 mRadioControlServiceRequest(0), |
|
34 mDataInitialized( false ) |
32 { |
35 { |
33 } |
36 } |
34 |
37 |
35 /*! |
38 /*! |
36 Destructor |
39 Destructor |
39 { |
42 { |
40 stopMonitoring(); |
43 stopMonitoring(); |
41 } |
44 } |
42 |
45 |
43 /*! |
46 /*! |
|
47 * Initialize all data |
|
48 */ |
|
49 void FmRadioHsWidgetRadioServiceClient::init() |
|
50 { |
|
51 const bool radioIsRunning = false; //TODO: Find out if radio is running. Use P&S key for now |
|
52 if ( radioIsRunning ) { |
|
53 startMonitoring(); |
|
54 } |
|
55 } |
|
56 |
|
57 |
|
58 /*! |
44 Starting of FM Radio. |
59 Starting of FM Radio. |
45 |
60 |
46 /param startupState |
61 /param startupState |
47 */ |
62 */ |
48 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState) |
63 void FmRadioHsWidgetRadioServiceClient::doStartFmRadio(FmRadioStartupState startupState) |
49 { |
64 { |
50 if (!mRadioControlServiceRequest) { |
65 createControlServiceRequest(); |
51 createControlServiceRequest(); |
|
52 } |
|
53 |
66 |
54 int commandId = 0; |
67 int commandId = 0; |
55 |
68 |
56 switch (startupState) { |
69 switch (startupState) { |
57 case StartForeground: |
70 case StartForeground: |
79 Bring FM Radio to foreground. |
92 Bring FM Radio to foreground. |
80 |
93 |
81 */ |
94 */ |
82 void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground) |
95 void FmRadioHsWidgetRadioServiceClient::doBringFmRadioToForeground(bool toForeground) |
83 { |
96 { |
84 if (!mRadioControlServiceRequest) { |
97 createControlServiceRequest(); |
85 createControlServiceRequest(); |
|
86 } |
|
87 QVariant commandArgument; |
98 QVariant commandArgument; |
88 if (toForeground) { |
99 if (toForeground) { |
89 // TODO: Include header and remove comment. |
100 // TODO: Include header and remove comment. |
90 commandArgument.setValue(/*RadioServiceCommand::Foreground*/ 6); |
101 commandArgument.setValue(/*RadioServiceCommand::Foreground*/ 6); |
91 } else { |
102 } else { |
142 //req = mApplicationManager.create(uri, false); |
153 //req = mApplicationManager.create(uri, false); |
143 |
154 |
144 /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation, |
155 /*req = mApplicationManager.create(KRadioServiceMonitorInterfaceName, KRadioServiceMonitorOperation, |
145 false);*/ |
156 false);*/ |
146 |
157 |
147 if (!mRadioInformationServiceRequest) { |
158 createMonitorServiceRequest(); |
148 createMonitorServiceRequest(); |
|
149 } |
|
150 bool res = mRadioInformationServiceRequest->send(); |
159 bool res = mRadioInformationServiceRequest->send(); |
151 |
160 |
152 /*if (req) {*/ |
161 /*if (req) {*/ |
153 /* |
162 /* |
154 // Connect signals once |
163 // Connect signals once |
194 /param command Command to execute. |
203 /param command Command to execute. |
195 */ |
204 */ |
196 void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel( |
205 void FmRadioHsWidgetRadioServiceClient::doChangeFmRadioChannel( |
197 FmRadioChannelChangeCommand command) |
206 FmRadioChannelChangeCommand command) |
198 { |
207 { |
199 if (!mRadioControlServiceRequest) { |
208 createControlServiceRequest(); |
200 createControlServiceRequest(); } |
|
201 int commandId; |
209 int commandId; |
202 |
210 |
203 switch (command) { |
211 switch (command) { |
204 case PreviousFavouriteChannel: |
212 case PreviousFavouriteChannel: |
205 // TODO: Include header and remove comment. |
213 // TODO: Include header and remove comment. |
280 |
287 |
281 /param value |
288 /param value |
282 */ |
289 */ |
283 void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value) |
290 void FmRadioHsWidgetRadioServiceClient::handleFmRadioInformationChange(const QVariant& value) |
284 { |
291 { |
|
292 if ( !mDataInitialized ) { |
|
293 mRadioInformationServiceRequest->setMessage( KRadioServiceMonitorOperation ); |
|
294 mDataInitialized = true; |
|
295 } |
|
296 |
285 startMonitoring(); |
297 startMonitoring(); |
286 if (value.isValid() && value.canConvert(QVariant::String)) { |
298 if ( value.isValid() && value.canConvert( QVariant::List ) ) { |
287 QString str = value.toString(); |
299 QVariantList notificationList = value.toList(); |
288 // Extract the number from the beginning of the string. |
300 foreach ( const QVariant& variant, notificationList ) { |
289 int i = str.indexOf(" "); |
301 RadioNotificationData notification = variant.value<RadioNotificationData>(); |
290 QString notificationIdStr = str.left(i); |
302 const int notificationId = notification.mType; |
291 bool conversionOk; |
303 emit radioInformationChanged( notificationId, notification.mData ); |
292 int notificationId = notificationIdStr.toInt(&conversionOk); |
|
293 // Rest is the actual string. |
|
294 QString msg = str.mid(i); |
|
295 |
|
296 // If the type was converted ok |
|
297 if (conversionOk) { |
|
298 emit radioInformationChanged(notificationId, msg); |
|
299 } |
304 } |
300 } |
305 } |
301 } |
306 } |
302 |
307 |
303 /*! |
308 /*! |
448 { |
453 { |
449 if (!mRadioControlServiceRequest) { |
454 if (!mRadioControlServiceRequest) { |
450 QString fullServiceName = KRadioServiceName + "." + KRadioServiceControlInterfaceName; |
455 QString fullServiceName = KRadioServiceName + "." + KRadioServiceControlInterfaceName; |
451 mRadioControlServiceRequest = new XQServiceRequest(fullServiceName, |
456 mRadioControlServiceRequest = new XQServiceRequest(fullServiceName, |
452 KRadioServiceControlOperation, false); |
457 KRadioServiceControlOperation, false); |
|
458 |
453 bool a = connect(mRadioControlServiceRequest, SIGNAL(requestCompleted(QVariant)), this, |
459 bool a = connect(mRadioControlServiceRequest, SIGNAL(requestCompleted(QVariant)), this, |
454 SLOT(requestCompleted(QVariant))); |
460 SLOT(requestCompleted(QVariant))); |
455 bool b = connect(mRadioControlServiceRequest, SIGNAL(requestError(int)), this, |
461 bool b = connect(mRadioControlServiceRequest, SIGNAL(requestError(int)), this, |
456 SLOT(handleRequestError2(int))); |
462 SLOT(handleRequestError2(int))); |
457 } |
463 } |
461 Creates monitor service request object. |
467 Creates monitor service request object. |
462 */ |
468 */ |
463 void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest() |
469 void FmRadioHsWidgetRadioServiceClient::createMonitorServiceRequest() |
464 { |
470 { |
465 if (!mRadioInformationServiceRequest) { |
471 if (!mRadioInformationServiceRequest) { |
|
472 QString operation = mDataInitialized ? KRadioServiceMonitorOperation : KRadioServiceRefreshOperation; |
466 QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName; |
473 QString fullServiceName = KRadioServiceName + "." + KRadioServiceMonitorInterfaceName; |
467 mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName, |
474 mRadioInformationServiceRequest = new XQServiceRequest(fullServiceName, operation, false); |
468 KRadioServiceMonitorOperation, false); |
475 bool a = connect( mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)), |
469 bool a = connect(mRadioInformationServiceRequest, SIGNAL(requestCompleted(QVariant)), this, |
476 this, SLOT(handleFmRadioInformationChange(QVariant))); |
470 SLOT(handleFmRadioInformationChange(QVariant))); |
477 bool b = connect( mRadioInformationServiceRequest, SIGNAL(requestError(int)), |
471 bool b = connect(mRadioInformationServiceRequest, SIGNAL(requestError(int)), this, |
478 this, SLOT(handleRequestError(int))); |
472 SLOT(handleRequestError(int))); |
|
473 } |
479 } |
474 } |
480 } |
475 |
481 |
476 /*! |
482 /*! |
477 Start radio monitoring. |
483 Start radio monitoring. |
478 */ |
484 */ |
479 void FmRadioHsWidgetRadioServiceClient::startMonitoring() |
485 void FmRadioHsWidgetRadioServiceClient::startMonitoring() |
480 { |
486 { |
481 if (!mRadioInformationServiceRequest) { |
487 createMonitorServiceRequest(); |
482 createMonitorServiceRequest(); |
|
483 } |
|
484 doGetFmRadioInformation(); |
488 doGetFmRadioInformation(); |
485 } |
489 } |
486 |
490 |
487 /*! |
491 /*! |
488 Stops radio monitoring. |
492 Stops radio monitoring. |
489 */ |
493 */ |
490 void FmRadioHsWidgetRadioServiceClient::stopMonitoring() |
494 void FmRadioHsWidgetRadioServiceClient::stopMonitoring() |
491 { |
495 { |
492 if (mRadioInformationServiceRequest) { |
496 delete mRadioInformationServiceRequest; |
493 delete mRadioInformationServiceRequest; |
497 delete mRadioControlServiceRequest; |
494 mRadioInformationServiceRequest = NULL; |
498 } |
495 } |
|
496 if (mRadioControlServiceRequest) { |
|
497 delete mRadioControlServiceRequest; |
|
498 mRadioControlServiceRequest = NULL; |
|
499 } |
|
500 } |
|