Android: Fix MetadataRetriver wrapper
authorChristian Strømme <christian.stromme@digia.com>
Wed, 19 Mar 2014 23:38:11 +0000 (00:38 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 27 Mar 2014 15:44:20 +0000 (16:44 +0100)
The QJNIObject was never intended to be used as a base class.

Change-Id: Ic4effd5e1c89a08515c756bd5092fb1e1eead688
Reviewed-by: Yoann Lopes <yoann.lopes@digia.com>
src/plugins/android/src/mediaplayer/qandroidmetadatareadercontrol.cpp
src/plugins/android/src/wrappers/jmediametadataretriever.cpp
src/plugins/android/src/wrappers/jmediametadataretriever.h

index b6ef6c4..dcc3dfb 100644 (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()
index 91c4090..93b77ec 100644 (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
index 7b22c95..7b0340c 100644 (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