Android: Simplify the user facing Java bindings
Move QtLoader classes outside of the bindings package and into the internal Android Java package (Qt6Android.jar that is), to simplify Qt for Android project templates. This is because QtLoader classes are used to trigger Qt libs loading and the users don't need to necessarily know about it or find it in the project's source files. The classes in question: QtLoader, QtActivityLoader, and QtServiceLoader. Task-number: QTBUG-115014 Task-number: QTBUG-114593 Change-Id: I61f68abf6ee83fc45bc47ed9af7457db4f7deabc Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>bb10
parent
c03eb94c8a
commit
d1760bc810
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# Copyright (C) 2023 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
set(java_sources
|
||||
|
|
@ -9,6 +9,9 @@ set(java_sources
|
|||
src/org/qtproject/qt/android/EditPopupMenu.java
|
||||
src/org/qtproject/qt/android/ExtractStyle.java
|
||||
src/org/qtproject/qt/android/QtActivityDelegate.java
|
||||
src/org/qtproject/qt/android/QtLoader.java
|
||||
src/org/qtproject/qt/android/QtActivityLoader.java
|
||||
src/org/qtproject/qt/android/QtServiceLoader.java
|
||||
src/org/qtproject/qt/android/QtEditText.java
|
||||
src/org/qtproject/qt/android/QtInputConnection.java
|
||||
src/org/qtproject/qt/android/QtLayout.java
|
||||
|
|
|
|||
|
|
@ -1,30 +1,24 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
package org.qtproject.qt.android.bindings;
|
||||
package org.qtproject.qt.android;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.Window;
|
||||
|
||||
import org.qtproject.qt.android.QtNative;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class QtActivityLoader extends QtLoader {
|
||||
QtActivity m_activity;
|
||||
Activity m_activity;
|
||||
|
||||
QtActivityLoader(QtActivity activity)
|
||||
public QtActivityLoader(Activity activity, Class<?> clazz)
|
||||
{
|
||||
super(activity, QtActivity.class);
|
||||
super(activity, clazz);
|
||||
m_activity = activity;
|
||||
}
|
||||
|
||||
|
|
@ -60,7 +54,8 @@ public class QtActivityLoader extends QtLoader {
|
|||
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
try {
|
||||
m_contextInfo = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(), PackageManager.GET_META_DATA);
|
||||
m_contextInfo = m_activity.getPackageManager().getActivityInfo(
|
||||
m_activity.getComponentName(), PackageManager.GET_META_DATA);
|
||||
int theme = ((ActivityInfo)m_contextInfo).getThemeResource();
|
||||
for (Field f : Class.forName("android.R$style").getDeclaredFields()) {
|
||||
if (f.getInt(null) == theme) {
|
||||
|
|
@ -76,7 +71,8 @@ public class QtActivityLoader extends QtLoader {
|
|||
}
|
||||
|
||||
try {
|
||||
m_activity.setTheme(Class.forName("android.R$style").getDeclaredField(QT_ANDROID_DEFAULT_THEME).getInt(null));
|
||||
m_activity.setTheme(Class.forName("android.R$style").getDeclaredField(
|
||||
QT_ANDROID_DEFAULT_THEME).getInt(null));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
@ -93,8 +89,8 @@ public class QtActivityLoader extends QtLoader {
|
|||
}
|
||||
|
||||
// there can only be a valid delegate object if the QtNative was started.
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onCreate != null)
|
||||
QtApplication.invokeDelegateMethod(QtApplication.onCreate, savedInstanceState);
|
||||
if (m_delegateObject != null && onCreate != null)
|
||||
invokeDelegateMethod(onCreate, savedInstanceState);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (c) 2019, BogDan Vatra <bogdan@kde.org>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
package org.qtproject.qt.android.bindings;
|
||||
package org.qtproject.qt.android;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
|
|
@ -18,6 +18,7 @@ import android.util.Log;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
|
@ -28,6 +29,7 @@ import dalvik.system.DexClassLoader;
|
|||
|
||||
public abstract class QtLoader {
|
||||
|
||||
static String QtTAG = "Qt";
|
||||
public static final String ERROR_CODE_KEY = "error.code";
|
||||
public static final String ERROR_MESSAGE_KEY = "error.message";
|
||||
public static final String DEX_PATH_KEY = "dex.path";
|
||||
|
|
@ -80,11 +82,130 @@ public abstract class QtLoader {
|
|||
private static ArrayList<FileOutputStream> m_fileOutputStreams = new ArrayList<FileOutputStream>();
|
||||
// List of open file streams associated with files copied during installation.
|
||||
|
||||
QtLoader(ContextWrapper context, Class<?> clazz) {
|
||||
public static Object m_delegateObject = null;
|
||||
public static HashMap<String, ArrayList<Method>> m_delegateMethods= new HashMap<String, ArrayList<Method>>();
|
||||
public static Method dispatchKeyEvent = null;
|
||||
public static Method dispatchPopulateAccessibilityEvent = null;
|
||||
public static Method dispatchTouchEvent = null;
|
||||
public static Method dispatchTrackballEvent = null;
|
||||
public static Method onKeyDown = null;
|
||||
public static Method onKeyMultiple = null;
|
||||
public static Method onKeyUp = null;
|
||||
public static Method onTouchEvent = null;
|
||||
public static Method onTrackballEvent = null;
|
||||
public static Method onActivityResult = null;
|
||||
public static Method onCreate = null;
|
||||
public static Method onKeyLongPress = null;
|
||||
public static Method dispatchKeyShortcutEvent = null;
|
||||
public static Method onKeyShortcut = null;
|
||||
public static Method dispatchGenericMotionEvent = null;
|
||||
public static Method onGenericMotionEvent = null;
|
||||
public static Method onRequestPermissionsResult = null;
|
||||
private static String activityClassName;
|
||||
private static Class qtApplicationClass = null;
|
||||
|
||||
public QtLoader(ContextWrapper context, Class<?> clazz) {
|
||||
m_context = context;
|
||||
m_delegateClass = clazz;
|
||||
}
|
||||
|
||||
public static void setQtApplicationClass(Class qtAppClass)
|
||||
{
|
||||
qtApplicationClass = qtAppClass;
|
||||
}
|
||||
|
||||
public static void setQtTAG(String tag)
|
||||
{
|
||||
QtTAG = tag;
|
||||
}
|
||||
|
||||
public static void setQtContextDelegate(Class<?> clazz, Object listener)
|
||||
{
|
||||
m_delegateObject = listener;
|
||||
activityClassName = clazz.getCanonicalName();
|
||||
|
||||
ArrayList<Method> delegateMethods = new ArrayList<Method>();
|
||||
for (Method m : listener.getClass().getMethods()) {
|
||||
if (m.getDeclaringClass().getName().startsWith("org.qtproject.qt.android"))
|
||||
delegateMethods.add(m);
|
||||
}
|
||||
|
||||
ArrayList<Field> applicationFields = new ArrayList<Field>();
|
||||
for (Field f : qtApplicationClass.getFields()) {
|
||||
if (f.getDeclaringClass().getName().equals(qtApplicationClass.getName()))
|
||||
applicationFields.add(f);
|
||||
}
|
||||
|
||||
for (Method delegateMethod : delegateMethods) {
|
||||
try {
|
||||
clazz.getDeclaredMethod(delegateMethod.getName(), delegateMethod.getParameterTypes());
|
||||
if (m_delegateMethods.containsKey(delegateMethod.getName())) {
|
||||
m_delegateMethods.get(delegateMethod.getName()).add(delegateMethod);
|
||||
} else {
|
||||
ArrayList<Method> delegateSet = new ArrayList<Method>();
|
||||
delegateSet.add(delegateMethod);
|
||||
m_delegateMethods.put(delegateMethod.getName(), delegateSet);
|
||||
}
|
||||
for (Field applicationField:applicationFields) {
|
||||
if (applicationField.getName().equals(delegateMethod.getName())) {
|
||||
try {
|
||||
applicationField.set(null, delegateMethod);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) { }
|
||||
}
|
||||
}
|
||||
|
||||
public static class InvokeResult
|
||||
{
|
||||
public boolean invoked = false;
|
||||
public Object methodReturns = null;
|
||||
}
|
||||
|
||||
private static int stackDeep=-1;
|
||||
public static InvokeResult invokeDelegate(Object... args)
|
||||
{
|
||||
InvokeResult result = new InvokeResult();
|
||||
if (m_delegateObject == null)
|
||||
return result;
|
||||
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
|
||||
if (-1 == stackDeep) {
|
||||
for (int it=0;it<elements.length;it++)
|
||||
if (elements[it].getClassName().equals(activityClassName)) {
|
||||
stackDeep = it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (-1 == stackDeep)
|
||||
return result;
|
||||
|
||||
final String methodName=elements[stackDeep].getMethodName();
|
||||
if (!m_delegateMethods.containsKey(methodName))
|
||||
return result;
|
||||
|
||||
for (Method m : m_delegateMethods.get(methodName)) {
|
||||
if (m.getParameterTypes().length == args.length) {
|
||||
result.methodReturns = invokeDelegateMethod(m, args);
|
||||
result.invoked = true;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Object invokeDelegateMethod(Method m, Object... args)
|
||||
{
|
||||
try {
|
||||
return m.invoke(m_delegateObject, args);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// Implement in subclass
|
||||
protected void finish() {}
|
||||
|
||||
|
|
@ -187,7 +308,7 @@ public abstract class QtLoader {
|
|||
if (!(Boolean)prepareAppMethod.invoke(qtLoader, m_context, classLoader, loaderParams))
|
||||
throw new Exception("");
|
||||
|
||||
QtApplication.setQtContextDelegate(m_delegateClass, qtLoader);
|
||||
setQtContextDelegate(m_delegateClass, qtLoader);
|
||||
|
||||
Method startAppMethod=qtLoader.getClass().getMethod("startApplication");
|
||||
if (!(Boolean)startAppMethod.invoke(qtLoader))
|
||||
|
|
@ -244,13 +365,13 @@ public abstract class QtLoader {
|
|||
}
|
||||
if (systemLibsPrefix.isEmpty()) {
|
||||
systemLibsPrefix = SYSTEM_LIB_PATH;
|
||||
Log.e(QtApplication.QtTAG, "It looks like app deployed using Unbundled "
|
||||
Log.e(QtTAG, "It looks like app deployed using Unbundled "
|
||||
+ "deployment. It may be necessary to specify path to directory "
|
||||
+ "where Qt libraries are installed using either "
|
||||
+ "android.app.system_libs_prefix metadata variable in your "
|
||||
+ "AndroidManifest.xml or QT_ANDROID_SYSTEM_LIBS_PATH in your "
|
||||
+ "CMakeLists.txt");
|
||||
Log.e(QtApplication.QtTAG, "Using " + SYSTEM_LIB_PATH + " as default path");
|
||||
Log.e(QtTAG, "Using " + SYSTEM_LIB_PATH + " as default path");
|
||||
}
|
||||
|
||||
File systemLibraryDir = new File(systemLibsPrefix);
|
||||
|
|
@ -259,7 +380,7 @@ public abstract class QtLoader {
|
|||
libsDir = systemLibsPrefix;
|
||||
bundledLibsDir = systemLibsPrefix;
|
||||
} else {
|
||||
Log.e(QtApplication.QtTAG,
|
||||
Log.e(QtTAG,
|
||||
"System library directory " + systemLibsPrefix
|
||||
+ " does not exist or is empty.");
|
||||
}
|
||||
|
|
@ -270,7 +391,7 @@ public abstract class QtLoader {
|
|||
libsDir = nativeLibraryPrefix;
|
||||
bundledLibsDir = nativeLibraryPrefix;
|
||||
} else {
|
||||
Log.e(QtApplication.QtTAG,
|
||||
Log.e(QtTAG,
|
||||
"Native library directory " + nativeLibraryPrefix
|
||||
+ " does not exist or is empty.");
|
||||
}
|
||||
|
|
@ -318,7 +439,7 @@ public abstract class QtLoader {
|
|||
if (m_contextInfo.metaData.containsKey("android.app.extract_android_style")) {
|
||||
extractOption = m_contextInfo.metaData.getString("android.app.extract_android_style");
|
||||
if (!extractOption.equals("default") && !extractOption.equals("full") && !extractOption.equals("minimal") && !extractOption.equals("none")) {
|
||||
Log.e(QtApplication.QtTAG, "Invalid extract_android_style option \"" + extractOption + "\", defaulting to \"default\"");
|
||||
Log.e(QtTAG, "Invalid extract_android_style option \"" + extractOption + "\", defaulting to \"default\"");
|
||||
extractOption = "default";
|
||||
}
|
||||
}
|
||||
|
|
@ -329,7 +450,7 @@ public abstract class QtLoader {
|
|||
if (extractOption.equals("default")) {
|
||||
final int targetSdkVersion = m_context.getApplicationInfo().targetSdkVersion;
|
||||
if (targetSdkVersion < 28 && Build.VERSION.SDK_INT >= 28) {
|
||||
Log.e(QtApplication.QtTAG, "extract_android_style option set to \"none\" when targetSdkVersion is less then 28");
|
||||
Log.e(QtTAG, "extract_android_style option set to \"none\" when targetSdkVersion is less then 28");
|
||||
extractOption = "none";
|
||||
}
|
||||
}
|
||||
|
|
@ -380,7 +501,7 @@ public abstract class QtLoader {
|
|||
return;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(QtApplication.QtTAG, "Can't create main activity", e);
|
||||
Log.e(QtTAG, "Can't create main activity", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +1,37 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
package org.qtproject.qt.android.bindings;
|
||||
package org.qtproject.qt.android;
|
||||
|
||||
import android.app.Service;
|
||||
import android.os.Bundle;
|
||||
import android.content.ComponentName;
|
||||
import android.content.pm.PackageManager;
|
||||
|
||||
import java.security.Provider;
|
||||
|
||||
public class QtServiceLoader extends QtLoader {
|
||||
QtService m_service;
|
||||
QtServiceLoader(QtService service) {
|
||||
super(service, QtService.class);
|
||||
Service m_service;
|
||||
|
||||
public QtServiceLoader(Service service, Class<?> clazz) {
|
||||
super(service, clazz);
|
||||
m_service = service;
|
||||
}
|
||||
|
||||
public void onCreate() {
|
||||
try {
|
||||
m_contextInfo = m_service.getPackageManager().getServiceInfo(new ComponentName(m_service, m_service.getClass()), PackageManager.GET_META_DATA);
|
||||
m_contextInfo = m_service.getPackageManager().getServiceInfo(new ComponentName(
|
||||
m_service, m_service.getClass()), PackageManager.GET_META_DATA);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
m_service.stopSelf();
|
||||
return;
|
||||
}
|
||||
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onCreate != null) {
|
||||
if (m_delegateObject != null && onCreate != null) {
|
||||
Bundle bundle = null;
|
||||
QtApplication.invokeDelegateMethod(QtApplication.onCreate, bundle);
|
||||
invokeDelegateMethod(onCreate, bundle);
|
||||
}
|
||||
startApp(true);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# Copyright (C) 2023 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
# Android Java Resource files
|
||||
|
|
@ -10,11 +10,8 @@ set(resource_directories
|
|||
|
||||
set(java_bindings
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt/android/bindings/QtActivity.java"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt/android/bindings/QtActivityLoader.java"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt/android/bindings/QtService.java"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt/android/bindings/QtServiceLoader.java"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt/android/bindings/QtApplication.java"
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/org/qtproject/qt/android/bindings/QtLoader.java"
|
||||
)
|
||||
|
||||
set(strings_resouces
|
||||
|
|
@ -57,3 +54,13 @@ if(NOT QT_WILL_INSTALL)
|
|||
DIRECTORIES ${resource_directories}
|
||||
DESTINATION ${destination})
|
||||
endif()
|
||||
|
||||
# To avoid Java build errors after the loader classes have been moved to the internal Jar package,
|
||||
# make this step to remove them from the build folder. This mainly useful for existing builds,
|
||||
# as clean builds wouldn't have to deal with this case.
|
||||
if ("${PROJECT_VERSION}" GREATER_EQUAL "6.7")
|
||||
set(loader_bindings "QtLoader.java" "QtActivityLoader.java" "QtServiceLoader.java")
|
||||
foreach(binding IN LISTS loader_bindings)
|
||||
file(REMOVE "${destination}/src/org/qtproject/qt/android/bindings/${binding}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
|
|
@ -32,6 +32,10 @@ import android.view.accessibility.AccessibilityEvent;
|
|||
|
||||
import org.qtproject.qt.android.QtNative;
|
||||
|
||||
import org.qtproject.qt.android.QtActivityLoader;
|
||||
import org.qtproject.qt.android.QtLoader;
|
||||
|
||||
|
||||
public class QtActivity extends Activity
|
||||
{
|
||||
public static final String EXTRA_SOURCE_INFO = "org.qtproject.qt.android.sourceInfo";
|
||||
|
|
@ -65,7 +69,7 @@ public class QtActivity extends Activity
|
|||
private QtActivityLoader m_loader;
|
||||
public QtActivity()
|
||||
{
|
||||
m_loader = new QtActivityLoader(this);
|
||||
m_loader = new QtActivityLoader(this, QtActivity.class);
|
||||
|
||||
if (Build.VERSION.SDK_INT < 29) {
|
||||
QT_ANDROID_THEMES = new String[] {"Theme_Holo_Light"};
|
||||
|
|
@ -85,8 +89,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean dispatchKeyEvent(KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchKeyEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchKeyEvent, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.dispatchKeyEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.dispatchKeyEvent, event);
|
||||
else
|
||||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
|
|
@ -99,8 +103,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchPopulateAccessibilityEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchPopulateAccessibilityEvent, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.dispatchPopulateAccessibilityEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.dispatchPopulateAccessibilityEvent, event);
|
||||
else
|
||||
return super.dispatchPopulateAccessibilityEvent(event);
|
||||
}
|
||||
|
|
@ -113,8 +117,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean dispatchTouchEvent(MotionEvent ev)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchTouchEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchTouchEvent, ev);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.dispatchTouchEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.dispatchTouchEvent, ev);
|
||||
else
|
||||
return super.dispatchTouchEvent(ev);
|
||||
}
|
||||
|
|
@ -127,8 +131,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean dispatchTrackballEvent(MotionEvent ev)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchTrackballEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchTrackballEvent, ev);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.dispatchTrackballEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.dispatchTrackballEvent, ev);
|
||||
else
|
||||
return super.dispatchTrackballEvent(ev);
|
||||
}
|
||||
|
|
@ -142,8 +146,8 @@ public class QtActivity extends Activity
|
|||
protected void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||
{
|
||||
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onActivityResult != null) {
|
||||
QtApplication.invokeDelegateMethod(QtApplication.onActivityResult, requestCode, resultCode, data);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onActivityResult != null) {
|
||||
QtLoader.invokeDelegateMethod(QtLoader.onActivityResult, requestCode, resultCode, data);
|
||||
return;
|
||||
}
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
|
@ -157,7 +161,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected void onApplyThemeResource(Theme theme, int resid, boolean first)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(theme, resid, first).invoked)
|
||||
if (!QtLoader.invokeDelegate(theme, resid, first).invoked)
|
||||
super.onApplyThemeResource(theme, resid, first);
|
||||
}
|
||||
public void super_onApplyThemeResource(Theme theme, int resid, boolean first)
|
||||
|
|
@ -170,7 +174,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected void onChildTitleChanged(Activity childActivity, CharSequence title)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(childActivity, title).invoked)
|
||||
if (!QtLoader.invokeDelegate(childActivity, title).invoked)
|
||||
super.onChildTitleChanged(childActivity, title);
|
||||
}
|
||||
public void super_onChildTitleChanged(Activity childActivity, CharSequence title)
|
||||
|
|
@ -182,7 +186,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(newConfig).invoked)
|
||||
if (!QtLoader.invokeDelegate(newConfig).invoked)
|
||||
super.onConfigurationChanged(newConfig);
|
||||
}
|
||||
public void super_onConfigurationChanged(Configuration newConfig)
|
||||
|
|
@ -194,7 +198,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onContentChanged()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onContentChanged();
|
||||
}
|
||||
public void super_onContentChanged()
|
||||
|
|
@ -206,7 +210,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onContextItemSelected(MenuItem item)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(item);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(item);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -221,7 +225,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onContextMenuClosed(Menu menu)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(menu).invoked)
|
||||
if (!QtLoader.invokeDelegate(menu).invoked)
|
||||
super.onContextMenuClosed(menu);
|
||||
}
|
||||
public void super_onContextMenuClosed(Menu menu)
|
||||
|
|
@ -263,6 +267,7 @@ public class QtActivity extends Activity
|
|||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
QtLoader.setQtApplicationClass(QtApplication.class);
|
||||
onCreateHook(savedInstanceState);
|
||||
addReferrer(getIntent());
|
||||
}
|
||||
|
|
@ -271,7 +276,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(menu, v, menuInfo).invoked)
|
||||
if (!QtLoader.invokeDelegate(menu, v, menuInfo).invoked)
|
||||
super.onCreateContextMenu(menu, v, menuInfo);
|
||||
}
|
||||
public void super_onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
|
||||
|
|
@ -283,7 +288,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public CharSequence onCreateDescription()
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate();
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate();
|
||||
if (res.invoked)
|
||||
return (CharSequence)res.methodReturns;
|
||||
else
|
||||
|
|
@ -298,7 +303,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected Dialog onCreateDialog(int id)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(id);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(id);
|
||||
if (res.invoked)
|
||||
return (Dialog)res.methodReturns;
|
||||
else
|
||||
|
|
@ -313,7 +318,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(menu);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(menu);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -328,7 +333,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onCreatePanelMenu(int featureId, Menu menu)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(featureId, menu);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(featureId, menu);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -344,7 +349,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public View onCreatePanelView(int featureId)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(featureId);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(featureId);
|
||||
if (res.invoked)
|
||||
return (View)res.methodReturns;
|
||||
else
|
||||
|
|
@ -374,7 +379,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public View onCreateView(String name, Context context, AttributeSet attrs)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(name, context, attrs);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(name, context, attrs);
|
||||
if (res.invoked)
|
||||
return (View)res.methodReturns;
|
||||
else
|
||||
|
|
@ -390,7 +395,7 @@ public class QtActivity extends Activity
|
|||
protected void onDestroy()
|
||||
{
|
||||
super.onDestroy();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -398,8 +403,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onKeyDown != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyDown, keyCode, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onKeyDown != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onKeyDown, keyCode, event);
|
||||
else
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
|
|
@ -413,8 +418,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onKeyMultiple != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyMultiple, keyCode, repeatCount, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onKeyMultiple != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onKeyMultiple, keyCode, repeatCount, event);
|
||||
else
|
||||
return super.onKeyMultiple(keyCode, repeatCount, event);
|
||||
}
|
||||
|
|
@ -427,8 +432,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onKeyUp(int keyCode, KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onKeyUp != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyUp, keyCode, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onKeyUp != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onKeyUp, keyCode, event);
|
||||
else
|
||||
return super.onKeyUp(keyCode, event);
|
||||
}
|
||||
|
|
@ -441,7 +446,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onLowMemory()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onLowMemory();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
@ -449,7 +454,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onMenuItemSelected(int featureId, MenuItem item)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(featureId, item);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(featureId, item);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -464,7 +469,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onMenuOpened(int featureId, Menu menu)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(featureId, menu);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(featureId, menu);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -480,7 +485,7 @@ public class QtActivity extends Activity
|
|||
protected void onNewIntent(Intent intent)
|
||||
{
|
||||
addReferrer(intent);
|
||||
if (!QtApplication.invokeDelegate(intent).invoked)
|
||||
if (!QtLoader.invokeDelegate(intent).invoked)
|
||||
super.onNewIntent(intent);
|
||||
}
|
||||
public void super_onNewIntent(Intent intent)
|
||||
|
|
@ -492,7 +497,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(item);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(item);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -507,7 +512,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onOptionsMenuClosed(Menu menu)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(menu).invoked)
|
||||
if (!QtLoader.invokeDelegate(menu).invoked)
|
||||
super.onOptionsMenuClosed(menu);
|
||||
}
|
||||
public void super_onOptionsMenuClosed(Menu menu)
|
||||
|
|
@ -519,7 +524,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onPanelClosed(int featureId, Menu menu)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(featureId, menu).invoked)
|
||||
if (!QtLoader.invokeDelegate(featureId, menu).invoked)
|
||||
super.onPanelClosed(featureId, menu);
|
||||
}
|
||||
public void super_onPanelClosed(int featureId, Menu menu)
|
||||
|
|
@ -532,7 +537,7 @@ public class QtActivity extends Activity
|
|||
protected void onPause()
|
||||
{
|
||||
super.onPause();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -540,7 +545,7 @@ public class QtActivity extends Activity
|
|||
protected void onPostCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onPostCreate(savedInstanceState);
|
||||
QtApplication.invokeDelegate(savedInstanceState);
|
||||
QtLoader.invokeDelegate(savedInstanceState);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -548,14 +553,14 @@ public class QtActivity extends Activity
|
|||
protected void onPostResume()
|
||||
{
|
||||
super.onPostResume();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
protected void onPrepareDialog(int id, Dialog dialog)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(id, dialog).invoked)
|
||||
if (!QtLoader.invokeDelegate(id, dialog).invoked)
|
||||
super.onPrepareDialog(id, dialog);
|
||||
}
|
||||
public void super_onPrepareDialog(int id, Dialog dialog)
|
||||
|
|
@ -567,7 +572,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onPrepareOptionsMenu(Menu menu)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(menu);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(menu);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -582,7 +587,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onPreparePanel(int featureId, View view, Menu menu)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(featureId, view, menu);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(featureId, view, menu);
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -598,14 +603,14 @@ public class QtActivity extends Activity
|
|||
protected void onRestart()
|
||||
{
|
||||
super.onRestart();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
protected void onRestoreInstanceState(Bundle savedInstanceState)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(savedInstanceState).invoked)
|
||||
if (!QtLoader.invokeDelegate(savedInstanceState).invoked)
|
||||
super.onRestoreInstanceState(savedInstanceState);
|
||||
}
|
||||
public void super_onRestoreInstanceState(Bundle savedInstanceState)
|
||||
|
|
@ -618,14 +623,14 @@ public class QtActivity extends Activity
|
|||
protected void onResume()
|
||||
{
|
||||
super.onResume();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public Object onRetainNonConfigurationInstance()
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate();
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate();
|
||||
if (res.invoked)
|
||||
return res.methodReturns;
|
||||
else
|
||||
|
|
@ -640,7 +645,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(outState).invoked)
|
||||
if (!QtLoader.invokeDelegate(outState).invoked)
|
||||
super.onSaveInstanceState(outState);
|
||||
}
|
||||
public void super_onSaveInstanceState(Bundle outState)
|
||||
|
|
@ -653,7 +658,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onSearchRequested()
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate();
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate();
|
||||
if (res.invoked)
|
||||
return (Boolean)res.methodReturns;
|
||||
else
|
||||
|
|
@ -669,7 +674,7 @@ public class QtActivity extends Activity
|
|||
protected void onStart()
|
||||
{
|
||||
super.onStart();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
|
@ -677,14 +682,14 @@ public class QtActivity extends Activity
|
|||
protected void onStop()
|
||||
{
|
||||
super.onStop();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
protected void onTitleChanged(CharSequence title, int color)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(title, color).invoked)
|
||||
if (!QtLoader.invokeDelegate(title, color).invoked)
|
||||
super.onTitleChanged(title, color);
|
||||
}
|
||||
public void super_onTitleChanged(CharSequence title, int color)
|
||||
|
|
@ -696,8 +701,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onTouchEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onTouchEvent, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onTouchEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onTouchEvent, event);
|
||||
else
|
||||
return super.onTouchEvent(event);
|
||||
}
|
||||
|
|
@ -710,8 +715,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onTrackballEvent(MotionEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onTrackballEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onTrackballEvent, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onTrackballEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onTrackballEvent, event);
|
||||
else
|
||||
return super.onTrackballEvent(event);
|
||||
}
|
||||
|
|
@ -724,7 +729,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onUserInteraction()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onUserInteraction();
|
||||
}
|
||||
public void super_onUserInteraction()
|
||||
|
|
@ -736,7 +741,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected void onUserLeaveHint()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onUserLeaveHint();
|
||||
}
|
||||
public void super_onUserLeaveHint()
|
||||
|
|
@ -748,7 +753,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onWindowAttributesChanged(LayoutParams params)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(params).invoked)
|
||||
if (!QtLoader.invokeDelegate(params).invoked)
|
||||
super.onWindowAttributesChanged(params);
|
||||
}
|
||||
public void super_onWindowAttributesChanged(LayoutParams params)
|
||||
|
|
@ -760,7 +765,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onWindowFocusChanged(boolean hasFocus)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(hasFocus).invoked)
|
||||
if (!QtLoader.invokeDelegate(hasFocus).invoked)
|
||||
super.onWindowFocusChanged(hasFocus);
|
||||
}
|
||||
public void super_onWindowFocusChanged(boolean hasFocus)
|
||||
|
|
@ -774,7 +779,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onAttachedToWindow()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onAttachedToWindow();
|
||||
}
|
||||
public void super_onAttachedToWindow()
|
||||
|
|
@ -786,7 +791,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onBackPressed()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onBackPressed();
|
||||
}
|
||||
public void super_onBackPressed()
|
||||
|
|
@ -798,7 +803,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onDetachedFromWindow()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onDetachedFromWindow();
|
||||
}
|
||||
public void super_onDetachedFromWindow()
|
||||
|
|
@ -810,8 +815,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onKeyLongPress(int keyCode, KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onKeyLongPress != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyLongPress, keyCode, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onKeyLongPress != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onKeyLongPress, keyCode, event);
|
||||
else
|
||||
return super.onKeyLongPress(keyCode, event);
|
||||
}
|
||||
|
|
@ -827,7 +832,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected Dialog onCreateDialog(int id, Bundle args)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(id, args);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(id, args);
|
||||
if (res.invoked)
|
||||
return (Dialog)res.methodReturns;
|
||||
else
|
||||
|
|
@ -842,7 +847,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
protected void onPrepareDialog(int id, Dialog dialog, Bundle args)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(id, dialog, args).invoked)
|
||||
if (!QtLoader.invokeDelegate(id, dialog, args).invoked)
|
||||
super.onPrepareDialog(id, dialog, args);
|
||||
}
|
||||
public void super_onPrepareDialog(int id, Dialog dialog, Bundle args)
|
||||
|
|
@ -857,8 +862,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean dispatchKeyShortcutEvent(KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchKeyShortcutEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchKeyShortcutEvent, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.dispatchKeyShortcutEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.dispatchKeyShortcutEvent, event);
|
||||
else
|
||||
return super.dispatchKeyShortcutEvent(event);
|
||||
}
|
||||
|
|
@ -871,7 +876,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onActionModeFinished(ActionMode mode)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(mode).invoked)
|
||||
if (!QtLoader.invokeDelegate(mode).invoked)
|
||||
super.onActionModeFinished(mode);
|
||||
}
|
||||
public void super_onActionModeFinished(ActionMode mode)
|
||||
|
|
@ -883,7 +888,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onActionModeStarted(ActionMode mode)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(mode).invoked)
|
||||
if (!QtLoader.invokeDelegate(mode).invoked)
|
||||
super.onActionModeStarted(mode);
|
||||
}
|
||||
public void super_onActionModeStarted(ActionMode mode)
|
||||
|
|
@ -895,7 +900,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public void onAttachFragment(Fragment fragment)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(fragment).invoked)
|
||||
if (!QtLoader.invokeDelegate(fragment).invoked)
|
||||
super.onAttachFragment(fragment);
|
||||
}
|
||||
public void super_onAttachFragment(Fragment fragment)
|
||||
|
|
@ -907,7 +912,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public View onCreateView(View parent, String name, Context context, AttributeSet attrs)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(parent, name, context, attrs);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(parent, name, context, attrs);
|
||||
if (res.invoked)
|
||||
return (View)res.methodReturns;
|
||||
else
|
||||
|
|
@ -922,8 +927,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onKeyShortcut(int keyCode, KeyEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onKeyShortcut != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyShortcut, keyCode,event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onKeyShortcut != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onKeyShortcut, keyCode,event);
|
||||
else
|
||||
return super.onKeyShortcut(keyCode, event);
|
||||
}
|
||||
|
|
@ -936,7 +941,7 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public ActionMode onWindowStartingActionMode(Callback callback)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(callback);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(callback);
|
||||
if (res.invoked)
|
||||
return (ActionMode)res.methodReturns;
|
||||
else
|
||||
|
|
@ -954,8 +959,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean dispatchGenericMotionEvent(MotionEvent ev)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchGenericMotionEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchGenericMotionEvent, ev);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.dispatchGenericMotionEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.dispatchGenericMotionEvent, ev);
|
||||
else
|
||||
return super.dispatchGenericMotionEvent(ev);
|
||||
}
|
||||
|
|
@ -968,8 +973,8 @@ public class QtActivity extends Activity
|
|||
@Override
|
||||
public boolean onGenericMotionEvent(MotionEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onGenericMotionEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onGenericMotionEvent, event);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onGenericMotionEvent != null)
|
||||
return (Boolean) QtLoader.invokeDelegateMethod(QtLoader.onGenericMotionEvent, event);
|
||||
else
|
||||
return super.onGenericMotionEvent(event);
|
||||
}
|
||||
|
|
@ -982,8 +987,8 @@ public class QtActivity extends Activity
|
|||
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onRequestPermissionsResult != null) {
|
||||
QtApplication.invokeDelegateMethod(QtApplication.onRequestPermissionsResult, requestCode , permissions, grantResults);
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.onRequestPermissionsResult != null) {
|
||||
QtLoader.invokeDelegateMethod(QtLoader.onRequestPermissionsResult, requestCode , permissions, grantResults);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,130 +1,33 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
package org.qtproject.qt.android.bindings;
|
||||
|
||||
import android.app.Application;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import org.qtproject.qt.android.QtLoader;
|
||||
|
||||
public class QtApplication extends Application
|
||||
{
|
||||
public final static String QtTAG = "Qt";
|
||||
public static Object m_delegateObject = null;
|
||||
public static HashMap<String, ArrayList<Method>> m_delegateMethods= new HashMap<String, ArrayList<Method>>();
|
||||
public static Method dispatchKeyEvent = null;
|
||||
public static Method dispatchPopulateAccessibilityEvent = null;
|
||||
public static Method dispatchTouchEvent = null;
|
||||
public static Method dispatchTrackballEvent = null;
|
||||
public static Method onKeyDown = null;
|
||||
public static Method onKeyMultiple = null;
|
||||
public static Method onKeyUp = null;
|
||||
public static Method onTouchEvent = null;
|
||||
public static Method onTrackballEvent = null;
|
||||
public static Method onActivityResult = null;
|
||||
public static Method onCreate = null;
|
||||
public static Method onKeyLongPress = null;
|
||||
public static Method dispatchKeyShortcutEvent = null;
|
||||
public static Method onKeyShortcut = null;
|
||||
public static Method dispatchGenericMotionEvent = null;
|
||||
public static Method onGenericMotionEvent = null;
|
||||
public static Method onRequestPermissionsResult = null;
|
||||
private static String activityClassName;
|
||||
public static void setQtContextDelegate(Class<?> clazz, Object listener)
|
||||
{
|
||||
m_delegateObject = listener;
|
||||
activityClassName = clazz.getCanonicalName();
|
||||
|
||||
ArrayList<Method> delegateMethods = new ArrayList<Method>();
|
||||
for (Method m : listener.getClass().getMethods()) {
|
||||
if (m.getDeclaringClass().getName().startsWith("org.qtproject.qt.android"))
|
||||
delegateMethods.add(m);
|
||||
}
|
||||
|
||||
ArrayList<Field> applicationFields = new ArrayList<Field>();
|
||||
for (Field f : QtApplication.class.getFields()) {
|
||||
if (f.getDeclaringClass().getName().equals(QtApplication.class.getName()))
|
||||
applicationFields.add(f);
|
||||
}
|
||||
|
||||
for (Method delegateMethod : delegateMethods) {
|
||||
try {
|
||||
clazz.getDeclaredMethod(delegateMethod.getName(), delegateMethod.getParameterTypes());
|
||||
if (QtApplication.m_delegateMethods.containsKey(delegateMethod.getName())) {
|
||||
QtApplication.m_delegateMethods.get(delegateMethod.getName()).add(delegateMethod);
|
||||
} else {
|
||||
ArrayList<Method> delegateSet = new ArrayList<Method>();
|
||||
delegateSet.add(delegateMethod);
|
||||
QtApplication.m_delegateMethods.put(delegateMethod.getName(), delegateSet);
|
||||
}
|
||||
for (Field applicationField:applicationFields) {
|
||||
if (applicationField.getName().equals(delegateMethod.getName())) {
|
||||
try {
|
||||
applicationField.set(null, delegateMethod);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) { }
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTerminate() {
|
||||
if (m_delegateObject != null && m_delegateMethods.containsKey("onTerminate"))
|
||||
invokeDelegateMethod(m_delegateMethods.get("onTerminate").get(0));
|
||||
if (QtLoader.m_delegateObject != null && QtLoader.m_delegateMethods.containsKey("onTerminate"))
|
||||
QtLoader.invokeDelegateMethod(QtLoader.m_delegateMethods.get("onTerminate").get(0));
|
||||
super.onTerminate();
|
||||
}
|
||||
|
||||
// TODO: only keep around for avoid build errors, will be removed.
|
||||
public static class InvokeResult
|
||||
{
|
||||
public boolean invoked = false;
|
||||
public Object methodReturns = null;
|
||||
}
|
||||
|
||||
private static int stackDeep=-1;
|
||||
public static InvokeResult invokeDelegate(Object... args)
|
||||
{
|
||||
InvokeResult result = new InvokeResult();
|
||||
if (m_delegateObject == null)
|
||||
return result;
|
||||
StackTraceElement[] elements = Thread.currentThread().getStackTrace();
|
||||
if (-1 == stackDeep) {
|
||||
for (int it=0;it<elements.length;it++)
|
||||
if (elements[it].getClassName().equals(activityClassName)) {
|
||||
stackDeep = it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (-1 == stackDeep)
|
||||
return result;
|
||||
|
||||
final String methodName=elements[stackDeep].getMethodName();
|
||||
if (!m_delegateMethods.containsKey(methodName))
|
||||
return result;
|
||||
|
||||
for (Method m : m_delegateMethods.get(methodName)) {
|
||||
if (m.getParameterTypes().length == args.length) {
|
||||
result.methodReturns = invokeDelegateMethod(m, args);
|
||||
result.invoked = true;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Object invokeDelegateMethod(Method m, Object... args)
|
||||
{
|
||||
try {
|
||||
return m.invoke(m_delegateObject, args);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// Copyright (C) 2023 The Qt Company Ltd.
|
||||
// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
|
|
@ -12,10 +12,12 @@ import android.os.Bundle;
|
|||
import android.os.IBinder;
|
||||
|
||||
import org.qtproject.qt.android.QtNative;
|
||||
import org.qtproject.qt.android.QtServiceLoader;
|
||||
import org.qtproject.qt.android.QtLoader;
|
||||
|
||||
public class QtService extends Service
|
||||
{
|
||||
QtServiceLoader m_loader = new QtServiceLoader(this);
|
||||
QtServiceLoader m_loader = new QtServiceLoader(this, QtService.class);
|
||||
|
||||
|
||||
/////////////////////////// forward all notifications ////////////////////////////
|
||||
|
|
@ -47,14 +49,14 @@ public class QtService extends Service
|
|||
public void onDestroy()
|
||||
{
|
||||
super.onDestroy();
|
||||
QtApplication.invokeDelegate();
|
||||
QtLoader.invokeDelegate();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(intent);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(intent);
|
||||
if (res.invoked)
|
||||
return (IBinder)res.methodReturns;
|
||||
else
|
||||
|
|
@ -65,7 +67,7 @@ public class QtService extends Service
|
|||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(newConfig).invoked)
|
||||
if (!QtLoader.invokeDelegate(newConfig).invoked)
|
||||
super.onConfigurationChanged(newConfig);
|
||||
}
|
||||
public void super_onConfigurationChanged(Configuration newConfig)
|
||||
|
|
@ -77,7 +79,7 @@ public class QtService extends Service
|
|||
@Override
|
||||
public void onLowMemory()
|
||||
{
|
||||
if (!QtApplication.invokeDelegate().invoked)
|
||||
if (!QtLoader.invokeDelegate().invoked)
|
||||
super.onLowMemory();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
|
@ -85,7 +87,7 @@ public class QtService extends Service
|
|||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(intent, flags, startId);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(intent, flags, startId);
|
||||
if (res.invoked)
|
||||
return (Integer) res.methodReturns;
|
||||
else
|
||||
|
|
@ -100,7 +102,7 @@ public class QtService extends Service
|
|||
@Override
|
||||
public void onTaskRemoved(Intent rootIntent)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(rootIntent).invoked)
|
||||
if (!QtLoader.invokeDelegate(rootIntent).invoked)
|
||||
super.onTaskRemoved(rootIntent);
|
||||
}
|
||||
public void super_onTaskRemoved(Intent rootIntent)
|
||||
|
|
@ -112,7 +114,7 @@ public class QtService extends Service
|
|||
@Override
|
||||
public void onTrimMemory(int level)
|
||||
{
|
||||
if (!QtApplication.invokeDelegate(level).invoked)
|
||||
if (!QtLoader.invokeDelegate(level).invoked)
|
||||
super.onTrimMemory(level);
|
||||
}
|
||||
public void super_onTrimMemory(int level)
|
||||
|
|
@ -124,7 +126,7 @@ public class QtService extends Service
|
|||
@Override
|
||||
public boolean onUnbind(Intent intent)
|
||||
{
|
||||
QtApplication.InvokeResult res = QtApplication.invokeDelegate(intent);
|
||||
QtLoader.InvokeResult res = QtLoader.invokeDelegate(intent);
|
||||
if (res.invoked)
|
||||
return (Boolean) res.methodReturns;
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue