From b26003419f054722c16cfc9bc3b4366261543bff Mon Sep 17 00:00:00 2001
From: BogDan Vatra <bogdan@kdab.com>
Date: Wed, 27 Jan 2016 10:48:04 +0200
Subject: [PATCH] Android: Use the new QtAndroidPrivate::runOnAndroidThreadSync

Change-Id: I47cb99d84ad87f3b0f6578d3fbdc22d788b31c57
Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
---
 .../src/wrappers/jni/androidsurfaceview.cpp   | 67 +++++++------------
 .../src/wrappers/jni/androidsurfaceview.h     |  7 +-
 2 files changed, 27 insertions(+), 47 deletions(-)

diff --git a/src/plugins/android/src/wrappers/jni/androidsurfaceview.cpp b/src/plugins/android/src/wrappers/jni/androidsurfaceview.cpp
index d2c150d00..6eec85171 100644
--- a/src/plugins/android/src/wrappers/jni/androidsurfaceview.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidsurfaceview.cpp
@@ -137,8 +137,32 @@ AndroidSurfaceView::AndroidSurfaceView()
     , m_surfaceHolder(0)
     , m_pendingVisible(-1)
 {
-    setAutoDelete(false);
-    QtAndroidPrivate::runOnUiThread(this, QJNIEnvironmentPrivate());
+    QtAndroidPrivate::runOnAndroidThreadSync([this] {
+        m_surfaceView = QJNIObjectPrivate("android/view/SurfaceView",
+                                          "(Landroid/content/Context;)V",
+                                          QtAndroidPrivate::activity());
+    }, QJNIEnvironmentPrivate());
+
+    Q_ASSERT(m_surfaceView.isValid());
+
+    QJNIObjectPrivate holder = m_surfaceView.callObjectMethod("getHolder",
+                                                                "()Landroid/view/SurfaceHolder;");
+    if (!holder.isValid()) {
+        m_surfaceView = QJNIObjectPrivate();
+    } else {
+        m_surfaceHolder = new AndroidSurfaceHolder(holder);
+        connect(m_surfaceHolder, &AndroidSurfaceHolder::surfaceCreated,
+                this, &AndroidSurfaceView::surfaceCreated);
+        { // Lock now to avoid a race with handleSurfaceCreated()
+            QMutexLocker locker(shLock);
+            m_window = QWindow::fromWinId(WId(m_surfaceView.object()));
+
+            if (m_pendingVisible != -1)
+                m_window->setVisible(m_pendingVisible);
+            if (m_pendingGeometry.isValid())
+                m_window->setGeometry(m_pendingGeometry);
+        }
+    }
 }
 
 AndroidSurfaceView::~AndroidSurfaceView()
@@ -168,43 +192,4 @@ void AndroidSurfaceView::setGeometry(int x, int y, int width, int height)
         m_pendingGeometry = QRect(x, y, width, height);
 }
 
-bool AndroidSurfaceView::event(QEvent *e)
-{
-    if (e->type() == QEvent::User) {
-        Q_ASSERT(m_surfaceView.isValid());
-
-        QJNIObjectPrivate holder = m_surfaceView.callObjectMethod("getHolder",
-                                                                  "()Landroid/view/SurfaceHolder;");
-        if (!holder.isValid()) {
-            m_surfaceView = QJNIObjectPrivate();
-        } else {
-            m_surfaceHolder = new AndroidSurfaceHolder(holder);
-            connect(m_surfaceHolder, &AndroidSurfaceHolder::surfaceCreated,
-                    this, &AndroidSurfaceView::surfaceCreated);
-            { // Lock now to avoid a race with handleSurfaceCreated()
-                QMutexLocker locker(shLock);
-                m_window = QWindow::fromWinId(WId(m_surfaceView.object()));
-
-                if (m_pendingVisible != -1)
-                    m_window->setVisible(m_pendingVisible);
-                if (m_pendingGeometry.isValid())
-                    m_window->setGeometry(m_pendingGeometry);
-            }
-        }
-
-        return true;
-    }
-
-    return QObject::event(e);
-}
-
-// Called on the Android UI thread.
-void AndroidSurfaceView::run()
-{
-    m_surfaceView = QJNIObjectPrivate("android/view/SurfaceView",
-                                      "(Landroid/content/Context;)V",
-                                      QtAndroidPrivate::activity());
-    QCoreApplication::postEvent(this, new QEvent(QEvent::User));
-}
-
 QT_END_NAMESPACE
diff --git a/src/plugins/android/src/wrappers/jni/androidsurfaceview.h b/src/plugins/android/src/wrappers/jni/androidsurfaceview.h
index 3d28f5325..ef603061d 100644
--- a/src/plugins/android/src/wrappers/jni/androidsurfaceview.h
+++ b/src/plugins/android/src/wrappers/jni/androidsurfaceview.h
@@ -74,7 +74,7 @@ private:
     friend class AndroidSurfaceView;
 };
 
-class AndroidSurfaceView : public QObject, public QRunnable
+class AndroidSurfaceView : public QObject
 {
     Q_OBJECT
 public:
@@ -86,14 +86,9 @@ public:
     void setVisible(bool v);
     void setGeometry(int x, int y, int width, int height);
 
-    bool event(QEvent *);
-
 Q_SIGNALS:
     void surfaceCreated();
 
-protected:
-    void run() override;
-
 private:
     QJNIObjectPrivate m_surfaceView;
     QWindow *m_window;
-- 
GitLab