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
Assam Boudjelthia 2022-09-30 14:33:40 +03:00
parent c03eb94c8a
commit d1760bc810
8 changed files with 278 additions and 236 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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);
}
}
}

View File

@ -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);
}

View File

@ -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()

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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