Android: add missing extras native methods impls and registration
This should have been done when the extras where moved to qtbase, it went under the rug and was forgotten. Pick-to: 6.6 6.5 6.2 Fixes: QTBUG-114971 Change-Id: Id7831a8bab8bedc1f869b9fc8bfc72acc3cca7a2 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
e51cd47ed3
commit
510cc564c0
@ -244,10 +244,14 @@ jint QtAndroidPrivate::initJNI(JavaVM *vm, JNIEnv *env)
|
|||||||
if (!regOk && QJniEnvironment::checkAndClearExceptions(env))
|
if (!regOk && QJniEnvironment::checkAndClearExceptions(env))
|
||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
|
|
||||||
if (!registerPermissionNatives())
|
QJniEnvironment qJniEnv;
|
||||||
|
if (!registerPermissionNatives(qJniEnv))
|
||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
|
|
||||||
if (!registerNativeInterfaceNatives())
|
if (!registerNativeInterfaceNatives(qJniEnv))
|
||||||
|
return JNI_ERR;
|
||||||
|
|
||||||
|
if (!registerExtrasNatives(qJniEnv))
|
||||||
return JNI_ERR;
|
return JNI_ERR;
|
||||||
|
|
||||||
return JNI_OK;
|
return JNI_OK;
|
||||||
|
@ -65,8 +65,9 @@ namespace QtAndroidPrivate
|
|||||||
jobject classLoader();
|
jobject classLoader();
|
||||||
Q_CORE_EXPORT jint androidSdkVersion();
|
Q_CORE_EXPORT jint androidSdkVersion();
|
||||||
|
|
||||||
bool registerPermissionNatives();
|
bool registerPermissionNatives(QJniEnvironment &env);
|
||||||
bool registerNativeInterfaceNatives();
|
bool registerNativeInterfaceNatives(QJniEnvironment &env);
|
||||||
|
bool registerExtrasNatives(QJniEnvironment &env);
|
||||||
|
|
||||||
Q_CORE_EXPORT void handleActivityResult(jint requestCode, jint resultCode, jobject data);
|
Q_CORE_EXPORT void handleActivityResult(jint requestCode, jint resultCode, jobject data);
|
||||||
Q_CORE_EXPORT void registerActivityResultListener(ActivityResultListener *listener);
|
Q_CORE_EXPORT void registerActivityResultListener(ActivityResultListener *listener);
|
||||||
|
@ -672,6 +672,45 @@ QAndroidBinder* QAndroidService::onBind(const QAndroidIntent &/*intent*/)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static jboolean onTransact(JNIEnv */*env*/, jclass /*cls*/, jlong id, jint code, jobject data,
|
||||||
|
jobject reply, jint flags)
|
||||||
|
{
|
||||||
|
if (!id)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return reinterpret_cast<QAndroidBinder*>(id)->onTransact(
|
||||||
|
code, QAndroidParcel(data), QAndroidParcel(reply), QAndroidBinder::CallType(flags));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void onServiceConnected(JNIEnv */*env*/, jclass /*cls*/, jlong id, jstring name,
|
||||||
|
jobject service)
|
||||||
|
{
|
||||||
|
if (!id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
return reinterpret_cast<QAndroidServiceConnection *>(id)->onServiceConnected(
|
||||||
|
QJniObject(name).toString(), QAndroidBinder(service));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void onServiceDisconnected(JNIEnv */*env*/, jclass /*cls*/, jlong id, jstring name)
|
||||||
|
{
|
||||||
|
if (!id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
return reinterpret_cast<QAndroidServiceConnection *>(id)->onServiceDisconnected(
|
||||||
|
QJniObject(name).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QtAndroidPrivate::registerExtrasNatives(QJniEnvironment &env)
|
||||||
|
{
|
||||||
|
static const JNINativeMethod methods[] = {
|
||||||
|
{"onTransact", "(JILandroid/os/Parcel;Landroid/os/Parcel;I)Z", (void *)onTransact},
|
||||||
|
{"onServiceConnected", "(JLjava/lang/String;Landroid/os/IBinder;)V", (void *)onServiceConnected},
|
||||||
|
{"onServiceDisconnected", "(JLjava/lang/String;)V", (void *)onServiceDisconnected}
|
||||||
|
};
|
||||||
|
|
||||||
|
return env.registerNativeMethods("org/qtproject/qt/android/extras/QtNative", methods, 3);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QAndroidIntent
|
\class QAndroidIntent
|
||||||
@ -1171,7 +1210,7 @@ QtAndroidPrivate::checkPermission(const QString &permission)
|
|||||||
return QtFuture::makeReadyValueFuture(result);
|
return QtFuture::makeReadyValueFuture(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QtAndroidPrivate::registerPermissionNatives()
|
bool QtAndroidPrivate::registerPermissionNatives(QJniEnvironment &env)
|
||||||
{
|
{
|
||||||
if (QtAndroidPrivate::androidSdkVersion() < 23)
|
if (QtAndroidPrivate::androidSdkVersion() < 23)
|
||||||
return true;
|
return true;
|
||||||
@ -1181,7 +1220,6 @@ bool QtAndroidPrivate::registerPermissionNatives()
|
|||||||
reinterpret_cast<void *>(sendRequestPermissionsResult)
|
reinterpret_cast<void *>(sendRequestPermissionsResult)
|
||||||
}};
|
}};
|
||||||
|
|
||||||
QJniEnvironment env;
|
|
||||||
return env.registerNativeMethods(qtNativeClassName, methods, 1);
|
return env.registerNativeMethods(qtNativeClassName, methods, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,11 +231,11 @@ static void runPendingCppRunnables(JNIEnv */*env*/, jobject /*obj*/)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool QtAndroidPrivate::registerNativeInterfaceNatives()
|
bool QtAndroidPrivate::registerNativeInterfaceNatives(QJniEnvironment &env)
|
||||||
{
|
{
|
||||||
#if QT_CONFIG(future) && !defined(QT_NO_QOBJECT)
|
#if QT_CONFIG(future) && !defined(QT_NO_QOBJECT)
|
||||||
const JNINativeMethod methods = {"runPendingCppRunnables", "()V", (void *)runPendingCppRunnables};
|
const JNINativeMethod methods = {"runPendingCppRunnables", "()V", (void *)runPendingCppRunnables};
|
||||||
return QJniEnvironment().registerNativeMethods(qtNativeClassName, &methods, 1);
|
return env.registerNativeMethods(qtNativeClassName, &methods, 1);
|
||||||
#else
|
#else
|
||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user