qt5base-lts/tests/auto/corelib/kernel
Assam Boudjelthia 3b6d288e3b Android: Simplify Qt for Android hierarchy, less Java reflection!
This changes takes Qt for Android Java code away from the Delegate
classes that uses heavily Java reflection to invoke Activity/Service
calls and overrides. So instead of that, now, we have a QtActivityBase
and a QtServiceBase classes which handle the override logic needed for
Qt directly without reflection.

These Base classes extend Android's Activity and Service directly, and
are inside the internal Qt android package (under Qt6Android.jar).

For example, to handle onConfigurationChanged, instead of the current
way where we need this in QtActivityDelegate:

 public void onConfigurationChanged(Configuration configuration)
 {
     try {
         m_super_onConfigurationChanged.invoke(m_activity, configuration);
     } catch (Exception e) {
         e.printStackTrace();
     }
         handleUiModeChange(configuration.uiMode &
Configuration.UI_MODE_NIGHT_MASK);
 }

And then this in QtActivity:

 @Override
 public void onConfigurationChanged(Configuration newConfig)
     {
         if (!QtLoader.invokeDelegate(newConfig).invoked)
             super.onConfigurationChanged(newConfig);
    }
    public void super_onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
    }

And having to keep it's Method handles around and then use Java
reflection
to call the override behavior done by Qt and the superclass methods.

instead of that, we can do it now in QtActivityBase like:

 @Override
 public void onConfigurationChanged(Configuration newConfig)
 {
     super.onConfigurationChanged(newConfig);
     handleUiModeChange(newConfig.uiMode &
Configuration.UI_MODE_NIGHT_MASK);
 }

Then, we would still have our user facing QtActivity class which extends
QtActivityBase and benefit from the same implementation of Qt logic done
in the base class.

An additional benefit to this approach is that now QtActivity will be
very lightweight and doesn't need to have all the boilerplate code as
before.

[ChangeLog][Android] Simplify Qt for Android public bindings
(QActivity, QtService and QtApplication) by implementing base
classes which use the delegate implementions directly and avoid
reflection.

Task-number: QTBUG-115014
Task-number: QTBUG-114593
Change-Id: Ie1eca74f989627be4468786a27e30b16209fc521
Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>
2023-10-12 19:16:47 +03:00
..
qapplicationstatic CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qcoreapplication CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qdeadlinetimer CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qelapsedtimer CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qeventdispatcher tst_qeventdispatcher: port to QDeadlineTimer 2023-09-04 22:40:35 +03:00
qeventloop Remove the unix dispatcher from WASM builds 2023-08-22 17:19:50 +02:00
qjnienvironment JNI: Silence and harden QJniEnvironment test 2023-10-05 19:50:33 +02:00
qjniobject Android: Simplify Qt for Android hierarchy, less Java reflection! 2023-10-12 19:16:47 +03:00
qjnitypes JNI: Fix native functions that take a declared QtJniTypes class 2023-09-27 19:44:58 +02:00
qmath CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qmetacontainer CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qmetaenum CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qmetamethod CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qmetaobject invokeMethod: Try invoking functor and member function accepting pointer, returning void 2023-08-24 07:45:04 +02:00
qmetaobjectbuilder CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qmetaproperty CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qmetatype QMetaType: fix recursive detection of std::optional operators 2023-07-31 18:43:55 -07:00
qmimedata tests/auto/*: port Q_FOREACH to ranged-for 2023-08-19 16:29:09 +03:00
qobject Allow QObjects to opt in to receiving ParentAboutToChange/ParentChange 2023-08-30 15:45:41 +02:00
qpermission Constrain QCoreApplication::requestPermission to compatible functors 2023-09-01 03:30:50 +02:00
qpointer QPointer: ensure construction from nullptr is constinit'able 2023-10-05 20:19:40 +02:00
qproperty QProperty: Steal currentCompatProperty while evaluating a different one 2023-09-27 09:31:41 +00:00
qsignalblocker Implement QSignalBlocker::dismiss() 2023-08-31 22:11:51 +00:00
qsignalmapper CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qsocketnotifier QAbstractSocketEngine: port to QDeadlineTimer 2023-10-07 02:28:12 +03:00
qtimer QTimer: extend property tests and fix binding loop 2023-09-03 18:20:51 +02:00
qtranslator Give QLocale::uiLanguages() a separator parameter 2023-08-16 16:25:48 +02:00
qvariant QVariant: add fromMetaType 2023-09-20 00:05:53 +02:00
qwineventnotifier CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
qwinregistrykey CMake: Make corelib tests standalone projects 2023-07-05 15:09:32 +02:00
CMakeLists.txt tests: Remove remains of qmake conversion from CMakeLists.txt files 2023-02-17 21:56:49 +01:00