Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
androidjnimain.cpp File Reference

(ed064e4f69a45b74814877bca3ff6d681795982e)

#include <dlfcn.h>
#include <pthread.h>
#include <qplugin.h>
#include <semaphore.h>
#include "androidcontentfileengine.h"
#include "qandroidapkfileengine.h"
#include "androidjniinput.h"
#include "androidjnimain.h"
#include "androidjnimenu.h"
#include "androidwindowembedding.h"
#include "qandroidassetsfileenginehandler.h"
#include "qandroideventdispatcher.h"
#include "qandroidplatformdialoghelpers.h"
#include "qandroidplatformintegration.h"
#include "qandroidplatformscreen.h"
#include "qandroidplatformwindow.h"
#include <android/api-level.h>
#include <android/asset_manager_jni.h>
#include <android/bitmap.h>
#include <QtCore/private/qjnihelpers_p.h>
#include <QtCore/qbasicatomic.h>
#include <QtCore/qjnienvironment.h>
#include <QtCore/qjniobject.h>
#include <QtCore/qprocess.h>
#include <QtCore/qresource.h>
#include <QtCore/qscopeguard.h>
#include <QtCore/qthread.h>
#include <QtCore/private/qandroiditemmodelproxy_p.h>
#include <QtCore/private/qandroidmodelindexproxy_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/private/qhighdpiscaling_p.h>
#include <qpa/qwindowsysteminterface.h>
Include dependency graph for androidjnimain.cpp:

Go to the source code of this file.

Namespaces

namespace  QtAndroid

Macros

#define FIND_AND_CHECK_CLASS(CLASS_NAME)
#define GET_AND_CHECK_METHOD(VAR, CLASS, METHOD_NAME, METHOD_SIGNATURE)
#define GET_AND_CHECK_STATIC_METHOD(VAR, CLASS, METHOD_NAME, METHOD_SIGNATURE)
#define GET_AND_CHECK_FIELD(VAR, CLASS, FIELD_NAME, FIELD_SIGNATURE)
#define GET_AND_CHECK_STATIC_FIELD(VAR, CLASS, FIELD_NAME, FIELD_SIGNATURE)

Typedefs

typedef int(* Main) (int, char **)

Functions

 Q_DECLARE_JNI_CLASS (QtThread, "org/qtproject/qt/android/QtThread")
QBasicMutexQtAndroid::platformInterfaceMutex ()
void QtAndroid::setAndroidPlatformIntegration (QAndroidPlatformIntegration *androidPlatformIntegration)
QAndroidPlatformIntegrationQtAndroid::androidPlatformIntegration ()
QWindowQtAndroid::topLevelWindowAt (const QPoint &globalPos)
QWindowQtAndroid::windowFromId (int windowId)
double QtAndroid::pixelDensity ()
AAssetManager * QtAndroid::assetManager ()
jclass QtAndroid::applicationClass ()
bool QtAndroid::isQtApplication ()
void QtAndroid::notifyNativePluginIntegrationReady (bool ready)
jobject QtAndroid::createBitmap (QImage img, JNIEnv *env=nullptr)
jobject QtAndroid::createBitmap (int width, int height, QImage::Format format, JNIEnv *env)
jobject QtAndroid::createBitmapDrawable (jobject bitmap, JNIEnv *env=nullptr)
const char * QtAndroid::classErrorMsgFmt ()
const char * QtAndroid::methodErrorMsgFmt ()
const char * QtAndroid::qtTagText ()
QString QtAndroid::deviceName ()
void QtAndroid::setViewVisibility (jobject view, bool visible)
bool QtAndroid::blockEventLoopsWhenSuspended ()
jobject QtAndroid::assets ()
AndroidBackendRegisterQtAndroid::backendRegister ()
static bool initJavaReferences (QJniEnvironment &env)
static bool initAndroidQpaPlugin (JNIEnv *jenv, jobject object)
static void startQtNativeApplication (JNIEnv *jenv, jobject object, jstring paramsString)
static void clearJavaReferences (JNIEnv *env)
static void waitForServiceSetup (JNIEnv *env, jclass)
static void terminateQtNativeApplication (JNIEnv *env, jclass)
static void handleLayoutSizeChanged (JNIEnv *, jclass, jint availableWidth, jint availableHeight)
static void updateApplicationState (JNIEnv *, jobject, jint state)
static void updateLocale (JNIEnv *, jobject)
static void handleOrientationChanged (JNIEnv *, jobject, jint newRotation, jint nativeOrientation)
static void handleRefreshRateChanged (JNIEnv *, jclass, jfloat refreshRate)
static void handleScreenAdded (JNIEnv *, jclass, jint displayId)
static void handleScreenChanged (JNIEnv *, jclass, jint displayId)
static void handleScreenRemoved (JNIEnv *, jclass, jint displayId)
static void handleUiDarkModeChanged (JNIEnv *, jobject, jint newUiMode)
static void handleScreenDensityChanged (JNIEnv *, jclass, jdouble density)
static void onActivityResult (JNIEnv *, jclass, jint requestCode, jint resultCode, jobject data)
static void onNewIntent (JNIEnv *env, jclass, jobject data)
static jobject onBind (JNIEnv *, jclass, jobject intent)
static bool registerNatives (QJniEnvironment &env)
QT_END_NAMESPACE Q_DECL_EXPORT jint JNICALL JNI_OnLoad (JavaVM *, void *)

Variables

static QT_BEGIN_NAMESPACE jclass m_applicationClass = nullptr
static AAssetManager * m_assetManager = nullptr
static jobject m_assets = nullptr
static jobject m_resourcesObj = nullptr
static jclass m_qtActivityClass = nullptr
static jclass m_qtServiceClass = nullptr
static int m_pendingApplicationState = -1
static QBasicMutex m_platformMutex
static jclass m_bitmapClass = nullptr
static jmethodID m_createBitmapMethodID = nullptr
static jobject m_ARGB_8888_BitmapConfigValue = nullptr
static jobject m_RGB_565_BitmapConfigValue = nullptr
static jclass m_bitmapDrawableClass = nullptr
static jmethodID m_bitmapDrawableConstructorMethodID = nullptr
static Main m_main = nullptr
static sem_t m_exitSemaphore
static sem_t m_stopQtSemaphore
static QAndroidPlatformIntegrationm_androidPlatformIntegration = nullptr
static double m_density = 1.0
static AndroidAssetsFileEngineHandlerm_androidAssetsFileEngineHandler = nullptr
static AndroidContentFileEngineHandlerm_androidContentFileEngineHandler = nullptr
static QAndroidApkFileEngineHandlerm_androidApkFileEngineHandler = nullptr
static AndroidBackendRegisterm_backendRegister = nullptr
static const char m_qtTag [] = "Qt"
static const char m_classErrorMsg [] = "Can't find class \"%s\""
static const char m_methodErrorMsg [] = "Can't find method \"%s%s\""
static Q_CONSTINIT QBasicAtomicInt startQtAndroidPluginCalled = Q_BASIC_ATOMIC_INITIALIZER(0)
static JNINativeMethod methods []

Macro Definition Documentation

◆ FIND_AND_CHECK_CLASS

#define FIND_AND_CHECK_CLASS ( CLASS_NAME)
Value:
clazz = env->FindClass(CLASS_NAME); \
if (!clazz) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_classErrorMsg, CLASS_NAME); \
return false; \
}
static const char m_qtTag[]
static const char m_classErrorMsg[]

Definition at line 745 of file androidjnimain.cpp.

◆ GET_AND_CHECK_FIELD

#define GET_AND_CHECK_FIELD ( VAR,
CLASS,
FIELD_NAME,
FIELD_SIGNATURE )
Value:
VAR = env->GetFieldID(CLASS, FIELD_NAME, FIELD_SIGNATURE); \
if (!VAR) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_methodErrorMsg, FIELD_NAME, FIELD_SIGNATURE); \
return false; \
}
static const char m_methodErrorMsg[]
#define VAR(I)

Definition at line 766 of file androidjnimain.cpp.

◆ GET_AND_CHECK_METHOD

#define GET_AND_CHECK_METHOD ( VAR,
CLASS,
METHOD_NAME,
METHOD_SIGNATURE )
Value:
VAR = env->GetMethodID(CLASS, METHOD_NAME, METHOD_SIGNATURE); \
if (!VAR) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_methodErrorMsg, METHOD_NAME, METHOD_SIGNATURE); \
return false; \
}

Definition at line 752 of file androidjnimain.cpp.

◆ GET_AND_CHECK_STATIC_FIELD

#define GET_AND_CHECK_STATIC_FIELD ( VAR,
CLASS,
FIELD_NAME,
FIELD_SIGNATURE )
Value:
VAR = env->GetStaticFieldID(CLASS, FIELD_NAME, FIELD_SIGNATURE); \
if (!VAR) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_methodErrorMsg, FIELD_NAME, FIELD_SIGNATURE); \
return false; \
}

Definition at line 773 of file androidjnimain.cpp.

◆ GET_AND_CHECK_STATIC_METHOD

#define GET_AND_CHECK_STATIC_METHOD ( VAR,
CLASS,
METHOD_NAME,
METHOD_SIGNATURE )
Value:
VAR = env->GetStaticMethodID(CLASS, METHOD_NAME, METHOD_SIGNATURE); \
if (!VAR) { \
__android_log_print(ANDROID_LOG_FATAL, m_qtTag, m_methodErrorMsg, METHOD_NAME, METHOD_SIGNATURE); \
return false; \
}

Definition at line 759 of file androidjnimain.cpp.

Typedef Documentation

◆ Main

typedef int(* Main)(int, char **)

Definition at line 72 of file androidjnimain.cpp.

Function Documentation

◆ clearJavaReferences()

◆ handleLayoutSizeChanged()

void handleLayoutSizeChanged ( JNIEnv * ,
jclass ,
jint availableWidth,
jint availableHeight )
static

Definition at line 577 of file androidjnimain.cpp.

◆ handleOrientationChanged()

void handleOrientationChanged ( JNIEnv * ,
jobject ,
jint newRotation,
jint nativeOrientation )
static

Definition at line 635 of file androidjnimain.cpp.

References m_androidPlatformIntegration, and QAndroidPlatformIntegration::screen().

Here is the call graph for this function:

◆ handleRefreshRateChanged()

void handleRefreshRateChanged ( JNIEnv * ,
jclass ,
jfloat refreshRate )
static

Definition at line 674 of file androidjnimain.cpp.

◆ handleScreenAdded()

void handleScreenAdded ( JNIEnv * ,
jclass ,
jint displayId )
static

Definition at line 681 of file androidjnimain.cpp.

◆ handleScreenChanged()

void handleScreenChanged ( JNIEnv * ,
jclass ,
jint displayId )
static

Definition at line 688 of file androidjnimain.cpp.

◆ handleScreenDensityChanged()

void handleScreenDensityChanged ( JNIEnv * ,
jclass ,
jdouble density )
static

Definition at line 709 of file androidjnimain.cpp.

◆ handleScreenRemoved()

void handleScreenRemoved ( JNIEnv * ,
jclass ,
jint displayId )
static

Definition at line 695 of file androidjnimain.cpp.

◆ handleUiDarkModeChanged()

void handleUiDarkModeChanged ( JNIEnv * ,
jobject ,
jint newUiMode )
static

Definition at line 702 of file androidjnimain.cpp.

◆ initAndroidQpaPlugin()

bool initAndroidQpaPlugin ( JNIEnv * jenv,
jobject object )
static

◆ initJavaReferences()

bool initJavaReferences ( QJniEnvironment & env)
static

Definition at line 819 of file androidjnimain.cpp.

References m_assetManager.

◆ JNI_OnLoad()

QT_END_NAMESPACE Q_DECL_EXPORT jint JNICALL JNI_OnLoad ( JavaVM * ,
void *  )

Definition at line 885 of file androidjnimain.cpp.

◆ onActivityResult()

void onActivityResult ( JNIEnv * ,
jclass ,
jint requestCode,
jint resultCode,
jobject data )
static

Definition at line 715 of file androidjnimain.cpp.

◆ onBind()

jobject onBind ( JNIEnv * ,
jclass ,
jobject intent )
static

Definition at line 728 of file androidjnimain.cpp.

◆ onNewIntent()

void onNewIntent ( JNIEnv * env,
jclass ,
jobject data )
static

Definition at line 723 of file androidjnimain.cpp.

◆ Q_DECLARE_JNI_CLASS()

Q_DECLARE_JNI_CLASS ( QtThread ,
"org/qtproject/qt/android/QtThread"  )

◆ registerNatives()

bool registerNatives ( QJniEnvironment & env)
static

Definition at line 782 of file androidjnimain.cpp.

◆ startQtNativeApplication()

void startQtNativeApplication ( JNIEnv * jenv,
jobject object,
jstring paramsString )
static

Definition at line 399 of file androidjnimain.cpp.

References m_exitSemaphore, m_main, and m_stopQtSemaphore.

◆ terminateQtNativeApplication()

void terminateQtNativeApplication ( JNIEnv * env,
jclass  )
static

Definition at line 544 of file androidjnimain.cpp.

◆ updateApplicationState()

void updateApplicationState ( JNIEnv * ,
jobject ,
jint state )
static

Definition at line 590 of file androidjnimain.cpp.

References QAndroidEventDispatcherStopper::goingToStop(), QAndroidEventDispatcherStopper::instance(), m_androidPlatformIntegration, m_main, m_pendingApplicationState, QAndroidEventDispatcherStopper::startAll(), QAndroidEventDispatcherStopper::stopAll(), and QAndroidEventDispatcherStopper::stopped().

Here is the call graph for this function:

◆ updateLocale()

void updateLocale ( JNIEnv * ,
jobject  )
static

Definition at line 629 of file androidjnimain.cpp.

◆ waitForServiceSetup()

void waitForServiceSetup ( JNIEnv * env,
jclass  )
static

Definition at line 535 of file androidjnimain.cpp.

Variable Documentation

◆ m_androidApkFileEngineHandler

QAndroidApkFileEngineHandler * m_androidApkFileEngineHandler = nullptr
static

Definition at line 82 of file androidjnimain.cpp.

Referenced by initAndroidQpaPlugin().

◆ m_androidAssetsFileEngineHandler

AndroidAssetsFileEngineHandler * m_androidAssetsFileEngineHandler = nullptr
static

Definition at line 80 of file androidjnimain.cpp.

Referenced by initAndroidQpaPlugin().

◆ m_androidContentFileEngineHandler

AndroidContentFileEngineHandler * m_androidContentFileEngineHandler = nullptr
static

Definition at line 81 of file androidjnimain.cpp.

Referenced by initAndroidQpaPlugin().

◆ m_androidPlatformIntegration

◆ m_applicationClass

QT_BEGIN_NAMESPACE jclass m_applicationClass = nullptr
static

Definition at line 53 of file androidjnimain.cpp.

◆ m_ARGB_8888_BitmapConfigValue

jobject m_ARGB_8888_BitmapConfigValue = nullptr
static

Definition at line 66 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_assetManager

AAssetManager * m_assetManager = nullptr
static

Definition at line 54 of file androidjnimain.cpp.

Referenced by initJavaReferences().

◆ m_assets

jobject m_assets = nullptr
static

Definition at line 55 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_backendRegister

AndroidBackendRegister * m_backendRegister = nullptr
static

Definition at line 84 of file androidjnimain.cpp.

Referenced by QtAndroid::backendRegister(), and initAndroidQpaPlugin().

◆ m_bitmapClass

jclass m_bitmapClass = nullptr
static

Definition at line 64 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_bitmapDrawableClass

jclass m_bitmapDrawableClass = nullptr
static

Definition at line 69 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_bitmapDrawableConstructorMethodID

jmethodID m_bitmapDrawableConstructorMethodID = nullptr
static

Definition at line 70 of file androidjnimain.cpp.

◆ m_classErrorMsg

const char m_classErrorMsg = "Can't find class \"%s\""
static

Definition at line 87 of file androidjnimain.cpp.

Referenced by QtAndroid::classErrorMsgFmt().

◆ m_createBitmapMethodID

jmethodID m_createBitmapMethodID = nullptr
static

Definition at line 65 of file androidjnimain.cpp.

◆ m_density

double m_density = 1.0
static

Definition at line 78 of file androidjnimain.cpp.

Referenced by QtAndroid::pixelDensity().

◆ m_exitSemaphore

sem_t m_exitSemaphore
static

Definition at line 74 of file androidjnimain.cpp.

Referenced by initAndroidQpaPlugin(), and startQtNativeApplication().

◆ m_main

Main m_main = nullptr
static

Definition at line 73 of file androidjnimain.cpp.

Referenced by startQtNativeApplication(), and updateApplicationState().

◆ m_methodErrorMsg

const char m_methodErrorMsg = "Can't find method \"%s%s\""
static

Definition at line 88 of file androidjnimain.cpp.

Referenced by QtAndroid::methodErrorMsgFmt().

◆ m_pendingApplicationState

int m_pendingApplicationState = -1
static

◆ m_platformMutex

QBasicMutex m_platformMutex
static

Definition at line 62 of file androidjnimain.cpp.

◆ m_qtActivityClass

jclass m_qtActivityClass = nullptr
static

Definition at line 58 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_qtServiceClass

jclass m_qtServiceClass = nullptr
static

Definition at line 59 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_qtTag

const char m_qtTag = "Qt"
static

Definition at line 86 of file androidjnimain.cpp.

Referenced by QtAndroid::qtTagText().

◆ m_resourcesObj

jobject m_resourcesObj = nullptr
static

Definition at line 56 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_RGB_565_BitmapConfigValue

jobject m_RGB_565_BitmapConfigValue = nullptr
static

Definition at line 67 of file androidjnimain.cpp.

Referenced by clearJavaReferences().

◆ m_stopQtSemaphore

sem_t m_stopQtSemaphore
static

Definition at line 74 of file androidjnimain.cpp.

Referenced by initAndroidQpaPlugin(), and startQtNativeApplication().

◆ methods

JNINativeMethod methods
static
Initial value:
= {
{ "initAndroidQpaPlugin", "()Z", (void *)initAndroidQpaPlugin },
{ "startQtNativeApplication", "(Ljava/lang/String;)V", (void *)startQtNativeApplication },
{ "terminateQtNativeApplication", "()V", (void *)terminateQtNativeApplication },
{ "waitForServiceSetup", "()V", (void *)waitForServiceSetup },
{ "updateApplicationState", "(I)V", (void *)updateApplicationState },
{ "onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult },
{ "onNewIntent", "(Landroid/content/Intent;)V", (void *)onNewIntent },
{ "onBind", "(Landroid/content/Intent;)Landroid/os/IBinder;", (void *)onBind },
{ "updateLocale", "()V", (void *)updateLocale },
}
static void terminateQtNativeApplication(JNIEnv *env, jclass)
static void waitForServiceSetup(JNIEnv *env, jclass)
static void onNewIntent(JNIEnv *env, jclass, jobject data)
static void updateApplicationState(JNIEnv *, jobject, jint state)
static void startQtNativeApplication(JNIEnv *jenv, jobject object, jstring paramsString)
static bool initAndroidQpaPlugin(JNIEnv *jenv, jobject object)
static void updateLocale(JNIEnv *, jobject)
static jobject onBind(JNIEnv *, jclass, jobject intent)
static void onActivityResult(JNIEnv *, jclass, jint requestCode, jint resultCode, jobject data)

Definition at line 733 of file androidjnimain.cpp.

◆ startQtAndroidPluginCalled

Q_CONSTINIT QBasicAtomicInt startQtAndroidPluginCalled = Q_BASIC_ATOMIC_INITIALIZER(0)
static

Definition at line 90 of file androidjnimain.cpp.