From 1ee25cedb41f4618cc4a2975dc08cf0f4c4e0fdf Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 4 Mar 2015 14:42:03 +0200 Subject: [PATCH] Android: Make sure applicationState is set correctly The Activity onResume function is always called before the application gets initialized and we let the applicationState set to the default value which is AppicationInactive. Change-Id: Ifc3c7e3dfc51f2b821f8ca87f8b711f485b6a6f8 Reviewed-by: Peter Rustler Reviewed-by: Alex Blasche --- .../src/org/qtproject/qt5/android/QtActivityDelegate.java | 2 +- src/plugins/platforms/android/androidjnimain.cpp | 4 +++- .../platforms/android/qandroidplatformintegration.cpp | 5 +++++ src/plugins/platforms/android/qandroidplatformintegration.h | 3 +++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index dc80689f633..93d7baabdbb 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -866,8 +866,8 @@ public class QtActivityDelegate while (itr.hasNext()) m_activity.runOnUiThread(itr.next()); + QtNative.updateApplicationState(ApplicationActive); if (m_started) { - QtNative.updateApplicationState(ApplicationActive); QtNative.clearLostActions(); QtNative.updateWindow(); updateFullScreen(); // Suspending the app clears the immersive mode, so we need to set it again. diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp index f711450fabd..a18e9dac5f1 100644 --- a/src/plugins/platforms/android/androidjnimain.cpp +++ b/src/plugins/platforms/android/androidjnimain.cpp @@ -589,8 +589,10 @@ static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state { m_activityActive = (state == Qt::ApplicationActive); - if (!m_main || !m_androidPlatformIntegration || !QGuiApplicationPrivate::platformIntegration()) + if (!m_main || !m_androidPlatformIntegration || !QGuiApplicationPrivate::platformIntegration()) { + QAndroidPlatformIntegration::setDefaultApplicationState(Qt::ApplicationState(state)); return; + } if (state <= Qt::ApplicationInactive) { // Don't send timers and sockets events anymore if we are going to hide all windows diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp index 93532a62e9b..5384b6faca4 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.cpp +++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp @@ -34,6 +34,7 @@ #include "qandroidplatformintegration.h" #include +#include #include #include #include @@ -72,6 +73,8 @@ int QAndroidPlatformIntegration::m_defaultPhysicalSizeHeight = 71; Qt::ScreenOrientation QAndroidPlatformIntegration::m_orientation = Qt::PrimaryOrientation; Qt::ScreenOrientation QAndroidPlatformIntegration::m_nativeOrientation = Qt::PrimaryOrientation; +Qt::ApplicationState QAndroidPlatformIntegration::m_defaultApplicationState = Qt::ApplicationActive; + void *QAndroidPlatformNativeInterface::nativeResourceForIntegration(const QByteArray &resource) { if (resource=="JavaVM") @@ -176,6 +179,8 @@ QAndroidPlatformIntegration::QAndroidPlatformIntegration(const QStringList ¶ QWindowSystemInterface::registerTouchDevice(m_touchDevice); } } + + QGuiApplicationPrivate::instance()->setApplicationState(m_defaultApplicationState); } bool QAndroidPlatformIntegration::needsBasicRenderloopWorkaround() diff --git a/src/plugins/platforms/android/qandroidplatformintegration.h b/src/plugins/platforms/android/qandroidplatformintegration.h index b08d3d872c9..c0a92290564 100644 --- a/src/plugins/platforms/android/qandroidplatformintegration.h +++ b/src/plugins/platforms/android/qandroidplatformintegration.h @@ -115,6 +115,7 @@ public: QTouchDevice *touchDevice() const { return m_touchDevice; } void setTouchDevice(QTouchDevice *touchDevice) { m_touchDevice = touchDevice; } + static void setDefaultApplicationState(Qt::ApplicationState applicationState) { m_defaultApplicationState = applicationState; } EGLDisplay m_eglDisplay; private: @@ -136,6 +137,8 @@ private: static Qt::ScreenOrientation m_orientation; static Qt::ScreenOrientation m_nativeOrientation; + static Qt::ApplicationState m_defaultApplicationState; + QPlatformFontDatabase *m_androidFDB; QImage *m_FbScreenImage; QPainter *m_compositePainter;