summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPekka Gehör <pekka.gehor@qt.io>2021-04-04 09:59:41 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-05-03 08:12:03 +0000
commitaca924f32c3dcd41f8a9527faa92666c6fbf9676 (patch)
treea0d140c6c7aadc9b67cb98a5aa3d190eb6f53dcd /src
parentfba271339ba8565fed3f2e8a49d128266970d72b (diff)
Android: Fix Application becomes unresponsive issue
Block key events until the plugin is running. Fixes: QTBUG-67944 Change-Id: Iea47f2e94d850141834a7e8fc26218be2cacf660 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> (cherry picked from commit 2262a9cd2d135d5ea2ade42460496c88d8b2c292) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java10
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtNative.java5
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp5
-rw-r--r--src/plugins/platforms/android/androidjnimain.h1
-rw-r--r--src/plugins/platforms/android/qandroidplatformintegration.cpp5
5 files changed, 24 insertions, 2 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
index 4cae9465ba..c36ea359f9 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
@@ -158,6 +158,7 @@ public class QtActivityDelegate
private CursorHandle m_leftSelectionHandle;
private CursorHandle m_rightSelectionHandle;
private EditPopupMenu m_editPopupMenu;
+ private boolean m_isPluginRunning = false;
private QtAccessibilityDelegate m_accessibilityDelegate = null;
@@ -893,6 +894,11 @@ public class QtActivityDelegate
m_accessibilityDelegate.notifyObjectFocus(viewId);
}
+ public void notifyQtAndroidPluginRunning(boolean running)
+ {
+ m_isPluginRunning = running;
+ }
+
public void initializeAccessibility()
{
m_accessibilityDelegate = new QtAccessibilityDelegate(m_activity, m_layout, this);
@@ -1000,7 +1006,7 @@ public class QtActivityDelegate
public boolean onKeyDown(int keyCode, KeyEvent event)
{
- if (!m_started)
+ if (!m_started || !m_isPluginRunning)
return false;
m_metaState = MetaKeyKeyListener.handleKeyDown(m_metaState, keyCode, event);
@@ -1034,7 +1040,7 @@ public class QtActivityDelegate
public boolean onKeyUp(int keyCode, KeyEvent event)
{
- if (!m_started)
+ if (!m_started || !m_isPluginRunning)
return false;
if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
index 001e6a7970..81799a751e 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
@@ -970,6 +970,11 @@ public class QtNative
});
}
+ public static void notifyQtAndroidPluginRunning(final boolean running)
+ {
+ m_activityDelegate.notifyQtAndroidPluginRunning(running);
+ }
+
private static void registerClipboardManager()
{
if (m_service == null || m_activity != null) { // Avoid freezing if only service
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index 7b1182066d..6dff19f3d5 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -223,6 +223,11 @@ namespace QtAndroid
QJniObject::callStaticMethod<void>(m_applicationClass, "notifyObjectFocus","(I)V", accessibilityObjectId);
}
+ void notifyQtAndroidPluginRunning(bool running)
+ {
+ QJniObject::callStaticMethod<void>(m_applicationClass, "notifyQtAndroidPluginRunning","(Z)V", running);
+ }
+
jobject createBitmap(QImage img, JNIEnv *env)
{
if (!m_bitmapClass)
diff --git a/src/plugins/platforms/android/androidjnimain.h b/src/plugins/platforms/android/androidjnimain.h
index db7ba4367f..c7dd5c0ca0 100644
--- a/src/plugins/platforms/android/androidjnimain.h
+++ b/src/plugins/platforms/android/androidjnimain.h
@@ -103,6 +103,7 @@ namespace QtAndroid
void notifyAccessibilityLocationChange();
void notifyObjectHide(uint accessibilityObjectId);
void notifyObjectFocus(uint accessibilityObjectId);
+ void notifyQtAndroidPluginRunning(bool running);
const char *classErrorMsgFmt();
const char *methodErrorMsgFmt();
diff --git a/src/plugins/platforms/android/qandroidplatformintegration.cpp b/src/plugins/platforms/android/qandroidplatformintegration.cpp
index 5f90a05648..3ab808c7f1 100644
--- a/src/plugins/platforms/android/qandroidplatformintegration.cpp
+++ b/src/plugins/platforms/android/qandroidplatformintegration.cpp
@@ -88,6 +88,7 @@ Qt::ScreenOrientation QAndroidPlatformIntegration::m_orientation = Qt::PrimaryOr
Qt::ScreenOrientation QAndroidPlatformIntegration::m_nativeOrientation = Qt::PrimaryOrientation;
bool QAndroidPlatformIntegration::m_showPasswordEnabled = false;
+static bool m_running = false;
void *QAndroidPlatformNativeInterface::nativeResourceForIntegration(const QByteArray &resource)
{
@@ -156,6 +157,10 @@ void QAndroidPlatformNativeInterface::customEvent(QEvent *event)
api->accessibility()->setActive(QtAndroidAccessibility::isActive());
#endif // QT_NO_ACCESSIBILITY
+ if (!m_running) {
+ m_running = true;
+ QtAndroid::notifyQtAndroidPluginRunning(m_running);
+ }
api->flushPendingUpdates();
}