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

(9b5a1b8a57ed338aa879c9edbe50575003b3e750)

#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 void initializeBackends ()
static bool initCleanupHandshakeSemaphores ()
static void startQtNativeApplication (JNIEnv *jenv, jobject object, jstring paramsString)
static void clearJavaReferences (JNIEnv *env)
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 742 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 763 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 749 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 770 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 756 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 576 of file androidjnimain.cpp.

◆ handleOrientationChanged()

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

Definition at line 634 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 673 of file androidjnimain.cpp.

◆ handleScreenAdded()

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

Definition at line 680 of file androidjnimain.cpp.

◆ handleScreenChanged()

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

Definition at line 687 of file androidjnimain.cpp.

◆ handleScreenDensityChanged()

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

Definition at line 708 of file androidjnimain.cpp.

◆ handleScreenRemoved()

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

Definition at line 694 of file androidjnimain.cpp.

◆ handleUiDarkModeChanged()

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

Definition at line 701 of file androidjnimain.cpp.

◆ initCleanupHandshakeSemaphores()

bool initCleanupHandshakeSemaphores ( )
static

Definition at line 372 of file androidjnimain.cpp.

References m_exitSemaphore, and m_stopQtSemaphore.

Referenced by startQtNativeApplication().

Here is the caller graph for this function:

◆ initializeBackends()

void initializeBackends ( )
static

Definition at line 362 of file androidjnimain.cpp.

References m_androidApkFileEngineHandler, m_androidAssetsFileEngineHandler, m_androidContentFileEngineHandler, and m_backendRegister.

Referenced by startQtNativeApplication().

Here is the caller graph for this function:

◆ initJavaReferences()

bool initJavaReferences ( QJniEnvironment & env)
static

Definition at line 816 of file androidjnimain.cpp.

References m_assetManager.

◆ JNI_OnLoad()

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

Definition at line 882 of file androidjnimain.cpp.

◆ onActivityResult()

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

Definition at line 714 of file androidjnimain.cpp.

◆ onBind()

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

Definition at line 727 of file androidjnimain.cpp.

◆ onNewIntent()

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

Definition at line 722 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 779 of file androidjnimain.cpp.

◆ startQtNativeApplication()

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

Definition at line 378 of file androidjnimain.cpp.

References initCleanupHandshakeSemaphores(), initializeBackends(), m_androidPlatformIntegration, m_exitSemaphore, m_main, and m_stopQtSemaphore.

Here is the call graph for this function:

◆ terminateQtNativeApplication()

void terminateQtNativeApplication ( JNIEnv * env,
jclass  )
static

Definition at line 543 of file androidjnimain.cpp.

◆ updateApplicationState()

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

Definition at line 589 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 628 of file androidjnimain.cpp.

Variable Documentation

◆ m_androidApkFileEngineHandler

QAndroidApkFileEngineHandler * m_androidApkFileEngineHandler = nullptr
static

Definition at line 82 of file androidjnimain.cpp.

Referenced by initializeBackends().

◆ m_androidAssetsFileEngineHandler

AndroidAssetsFileEngineHandler * m_androidAssetsFileEngineHandler = nullptr
static

Definition at line 80 of file androidjnimain.cpp.

Referenced by initializeBackends().

◆ m_androidContentFileEngineHandler

AndroidContentFileEngineHandler * m_androidContentFileEngineHandler = nullptr
static

Definition at line 81 of file androidjnimain.cpp.

Referenced by initializeBackends().

◆ 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 initializeBackends().

◆ 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 initCleanupHandshakeSemaphores(), 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 initCleanupHandshakeSemaphores(), and startQtNativeApplication().

◆ methods

JNINativeMethod methods
static
Initial value:
= {
{ "startQtNativeApplication", "(Ljava/lang/String;)V", (void *)startQtNativeApplication },
{ "terminateQtNativeApplication", "()V", (void *)terminateQtNativeApplication },
{ "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 onNewIntent(JNIEnv *env, jclass, jobject data)
static void updateApplicationState(JNIEnv *, jobject, jint state)
static void startQtNativeApplication(JNIEnv *jenv, jobject object, jstring paramsString)
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 732 of file androidjnimain.cpp.

◆ startQtAndroidPluginCalled

Q_CONSTINIT QBasicAtomicInt startQtAndroidPluginCalled = Q_BASIC_ATOMIC_INITIALIZER(0)
static

Definition at line 90 of file androidjnimain.cpp.