diff options
Diffstat (limited to 'src/corelib/platform/android/qandroidextras.cpp')
-rw-r--r-- | src/corelib/platform/android/qandroidextras.cpp | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/src/corelib/platform/android/qandroidextras.cpp b/src/corelib/platform/android/qandroidextras.cpp index 89b4bed283..aa0c3fd093 100644 --- a/src/corelib/platform/android/qandroidextras.cpp +++ b/src/corelib/platform/android/qandroidextras.cpp @@ -672,6 +672,45 @@ QAndroidBinder* QAndroidService::onBind(const QAndroidIntent &/*intent*/) 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 @@ -1091,11 +1130,11 @@ requestPermissionsInternal(const QStringList &permissions) // ### can we kick off all checkPermission()s, and whenAll() collect results? for (const QString &permission : permissions) result.push_back(QtAndroidPrivate::checkPermission(permission).result()); - return QtFuture::makeReadyFuture(std::as_const(result)); // as_const d/t QTBUG-109677 + return QtFuture::makeReadyRangeFuture(result); } if (!QtAndroidPrivate::acquireAndroidDeadlockProtector()) - return QtFuture::makeReadyFuture(QtAndroidPrivate::Denied); + return QtFuture::makeReadyValueFuture(QtAndroidPrivate::Denied); QSharedPointer<QPromise<QtAndroidPrivate::PermissionResult>> promise; promise.reset(new QPromise<QtAndroidPrivate::PermissionResult>()); @@ -1145,7 +1184,7 @@ QtAndroidPrivate::requestPermissions(const QStringList &permissions) { // avoid the uneccessary call and response to an empty permission string if (permissions.isEmpty()) - return QtFuture::makeReadyFuture(QtAndroidPrivate::Denied); + return QtFuture::makeReadyValueFuture(QtAndroidPrivate::Denied); return requestPermissionsInternal(permissions); } @@ -1168,10 +1207,10 @@ QtAndroidPrivate::checkPermission(const QString &permission) QJniObject::fromString(permission).object()); result = resultFromAndroid(res); } - return QtFuture::makeReadyFuture(result); + return QtFuture::makeReadyValueFuture(result); } -bool QtAndroidPrivate::registerPermissionNatives() +bool QtAndroidPrivate::registerPermissionNatives(QJniEnvironment &env) { if (QtAndroidPrivate::androidSdkVersion() < 23) return true; @@ -1181,8 +1220,9 @@ bool QtAndroidPrivate::registerPermissionNatives() reinterpret_cast<void *>(sendRequestPermissionsResult) }}; - QJniEnvironment env; return env.registerNativeMethods(qtNativeClassName, methods, 1); } QT_END_NAMESPACE + +#include "moc_qandroidextras_p.cpp" |