Android: Fix MetadataRetriver wrapper

The QJNIObject was never intended to be used as a base class.

Change-Id: Ic4effd5e1c89a08515c756bd5092fb1e1eead688
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
This commit is contained in:
Christian Strømme
2014-03-20 00:38:11 +01:00
committed by The Qt Project
parent cc41c7df3c
commit 4ba7b22390
3 changed files with 29 additions and 23 deletions

View File

@@ -74,13 +74,8 @@ static const char* qt_ID3GenreNames[] =
QAndroidMetaDataReaderControl::QAndroidMetaDataReaderControl(QObject *parent)
: QMetaDataReaderControl(parent)
, m_available(false)
, m_retriever(0)
, m_retriever(new JMediaMetadataRetriever)
{
m_retriever = new JMediaMetadataRetriever;
if (!m_retriever->isValid()) {
delete m_retriever;
m_retriever = 0;
}
}
QAndroidMetaDataReaderControl::~QAndroidMetaDataReaderControl()

View File

@@ -47,8 +47,8 @@
QT_BEGIN_NAMESPACE
JMediaMetadataRetriever::JMediaMetadataRetriever()
: QJNIObjectPrivate("android/media/MediaMetadataRetriever")
{
m_metadataRetriever = QJNIObjectPrivate("android/media/MediaMetadataRetriever");
}
JMediaMetadataRetriever::~JMediaMetadataRetriever()
@@ -59,9 +59,9 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key)
{
QString value;
QJNIObjectPrivate metadata = callObjectMethod("extractMetadata",
"(I)Ljava/lang/String;",
jint(key));
QJNIObjectPrivate metadata = m_metadataRetriever.callObjectMethod("extractMetadata",
"(I)Ljava/lang/String;",
jint(key));
if (metadata.isValid())
value = metadata.toString();
@@ -70,28 +70,34 @@ QString JMediaMetadataRetriever::extractMetadata(MetadataKey key)
void JMediaMetadataRetriever::release()
{
callMethod<void>("release");
if (!m_metadataRetriever.isValid())
return;
m_metadataRetriever.callMethod<void>("release");
}
bool JMediaMetadataRetriever::setDataSource(const QUrl &url)
{
if (!m_metadataRetriever.isValid())
return false;
QJNIEnvironmentPrivate env;
bool loaded = false;
QJNIObjectPrivate string = QJNIObjectPrivate::fromString(url.toString());
QJNIObjectPrivate uri = callStaticObjectMethod("android/net/Uri",
"parse",
"(Ljava/lang/String;)Landroid/net/Uri;",
string.object());
QJNIObjectPrivate uri = m_metadataRetriever.callStaticObjectMethod("android/net/Uri",
"parse",
"(Ljava/lang/String;)Landroid/net/Uri;",
string.object());
if (env->ExceptionCheck()) {
env->ExceptionClear();
} else {
callMethod<void>("setDataSource",
"(Landroid/content/Context;Landroid/net/Uri;)V",
QtAndroidPrivate::activity(),
uri.object());
m_metadataRetriever.callMethod<void>("setDataSource",
"(Landroid/content/Context;Landroid/net/Uri;)V",
QtAndroidPrivate::activity(),
uri.object());
if (env->ExceptionCheck())
env->ExceptionClear();
else
@@ -103,13 +109,16 @@ bool JMediaMetadataRetriever::setDataSource(const QUrl &url)
bool JMediaMetadataRetriever::setDataSource(const QString &path)
{
if (!m_metadataRetriever.isValid())
return false;
QJNIEnvironmentPrivate env;
bool loaded = false;
callMethod<void>("setDataSource",
"(Ljava/lang/String;)V",
QJNIObjectPrivate::fromString(path).object());
m_metadataRetriever.callMethod<void>("setDataSource",
"(Ljava/lang/String;)V",
QJNIObjectPrivate::fromString(path).object());
if (env->ExceptionCheck())
env->ExceptionClear();
else

View File

@@ -47,7 +47,7 @@
QT_BEGIN_NAMESPACE
class JMediaMetadataRetriever : public QJNIObjectPrivate
class JMediaMetadataRetriever
{
public:
enum MetadataKey {
@@ -84,6 +84,8 @@ public:
bool setDataSource(const QUrl &url);
bool setDataSource(const QString &path);
private:
QJNIObjectPrivate m_metadataRetriever;
};
QT_END_NAMESPACE