summaryrefslogtreecommitdiffstats
path: root/src/corelib/platform/android/qandroidextras.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/platform/android/qandroidextras.cpp')
-rw-r--r--src/corelib/platform/android/qandroidextras.cpp52
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"