From ba30566b259e5f4282697be9a4e31940bebfd55b Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Tue, 12 Apr 2016 18:33:17 +0300 Subject: Android: fix crash when subclassing the QtActivity m_context.getClass() returns the top class and this way QtApplication can't find the proper class Name (QtActivity and QtService). This patch passes the right class names to QtLoader/QtApplication. Task-number: QTBUG-52373 Change-Id: Ib69446cdaa38ac8b489872c4850210e5d503492e Reviewed-by: Christian Stromme --- .../src/org/qtproject/qt5/android/bindings/QtActivityLoader.java | 2 +- .../java/src/org/qtproject/qt5/android/bindings/QtApplication.java | 5 ++++- .../java/src/org/qtproject/qt5/android/bindings/QtLoader.java | 6 ++++-- .../src/org/qtproject/qt5/android/bindings/QtServiceLoader.java | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java index 92cea65e4b..2494035c60 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java @@ -55,7 +55,7 @@ public class QtActivityLoader extends QtLoader { QtActivityLoader(QtActivity activity) { - super(activity); + super(activity, QtActivity.class); m_activity = activity; } @Override diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java index 2afede6d66..1078060d7f 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java @@ -133,8 +133,11 @@ public class QtApplication extends Application break; } } + if (-1 == stackDeep) + return result; + final String methodName=elements[stackDeep].getMethodName(); - if (-1 == stackDeep || !m_delegateMethods.containsKey(methodName)) + if (!m_delegateMethods.containsKey(methodName)) return result; for (Method m : m_delegateMethods.get(methodName)) { diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java index 3efdbf7a7c..d281cb0996 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java @@ -152,9 +152,11 @@ public abstract class QtLoader { public int m_displayDensity = -1; private ContextWrapper m_context; protected ComponentInfo m_contextInfo; + private Class m_delegateClass; - QtLoader(ContextWrapper context) { + QtLoader(ContextWrapper context, Class clazz) { m_context = context; + m_delegateClass = clazz; } // Implement in subclass @@ -235,7 +237,7 @@ public abstract class QtLoader { if (!(Boolean)prepareAppMethod.invoke(qtLoader, m_context, classLoader, loaderParams)) throw new Exception(""); - QtApplication.setQtContextDelegate(m_context.getClass(), qtLoader); + QtApplication.setQtContextDelegate(m_delegateClass, qtLoader); // now load the application library so it's accessible from this class loader if (libName != null) diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java index e64018f0a8..60aecbf7b3 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java @@ -42,7 +42,7 @@ import android.content.pm.PackageManager; public class QtServiceLoader extends QtLoader { QtService m_service; QtServiceLoader(QtService service) { - super(service); + super(service, QtService.class); m_service = service; } -- cgit v1.2.3