summaryrefslogtreecommitdiffstats
path: root/src/plugins/android
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2016-01-27 10:48:04 +0200
committerBogDan Vatra <bogdan@kdab.com>2016-04-06 17:24:42 +0000
commitb26003419f054722c16cfc9bc3b4366261543bff (patch)
treef87071672d06a60f0a56cfb7b89d1faff4935f6d /src/plugins/android
parent5d278bd7b8ef5b524a110c5a8106247a391deeba (diff)
Android: Use the new QtAndroidPrivate::runOnAndroidThreadSync
Change-Id: I47cb99d84ad87f3b0f6578d3fbdc22d788b31c57 Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Diffstat (limited to 'src/plugins/android')
-rw-r--r--src/plugins/android/src/wrappers/jni/androidsurfaceview.cpp67
-rw-r--r--src/plugins/android/src/wrappers/jni/androidsurfaceview.h7
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;