summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/src/snippets/multimedia-snippets/media.cpp7
-rw-r--r--src/imports/multimedia/qdeclarativeradio.cpp8
-rw-r--r--src/imports/multimedia/qdeclarativeradio_p.h5
-rw-r--r--src/imports/multimedia/qdeclarativeradiodata.cpp62
-rw-r--r--src/imports/multimedia/qdeclarativeradiodata_p.h5
-rw-r--r--src/multimedia/radio/qradiodata.cpp152
-rw-r--r--src/multimedia/radio/qradiodata.h18
-rw-r--r--src/multimedia/radio/qradiotuner.cpp21
-rw-r--r--src/multimedia/radio/qradiotuner.h5
-rw-r--r--tests/auto/unit/qmultimedia_common/mockmediaservice.h18
-rw-r--r--tests/auto/unit/qradiodata/tst_qradiodata.cpp128
-rw-r--r--tests/auto/unit/qradiotuner/tst_qradiotuner.cpp12
12 files changed, 321 insertions, 120 deletions
diff --git a/doc/src/snippets/multimedia-snippets/media.cpp b/doc/src/snippets/multimedia-snippets/media.cpp
index 7e7a95f69..9db5de652 100644
--- a/doc/src/snippets/multimedia-snippets/media.cpp
+++ b/doc/src/snippets/multimedia-snippets/media.cpp
@@ -49,6 +49,7 @@
#include "qmediaplayercontrol.h"
#include "qmediaplayer.h"
#include "qradiotuner.h"
+#include "qradiodata.h"
#include "qvideowidget.h"
#include "qcameraimagecapture.h"
#include "qcamera.h"
@@ -84,6 +85,7 @@ private:
QCameraImageCapture *imageCapture;
QString fileName;
QRadioTuner *radio;
+ QRadioData *radioData;
QAudioRecorder *audioRecorder;
QAudioProbe *audioProbe;
QVideoProbe *videoProbe;
@@ -248,6 +250,11 @@ void MediaExample::RadioTuna()
radio->start();
}
//! [Radio tuner]
+
+ //! [Radio data setup]
+ radio = new QRadioTuner;
+ radioData = radio->radioData();
+ //! [Radio data setup]
}
void MediaExample::AudioProbe()
diff --git a/src/imports/multimedia/qdeclarativeradio.cpp b/src/imports/multimedia/qdeclarativeradio.cpp
index 1c7ea4cae..ff4bbb3fb 100644
--- a/src/imports/multimedia/qdeclarativeradio.cpp
+++ b/src/imports/multimedia/qdeclarativeradio.cpp
@@ -87,7 +87,9 @@ QT_BEGIN_NAMESPACE
You can also use the Radio element to get information about tuning, for instance the
frequency steps supported for tuning.
- The corresponding \l RadioData element gives RDS information about the current radio station.
+ The corresponding \l RadioData element gives RDS information about the
+ current radio station. The best way to access the RadioData element for
+ the current Radio is to use the \c radioData property.
\sa {Radio Overview}
@@ -95,10 +97,10 @@ QT_BEGIN_NAMESPACE
QDeclarativeRadio::QDeclarativeRadio(QObject *parent) :
- QObject(parent),
- m_radioTuner(0)
+ QObject(parent)
{
m_radioTuner = new QRadioTuner(this);
+ m_radioData = new QDeclarativeRadioData(m_radioTuner, this);
connect(m_radioTuner, SIGNAL(stateChanged(QRadioTuner::State)), this, SLOT(_q_stateChanged(QRadioTuner::State)));
connect(m_radioTuner, SIGNAL(bandChanged(QRadioTuner::Band)), this, SLOT(_q_bandChanged(QRadioTuner::Band)));
diff --git a/src/imports/multimedia/qdeclarativeradio_p.h b/src/imports/multimedia/qdeclarativeradio_p.h
index 6444e8489..5424b162d 100644
--- a/src/imports/multimedia/qdeclarativeradio_p.h
+++ b/src/imports/multimedia/qdeclarativeradio_p.h
@@ -55,6 +55,7 @@
#include <QtDeclarative/qdeclarative.h>
#include <qradiotuner.h>
+#include "qdeclarativeradiodata_p.h"
QT_BEGIN_HEADER
@@ -77,6 +78,7 @@ class QDeclarativeRadio : public QObject
Q_PROPERTY(int maximumFrequency READ maximumFrequency NOTIFY bandChanged)
Q_PROPERTY(bool antennaConnected READ isAntennaConnected NOTIFY antennaConnectedChanged)
Q_PROPERTY(Availability availability READ availability NOTIFY availabilityChanged)
+ Q_PROPERTY(QDeclarativeRadioData* radioData READ radioData CONSTANT)
Q_ENUMS(State)
Q_ENUMS(Band)
Q_ENUMS(Error)
@@ -146,6 +148,8 @@ public:
Q_INVOKABLE bool isAvailable() const {return availability() == Available;}
Availability availability() const;
+ QDeclarativeRadioData *radioData() { return m_radioData; }
+
public Q_SLOTS:
void setBand(QDeclarativeRadio::Band band);
void setFrequency(int frequency);
@@ -190,6 +194,7 @@ private:
Q_DISABLE_COPY(QDeclarativeRadio)
QRadioTuner *m_radioTuner;
+ QDeclarativeRadioData *m_radioData;
};
QT_END_NAMESPACE
diff --git a/src/imports/multimedia/qdeclarativeradiodata.cpp b/src/imports/multimedia/qdeclarativeradiodata.cpp
index 530601011..8ab5f0827 100644
--- a/src/imports/multimedia/qdeclarativeradiodata.cpp
+++ b/src/imports/multimedia/qdeclarativeradiodata.cpp
@@ -70,52 +70,47 @@ QT_BEGIN_NAMESPACE
band: Radio.FM
}
- RadioData {
- id: radioData
- }
-
Column {
Text {
- text: radioData.stationName
+ text: radio.radioData.stationName
}
Text {
- text: radioData.programTypeName
+ text: radio.radioData.programTypeName
}
Text {
- text: radioData.radioText
+ text: radio.radioData.radioText
}
}
}
\endqml
- You use \c RadioData together with the \l Radio element. The properties of the RadioData element will reflect the
- information broadcast by the radio station the Radio element is currently tuned to.
+ You use \c RadioData together with the \l Radio element, either by
+ accessing the \c radioData property of the Radio element, or
+ creating a separate RadioData element. The properties of the
+ RadioData element will reflect the information broadcast by the
+ radio station the Radio element is currently tuned to.
\sa {Radio Overview}
*/
QDeclarativeRadioData::QDeclarativeRadioData(QObject *parent) :
- QObject(parent),
- m_radioData(0)
+ QObject(parent)
{
- m_radioData = new QRadioData(this);
-
- connect(m_radioData, SIGNAL(programTypeChanged(QRadioData::ProgramType)), this,
- SLOT(_q_programTypeChanged(QRadioData::ProgramType)));
+ m_radioTuner = new QRadioTuner(this);
+ m_radioData = m_radioTuner->radioData();
- connect(m_radioData, SIGNAL(stationIdChanged(QString)), this, SIGNAL(stationIdChanged(QString)));
- connect(m_radioData, SIGNAL(programTypeNameChanged(QString)), this, SIGNAL(programTypeNameChanged(QString)));
- connect(m_radioData, SIGNAL(stationNameChanged(QString)), this, SIGNAL(stationNameChanged(QString)));
- connect(m_radioData, SIGNAL(radioTextChanged(QString)), this, SIGNAL(radioTextChanged(QString)));
- connect(m_radioData, SIGNAL(alternativeFrequenciesEnabledChanged(bool)), this,
- SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
+ connectSignals();
+}
- // Note we map availabilityError->availability
- connect(m_radioData, SIGNAL(availabilityErrorChanged(QtMultimedia::AvailabilityError)), this, SLOT(_q_availabilityChanged(QtMultimedia::AvailabilityError)));
+QDeclarativeRadioData::QDeclarativeRadioData(QRadioTuner *tuner, QObject *parent) :
+ QObject(parent)
+{
+ m_radioTuner = tuner;
+ m_radioData = m_radioTuner->radioData();
- connect(m_radioData, SIGNAL(error(QRadioData::Error)), this, SLOT(_q_error(QRadioData::Error)));
+ connectSignals();
}
QDeclarativeRadioData::~QDeclarativeRadioData()
@@ -290,4 +285,23 @@ void QDeclarativeRadioData::_q_availabilityChanged(QtMultimedia::AvailabilityErr
emit availabilityChanged(Availability(error));
}
+void QDeclarativeRadioData::connectSignals()
+{
+ connect(m_radioData, SIGNAL(programTypeChanged(QRadioData::ProgramType)), this,
+ SLOT(_q_programTypeChanged(QRadioData::ProgramType)));
+
+ connect(m_radioData, SIGNAL(stationIdChanged(QString)), this, SIGNAL(stationIdChanged(QString)));
+ connect(m_radioData, SIGNAL(programTypeNameChanged(QString)), this, SIGNAL(programTypeNameChanged(QString)));
+ connect(m_radioData, SIGNAL(stationNameChanged(QString)), this, SIGNAL(stationNameChanged(QString)));
+ connect(m_radioData, SIGNAL(radioTextChanged(QString)), this, SIGNAL(radioTextChanged(QString)));
+ connect(m_radioData, SIGNAL(alternativeFrequenciesEnabledChanged(bool)), this,
+ SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
+
+ // Note we map availabilityError->availability
+ // Since the radio data element depends on the service for the tuner, the availability is also dictated from the tuner
+ connect(m_radioTuner, SIGNAL(availabilityErrorChanged(QtMultimedia::AvailabilityError)), this, SLOT(_q_availabilityChanged(QtMultimedia::AvailabilityError)));
+
+ connect(m_radioData, SIGNAL(error(QRadioData::Error)), this, SLOT(_q_error(QRadioData::Error)));
+}
+
QT_END_NAMESPACE
diff --git a/src/imports/multimedia/qdeclarativeradiodata_p.h b/src/imports/multimedia/qdeclarativeradiodata_p.h
index 66eb505c9..b9fb553cb 100644
--- a/src/imports/multimedia/qdeclarativeradiodata_p.h
+++ b/src/imports/multimedia/qdeclarativeradiodata_p.h
@@ -55,6 +55,7 @@
#include <QtDeclarative/qdeclarative.h>
#include <qradiodata.h>
+#include <qradiotuner.h>
QT_BEGIN_HEADER
@@ -143,6 +144,7 @@ public:
};
QDeclarativeRadioData(QObject *parent = 0);
+ QDeclarativeRadioData(QRadioTuner *tuner, QObject *parent = 0);
~QDeclarativeRadioData();
QString stationId() const;
@@ -177,9 +179,12 @@ private Q_SLOTS:
void _q_availabilityChanged(QtMultimedia::AvailabilityError);
private:
+ void connectSignals();
+
Q_DISABLE_COPY(QDeclarativeRadioData)
QRadioData *m_radioData;
+ QRadioTuner *m_radioTuner;
};
QT_END_NAMESPACE
diff --git a/src/multimedia/radio/qradiodata.cpp b/src/multimedia/radio/qradiodata.cpp
index 30a495a1a..7a1fe1b49 100644
--- a/src/multimedia/radio/qradiodata.cpp
+++ b/src/multimedia/radio/qradiodata.cpp
@@ -75,47 +75,64 @@ namespace
The radio data object will emit signals for any changes in radio data. You can enable or disable
alternative frequency with setAlternativeFrequenciesEnabled().
+ You can get a QRadioData instance fromt the \l{QRadioTuner::radioData()}{radioData}
+ property from a QRadioTuner instance.
+
+ \snippet doc/src/snippets/multimedia-snippets/media.cpp Radio data setup
+
+ Alternatively, you can pass an instance of QRadioTuner to the constructor to QRadioData.
+
\sa {Radio Overview}
*/
-class QRadioDataPrivate : public QMediaObjectPrivate
+class QRadioDataPrivate
{
+ Q_DECLARE_NON_CONST_PUBLIC(QRadioData)
public:
- QRadioDataPrivate():provider(0), control(0) {}
- QMediaServiceProvider *provider;
+ QRadioDataPrivate();
+
+ QMediaObject *mediaObject;
QRadioDataControl* control;
+
+ void _q_serviceDestroyed();
+
+ QRadioData *q_ptr;
};
+QRadioDataPrivate::QRadioDataPrivate()
+ : mediaObject(0)
+ , control(0)
+{}
+
+void QRadioDataPrivate::_q_serviceDestroyed()
+{
+ mediaObject = 0;
+ control = 0;
+}
+
/*!
- Constructs a radio data based on a media service allocated by a media service \a provider.
+ Constructs a radio data based on a media object.
+
+ The \a mediaObject should be an instance of \l QRadioTuner. It is preferable to use the
+ \l{QRadioTuner::radioData()}{radioData} property on a QRadioTuner instance to get an instance
+ of QRadioData.
- The \a parent is passed to QMediaObject.
+ During construction, this class is bound to the \a mediaObject using the
+ \l{QMediaObject::bind()}{bind()} method.
*/
-QRadioData::QRadioData(QObject *parent):
- QMediaObject(*new QRadioDataPrivate,
- parent,
- QMediaServiceProvider::defaultServiceProvider()->requestService(Q_MEDIASERVICE_RADIO))
+QRadioData::QRadioData(QMediaObject *mediaObject, QObject *parent)
+ : QObject(parent)
+ , d_ptr(new QRadioDataPrivate)
{
Q_D(QRadioData);
- d->provider = QMediaServiceProvider::defaultServiceProvider();
-
- if (d->service != 0) {
- d->control = qobject_cast<QRadioDataControl*>(d->service->requestControl(QRadioDataControl_iid));
- if (d->control != 0) {
- connect(d->control, SIGNAL(stationIdChanged(QString)), SIGNAL(stationIdChanged(QString)));
- connect(d->control, SIGNAL(programTypeChanged(QRadioData::ProgramType)),
- SIGNAL(programTypeChanged(QRadioData::ProgramType)));
- connect(d->control, SIGNAL(programTypeNameChanged(QString)), SIGNAL(programTypeNameChanged(QString)));
- connect(d->control, SIGNAL(stationNameChanged(QString)), SIGNAL(stationNameChanged(QString)));
- connect(d->control, SIGNAL(radioTextChanged(QString)), SIGNAL(radioTextChanged(QString)));
- connect(d->control, SIGNAL(alternativeFrequenciesEnabledChanged(bool)), SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
- connect(d->control, SIGNAL(error(QRadioData::Error)), SIGNAL(error(QRadioData::Error)));
- }
- }
+ d->q_ptr = this;
+
+ if (mediaObject)
+ mediaObject->bind(this);
}
/*!
@@ -126,14 +143,93 @@ QRadioData::~QRadioData()
{
Q_D(QRadioData);
- if (d->service && d->control)
- d->service->releaseControl(d->control);
+ if (d->mediaObject)
+ d->mediaObject->unbind(this);
- d->provider->releaseService(d->service);
+ delete d_ptr;
+}
+
+/*!
+ \reimp
+*/
+QMediaObject *QRadioData::mediaObject() const
+{
+ return d_func()->mediaObject;
+}
+
+/*!
+ \reimp
+*/
+bool QRadioData::setMediaObject(QMediaObject *mediaObject)
+{
+ Q_D(QRadioData);
+
+ if (d->mediaObject) {
+ if (d->control) {
+ disconnect(d->control, SIGNAL(stationIdChanged(QString)),
+ this, SIGNAL(stationIdChanged(QString)));
+ disconnect(d->control, SIGNAL(programTypeChanged(QRadioData::ProgramType)),
+ this, SIGNAL(programTypeChanged(QRadioData::ProgramType)));
+ disconnect(d->control, SIGNAL(programTypeNameChanged(QString)),
+ this, SIGNAL(programTypeNameChanged(QString)));
+ disconnect(d->control, SIGNAL(stationNameChanged(QString)),
+ this, SIGNAL(stationNameChanged(QString)));
+ disconnect(d->control, SIGNAL(radioTextChanged(QString)),
+ this, SIGNAL(radioTextChanged(QString)));
+ disconnect(d->control, SIGNAL(alternativeFrequenciesEnabledChanged(bool)),
+ this, SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
+ disconnect(d->control, SIGNAL(error(QRadioData::Error)),
+ this, SIGNAL(error(QRadioData::Error)));
+
+ QMediaService *service = d->mediaObject->service();
+ service->releaseControl(d->control);
+ disconnect(service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
+ }
+ }
+
+ d->mediaObject = mediaObject;
+
+ if (d->mediaObject) {
+ QMediaService *service = mediaObject->service();
+ if (service) {
+ d->control = qobject_cast<QRadioDataControl*>(service->requestControl(QRadioDataControl_iid));
+
+ if (d->control) {
+ connect(d->control, SIGNAL(stationIdChanged(QString)),
+ this, SIGNAL(stationIdChanged(QString)));
+ connect(d->control, SIGNAL(programTypeChanged(QRadioData::ProgramType)),
+ this, SIGNAL(programTypeChanged(QRadioData::ProgramType)));
+ connect(d->control, SIGNAL(programTypeNameChanged(QString)),
+ this, SIGNAL(programTypeNameChanged(QString)));
+ connect(d->control, SIGNAL(stationNameChanged(QString)),
+ this, SIGNAL(stationNameChanged(QString)));
+ connect(d->control, SIGNAL(radioTextChanged(QString)),
+ this, SIGNAL(radioTextChanged(QString)));
+ connect(d->control, SIGNAL(alternativeFrequenciesEnabledChanged(bool)),
+ this, SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
+ connect(d->control, SIGNAL(error(QRadioData::Error)),
+ this, SIGNAL(error(QRadioData::Error)));
+
+ connect(service, SIGNAL(destroyed()), this, SLOT(_q_serviceDestroyed()));
+
+ return true;
+ }
+ }
+ }
+
+ // without QRadioDataControl discard the media object
+ d->mediaObject = 0;
+ d->control = 0;
+
+ return false;
}
/*!
Returns the availability of the radio data service.
+
+ A long as there is a media service which provides control, then the
+ \l{QtMultimedia::AvailabilityError}{availability error} will be that
+ of the \l{QRadioTuner::availabilityError()}{radio tuner}.
*/
QtMultimedia::AvailabilityError QRadioData::availabilityError() const
{
@@ -142,7 +238,7 @@ QtMultimedia::AvailabilityError QRadioData::availabilityError() const
if (d->control == 0)
return QtMultimedia::ServiceMissingError;
- return QMediaObject::availabilityError();
+ return d->mediaObject->availabilityError();
}
/*!
diff --git a/src/multimedia/radio/qradiodata.h b/src/multimedia/radio/qradiodata.h
index 03c503134..6e282f3ee 100644
--- a/src/multimedia/radio/qradiodata.h
+++ b/src/multimedia/radio/qradiodata.h
@@ -44,11 +44,10 @@
#include <QtCore/qobject.h>
-#include "qmediaobject.h"
+#include <qmediaobject.h>
+#include <qmediabindableinterface.h>
#include <qmediaenumdebug.h>
-#include <QPair>
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -57,7 +56,7 @@ QT_MODULE(Multimedia)
class QRadioDataPrivate;
-class Q_MULTIMEDIA_EXPORT QRadioData : public QMediaObject
+class Q_MULTIMEDIA_EXPORT QRadioData : public QObject, public QMediaBindableInterface
{
Q_OBJECT
Q_PROPERTY(QString stationId READ stationId NOTIFY stationIdChanged)
@@ -70,6 +69,8 @@ class Q_MULTIMEDIA_EXPORT QRadioData : public QMediaObject
Q_ENUMS(Error)
Q_ENUMS(ProgramType)
+ Q_INTERFACES(QMediaBindableInterface)
+
public:
enum Error { NoError, ResourceError, OpenError, OutOfRangeError };
@@ -87,11 +88,13 @@ public:
College
};
- QRadioData(QObject *parent = 0);
+ QRadioData(QMediaObject *mediaObject, QObject *parent = 0);
~QRadioData();
QtMultimedia::AvailabilityError availabilityError() const;
+ QMediaObject *mediaObject() const;
+
QString stationId() const;
ProgramType programType() const;
QString programTypeName() const;
@@ -115,10 +118,15 @@ Q_SIGNALS:
void error(QRadioData::Error error);
+protected:
+ bool setMediaObject(QMediaObject *);
+
+ QRadioDataPrivate *d_ptr;
private:
Q_DISABLE_COPY(QRadioData)
Q_DECLARE_PRIVATE(QRadioData)
+ Q_PRIVATE_SLOT(d_func(), void _q_serviceDestroyed())
};
QT_END_NAMESPACE
diff --git a/src/multimedia/radio/qradiotuner.cpp b/src/multimedia/radio/qradiotuner.cpp
index e847d05e0..32fd14426 100644
--- a/src/multimedia/radio/qradiotuner.cpp
+++ b/src/multimedia/radio/qradiotuner.cpp
@@ -43,6 +43,7 @@
#include "qmediaservice.h"
#include "qmediaobject_p.h"
#include "qradiotunercontrol.h"
+#include "qradiodata.h"
#include "qmediaserviceprovider_p.h"
#include <QPair>
@@ -94,9 +95,10 @@ namespace
class QRadioTunerPrivate : public QMediaObjectPrivate
{
public:
- QRadioTunerPrivate():provider(0), control(0) {}
+ QRadioTunerPrivate():provider(0), control(0), radioData(0) {}
QMediaServiceProvider *provider;
QRadioTunerControl* control;
+ QRadioData *radioData;
};
@@ -131,6 +133,8 @@ QRadioTuner::QRadioTuner(QObject *parent):
connect(d->control, SIGNAL(antennaConnectedChanged(bool)), SIGNAL(antennaConnectedChanged(bool)));
connect(d->control, SIGNAL(error(QRadioTuner::Error)), SIGNAL(error(QRadioTuner::Error)));
}
+
+ d->radioData = new QRadioData(this, this);
}
}
@@ -142,6 +146,9 @@ QRadioTuner::~QRadioTuner()
{
Q_D(QRadioTuner);
+ if (d->radioData)
+ delete d->radioData;
+
if (d->service && d->control)
d->service->releaseControl(d->control);
@@ -540,6 +547,18 @@ QString QRadioTuner::errorString() const
}
/*!
+ \property QRadioTuner::radioData
+ \brief holds an instance of \l QRadioData
+
+ The instance of QRadioData is already bound to this instance of QRadioTuner.
+*/
+QRadioData *QRadioTuner::radioData() const
+{
+ return d_func()->radioData;
+}
+
+
+/*!
\fn void QRadioTuner::bandChanged(QRadioTuner::Band band)
Signals a radio tuner's \a band has changed.
diff --git a/src/multimedia/radio/qradiotuner.h b/src/multimedia/radio/qradiotuner.h
index 059d54098..8f11321cf 100644
--- a/src/multimedia/radio/qradiotuner.h
+++ b/src/multimedia/radio/qradiotuner.h
@@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE
QT_MODULE(Multimedia)
-
+class QRadioData;
class QRadioTunerPrivate;
class Q_MULTIMEDIA_EXPORT QRadioTuner : public QMediaObject
{
@@ -70,6 +70,7 @@ class Q_MULTIMEDIA_EXPORT QRadioTuner : public QMediaObject
Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged)
Q_PROPERTY(bool searching READ isSearching NOTIFY searchingChanged)
Q_PROPERTY(bool antennaConnected READ isAntennaConnected NOTIFY antennaConnectedChanged)
+ Q_PROPERTY(QRadioData *radioData READ radioData CONSTANT)
Q_ENUMS(State)
Q_ENUMS(Band)
Q_ENUMS(Error)
@@ -114,6 +115,8 @@ public:
Error error() const;
QString errorString() const;
+ QRadioData *radioData() const;
+
public Q_SLOTS:
void searchForward();
void searchBackward();
diff --git a/tests/auto/unit/qmultimedia_common/mockmediaservice.h b/tests/auto/unit/qmultimedia_common/mockmediaservice.h
index 4bd4a396e..316e78d7c 100644
--- a/tests/auto/unit/qmultimedia_common/mockmediaservice.h
+++ b/tests/auto/unit/qmultimedia_common/mockmediaservice.h
@@ -43,6 +43,9 @@
#define MOCKMEDIASERVICE_H
#include "qmediaservice.h"
+#include <QtCore/QMap>
+
+Q_DECLARE_METATYPE(QMediaControl *)
class MockMediaService : public QMediaService
{
@@ -52,14 +55,23 @@ public:
QMediaService(parent),
mockControl(control) {}
- QMediaControl* requestControl(const char *)
+ MockMediaService(QObject *parent, QMap<QString, QMediaControl *> controls):
+ QMediaService(parent),
+ mockControl(0),
+ mockControls(controls) {}
+
+ QMediaControl* requestControl(const char *key)
{
- return mockControl;
+ if (mockControl)
+ return mockControl;
+ else
+ return mockControls.value(key);
}
void releaseControl(QMediaControl*) {}
- QMediaControl *mockControl;
+ QMediaControl *mockControl;
+ QMap<QString, QMediaControl *> mockControls;
};
diff --git a/tests/auto/unit/qradiodata/tst_qradiodata.cpp b/tests/auto/unit/qradiodata/tst_qradiodata.cpp
index 2c3ab49d6..0e1138599 100644
--- a/tests/auto/unit/qradiodata/tst_qradiodata.cpp
+++ b/tests/auto/unit/qradiodata/tst_qradiodata.cpp
@@ -44,15 +44,19 @@
#include <QtTest/QtTest>
#include <QDebug>
#include <QTimer>
+#include <QtCore/QMap>
#include <qmediaobject.h>
#include <qmediacontrol.h>
#include <qmediaservice.h>
#include <qradiodatacontrol.h>
#include <qradiodata.h>
+#include <qradiotuner.h>
#include "mockmediaserviceprovider.h"
#include "mockmediaservice.h"
+#include "mockavailabilitycontrol.h"
+#include "mockradiotunercontrol.h"
#include "mockradiodatacontrol.h"
QT_USE_NAMESPACE
@@ -72,34 +76,47 @@ private slots:
void testRadioDataUpdates();
private:
- MockRadioDataControl *mock;
+ MockAvailabilityControl *mockAvailability;
+ MockRadioTunerControl *mockTuner;
+ MockRadioDataControl *mockData;
MockMediaService *service;
MockMediaServiceProvider *provider;
- QRadioData *radio;
+ QRadioTuner * radio;
+ QRadioData *radioData;
};
void tst_QRadioData::initTestCase()
{
qRegisterMetaType<QRadioData::ProgramType>("QRadioData::ProgramType");
- mock = new MockRadioDataControl(this);
- service = new MockMediaService(this, mock);
+ mockAvailability = new MockAvailabilityControl(QtMultimedia::NoError);
+ mockTuner = new MockRadioTunerControl(this);
+ mockData = new MockRadioDataControl(this);
+
+ QMap<QString, QMediaControl *> map;
+ map.insert(QRadioTunerControl_iid, mockTuner);
+ map.insert(QRadioDataControl_iid, mockData);
+ map.insert(QMediaAvailabilityControl_iid, mockAvailability);
+
+ service = new MockMediaService(this, map);
provider = new MockMediaServiceProvider(service);
QMediaServiceProvider::setDefaultServiceProvider(provider);
- radio = new QRadioData;
- QVERIFY(radio->service() != 0);
- QVERIFY(radio->isAvailable());
- QVERIFY(radio->availabilityError() == QtMultimedia::NoError);
+
+ radio = new QRadioTuner;
+ radioData = radio->radioData();
+
+ QVERIFY(radioData->availabilityError() == QtMultimedia::NoError);
}
void tst_QRadioData::cleanupTestCase()
{
- QVERIFY(radio->error() == QRadioData::NoError);
- QVERIFY(radio->errorString().isEmpty());
+ QVERIFY(radioData->error() == QRadioData::NoError);
+ QVERIFY(radioData->errorString().isEmpty());
delete radio;
delete service;
delete provider;
+ delete mockAvailability;
}
void tst_QRadioData::testNullService()
@@ -108,17 +125,21 @@ void tst_QRadioData::testNullService()
MockMediaServiceProvider nullProvider(0);
QMediaServiceProvider::setDefaultServiceProvider(&nullProvider);
- QRadioData radio;
-
- QVERIFY(!radio.isAvailable());
- QCOMPARE(radio.error(), QRadioData::ResourceError);
- QCOMPARE(radio.errorString(), QString());
- QCOMPARE(radio.stationId(), QString());
- QCOMPARE(radio.programType(), QRadioData::Undefined);
- QCOMPARE(radio.programTypeName(), QString());
- QCOMPARE(radio.stationName(), QString());
- QCOMPARE(radio.radioText(), QString());
- QCOMPARE(radio.isAlternativeFrequenciesEnabled(), false);
+ QRadioTuner radio;
+ QRadioData *nullRadioData = radio.radioData();
+
+ QVERIFY(nullRadioData == 0);
+
+ QRadioData radioData(&radio);
+
+ QCOMPARE(radioData.error(), QRadioData::ResourceError);
+ QCOMPARE(radioData.errorString(), QString());
+ QCOMPARE(radioData.stationId(), QString());
+ QCOMPARE(radioData.programType(), QRadioData::Undefined);
+ QCOMPARE(radioData.programTypeName(), QString());
+ QCOMPARE(radioData.stationName(), QString());
+ QCOMPARE(radioData.radioText(), QString());
+ QCOMPARE(radioData.isAlternativeFrequenciesEnabled(), false);
}
@@ -129,59 +150,58 @@ void tst_QRadioData::testNullControl()
MockMediaService service(0, 0);
MockMediaServiceProvider provider(&service);
QMediaServiceProvider::setDefaultServiceProvider(&provider);
- QRadioData radio;
- QVERIFY(!radio.isAvailable());
- QCOMPARE(radio.error(), QRadioData::ResourceError);
- QCOMPARE(radio.errorString(), QString());
-
- QCOMPARE(radio.stationId(), QString());
- QCOMPARE(radio.programType(), QRadioData::Undefined);
- QCOMPARE(radio.programTypeName(), QString());
- QCOMPARE(radio.stationName(), QString());
- QCOMPARE(radio.radioText(), QString());
- QCOMPARE(radio.isAlternativeFrequenciesEnabled(), false);
+ QRadioTuner radio;
+ QRadioData *radioData = radio.radioData();
+ QCOMPARE(radioData->error(), QRadioData::ResourceError);
+ QCOMPARE(radioData->errorString(), QString());
+
+ QCOMPARE(radioData->stationId(), QString());
+ QCOMPARE(radioData->programType(), QRadioData::Undefined);
+ QCOMPARE(radioData->programTypeName(), QString());
+ QCOMPARE(radioData->stationName(), QString());
+ QCOMPARE(radioData->radioText(), QString());
+ QCOMPARE(radioData->isAlternativeFrequenciesEnabled(), false);
{
- QSignalSpy spy(&radio, SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
+ QSignalSpy spy(radioData, SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
- radio.setAlternativeFrequenciesEnabled(true);
- QCOMPARE(radio.isAlternativeFrequenciesEnabled(), false);
+ radioData->setAlternativeFrequenciesEnabled(true);
+ QCOMPARE(radioData->isAlternativeFrequenciesEnabled(), false);
QCOMPARE(spy.count(), 0);
}
}
void tst_QRadioData::testAlternativeFrequencies()
{
- QSignalSpy readSignal(radio, SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
- radio->setAlternativeFrequenciesEnabled(true);
+ QSignalSpy readSignal(radioData, SIGNAL(alternativeFrequenciesEnabledChanged(bool)));
+ radioData->setAlternativeFrequenciesEnabled(true);
QTestEventLoop::instance().enterLoop(1);
- QVERIFY(radio->isAlternativeFrequenciesEnabled() == true);
+ QVERIFY(radioData->isAlternativeFrequenciesEnabled() == true);
QVERIFY(readSignal.count() == 1);
}
void tst_QRadioData::testRadioDataUpdates()
{
- QSignalSpy rtSpy(radio, SIGNAL(radioTextChanged(QString)));
- QSignalSpy ptyPTYSpy(radio, SIGNAL(programTypeChanged(QRadioData::ProgramType)));
- QSignalSpy ptynSpy(radio, SIGNAL(programTypeNameChanged(QString)));
- QSignalSpy piSpy(radio, SIGNAL(stationIdChanged(QString)));
- QSignalSpy psSpy(radio, SIGNAL(stationNameChanged(QString)));
- mock->forceRT("Mock Radio Text");
- mock->forceProgramType(static_cast<int>(QRadioData::Sport));
- mock->forcePTYN("Mock Programme Type Name");
- mock->forcePI("Mock Programme Identification");
- mock->forcePS("Mock Programme Service");
+ QSignalSpy rtSpy(radioData, SIGNAL(radioTextChanged(QString)));
+ QSignalSpy ptyPTYSpy(radioData, SIGNAL(programTypeChanged(QRadioData::ProgramType)));
+ QSignalSpy ptynSpy(radioData, SIGNAL(programTypeNameChanged(QString)));
+ QSignalSpy piSpy(radioData, SIGNAL(stationIdChanged(QString)));
+ QSignalSpy psSpy(radioData, SIGNAL(stationNameChanged(QString)));
+ mockData->forceRT("Mock Radio Text");
+ mockData->forceProgramType(static_cast<int>(QRadioData::Sport));
+ mockData->forcePTYN("Mock Programme Type Name");
+ mockData->forcePI("Mock Programme Identification");
+ mockData->forcePS("Mock Programme Service");
QTestEventLoop::instance().enterLoop(1);
QVERIFY(rtSpy.count() == 1);
QVERIFY(ptyPTYSpy.count() == 1);
QVERIFY(ptynSpy.count() == 1);
QVERIFY(piSpy.count() == 1);
QVERIFY(psSpy.count() == 1);
- qDebug()<<radio->radioText();
- QCOMPARE(radio->radioText(), QString("Mock Radio Text"));
- QCOMPARE(radio->programType(), QRadioData::Sport);
- QCOMPARE(radio->programTypeName(), QString("Mock Programme Type Name"));
- QCOMPARE(radio->stationId(), QString("Mock Programme Identification"));
- QCOMPARE(radio->stationName(), QString("Mock Programme Service"));
+ QCOMPARE(radioData->radioText(), QString("Mock Radio Text"));
+ QCOMPARE(radioData->programType(), QRadioData::Sport);
+ QCOMPARE(radioData->programTypeName(), QString("Mock Programme Type Name"));
+ QCOMPARE(radioData->stationId(), QString("Mock Programme Identification"));
+ QCOMPARE(radioData->stationName(), QString("Mock Programme Service"));
}
QTEST_GUILESS_MAIN(tst_QRadioData)
diff --git a/tests/auto/unit/qradiotuner/tst_qradiotuner.cpp b/tests/auto/unit/qradiotuner/tst_qradiotuner.cpp
index 9a0172213..07bf8a8fd 100644
--- a/tests/auto/unit/qradiotuner/tst_qradiotuner.cpp
+++ b/tests/auto/unit/qradiotuner/tst_qradiotuner.cpp
@@ -44,6 +44,7 @@
#include <QtTest/QtTest>
#include <QDebug>
#include <QTimer>
+#include <QtCore/QMap>
#include <qmediaobject.h>
#include <qmediacontrol.h>
@@ -54,6 +55,7 @@
#include "mockmediaserviceprovider.h"
#include "mockmediaservice.h"
#include "mockradiotunercontrol.h"
+#include "mockavailabilitycontrol.h"
QT_USE_NAMESPACE
@@ -81,6 +83,7 @@ private slots:
private:
MockRadioTunerControl *mock;
+ MockAvailabilityControl *mockAvailability;
MockMediaService *service;
MockMediaServiceProvider *provider;
QRadioTuner *radio;
@@ -92,7 +95,13 @@ void tst_QRadioTuner::initTestCase()
qRegisterMetaType<QRadioTuner::Band>("QRadioTuner::Band");
mock = new MockRadioTunerControl(this);
- service = new MockMediaService(this, mock);
+ mockAvailability = new MockAvailabilityControl(QtMultimedia::NoError);
+
+ QMap<QString, QMediaControl *> map;
+ map.insert(QRadioTunerControl_iid, mock);
+ map.insert(QMediaAvailabilityControl_iid, mockAvailability);
+
+ service = new MockMediaService(this, map);
provider = new MockMediaServiceProvider(service);
QMediaServiceProvider::setDefaultServiceProvider(provider);
@@ -129,6 +138,7 @@ void tst_QRadioTuner::cleanupTestCase()
delete radio;
delete service;
delete provider;
+ delete mockAvailability;
}
void tst_QRadioTuner::init()