Move hideSplashScreen() from qjnihelpers_p to QNativeInterface

Hiding the splash screen require one JNI call instead of having to keep
it as a global in qjnihelpers, and since it's not really easy to have a
cross platform way for it it makes sense to have it under
QNativeInterface. The alternative is probably removing it altogether
since it's not useful often.

Task-number: QTBUG-90500
Change-Id: I9b375c52afbf07e1ddd7957c1ec60af5c258f404
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
Assam Boudjelthia 2021-05-05 21:10:25 +03:00
parent fcbba3c622
commit b621edddd5
4 changed files with 18 additions and 11 deletions

View File

@ -58,6 +58,7 @@ struct Q_CORE_EXPORT QAndroidApplication
static jobject context();
static bool isActivityContext();
static int sdkVersion();
static void hideSplashScreen(int duration = 0);
};
#endif
}

View File

@ -75,7 +75,6 @@ static jobject g_jClassLoader = nullptr;
static jint g_androidSdkVersion = 0;
static jclass g_jNativeClass = nullptr;
static jmethodID g_runPendingCppRunnablesMethodID = nullptr;
static jmethodID g_hideSplashScreenMethodID = nullptr;
Q_GLOBAL_STATIC(std::deque<QtAndroidPrivate::Runnable>, g_pendingRunnables);
static QBasicMutex g_pendingRunnablesMutex;
@ -377,7 +376,6 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env)
g_runPendingCppRunnablesMethodID = env->GetStaticMethodID(jQtNative,
"runPendingCppRunnablesOnAndroidThread",
"()V");
g_hideSplashScreenMethodID = env->GetStaticMethodID(jQtNative, "hideSplashScreen", "(I)V");
g_jNativeClass = static_cast<jclass>(env->NewGlobalRef(jQtNative));
env->DeleteLocalRef(jQtNative);
@ -549,11 +547,6 @@ void QtAndroidPrivate::unregisterKeyEventListener(QtAndroidPrivate::KeyEventList
g_keyEventListeners()->listeners.removeOne(listener);
}
void QtAndroidPrivate::hideSplashScreen(JNIEnv *env, int duration)
{
env->CallStaticVoidMethod(g_jNativeClass, g_hideSplashScreenMethodID, duration);
}
void QtAndroidPrivate::waitForServiceSetup()
{
g_waitForServiceSetupSemaphore->acquire();

View File

@ -149,14 +149,10 @@ namespace QtAndroidPrivate
Q_CORE_EXPORT void registerKeyEventListener(KeyEventListener *listener);
Q_CORE_EXPORT void unregisterKeyEventListener(KeyEventListener *listener);
Q_CORE_EXPORT void hideSplashScreen(JNIEnv *env, int duration = 0);
Q_CORE_EXPORT void waitForServiceSetup();
Q_CORE_EXPORT int acuqireServiceSetup(int flags);
Q_CORE_EXPORT void setOnBindListener(OnBindListener *listener);
Q_CORE_EXPORT jobject callOnBindListener(jobject intent);
}
QT_END_NAMESPACE

View File

@ -39,6 +39,7 @@
#include <QtCore/qcoreapplication.h>
#include <QtCore/private/qjnihelpers_p.h>
#include <QtCore/qjniobject.h>
QT_BEGIN_NAMESPACE
@ -93,4 +94,20 @@ int QNativeInterface::QAndroidApplication::sdkVersion()
{
return QtAndroidPrivate::androidSdkVersion();
}
/*!
\fn void QNativeInterface::QAndroidApplication::hideSplashScreen(int duration)
Hides the splash screen by using a fade effect for the given \a duration.
If \a duration is not provided (default is 0) the splash screen is hidden
immedetiately after the app starts.
\since 6.2
*/
void QNativeInterface::QAndroidApplication::hideSplashScreen(int duration)
{
QJniObject::callStaticMethod<void>("org/qtproject/qt/android/QtNative",
"hideSplashScreen", "(I)V", duration);
}
QT_END_NAMESPACE