diff options
author | Peter Rustler <peter.rustler@basyskom.com> | 2015-03-06 12:16:28 +0100 |
---|---|---|
committer | Alex Blasche <alexander.blasche@theqtcompany.com> | 2015-03-19 08:10:04 +0000 |
commit | 24a9b68c8eba782fee2e040113fe8afe783ba8ec (patch) | |
tree | eb14aeafe3358765b32cf12fe8dd97f245cd92de /src/nfc/qnearfieldmanager_android.cpp | |
parent | 55aab6b68bf4991fb133b5f7066a07554e3c5b3e (diff) |
Using QtAndroidExtras instead of Andoid JNI for NFC
Some functions in QNearfieldtarget_android are missing.
They will be ported to QtAndroidExtras in a later
commit.
Change-Id: Ib68f91f394f28c8b19ccea4335c8f0292929f003
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/nfc/qnearfieldmanager_android.cpp')
-rw-r--r-- | src/nfc/qnearfieldmanager_android.cpp | 59 |
1 files changed, 20 insertions, 39 deletions
diff --git a/src/nfc/qnearfieldmanager_android.cpp b/src/nfc/qnearfieldmanager_android.cpp index b317fadf..7cb1829f 100644 --- a/src/nfc/qnearfieldmanager_android.cpp +++ b/src/nfc/qnearfieldmanager_android.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE QNearFieldManagerPrivateImpl::QNearFieldManagerPrivateImpl() : m_detecting(false), m_handlerID(0) { - qRegisterMetaType<jobject>("jobject"); + qRegisterMetaType<QAndroidJniObject>("QAndroidJniObject"); qRegisterMetaType<QNdefMessage>("QNdefMessage"); connect(this, SIGNAL(targetDetected(QNearFieldTarget*)), this, SLOT(handlerTargetDetected(QNearFieldTarget*))); connect(this, SIGNAL(targetLost(QNearFieldTarget*)), this, SLOT(handlerTargetLost(QNearFieldTarget*))); @@ -201,49 +201,28 @@ void QNearFieldManagerPrivateImpl::releaseAccess(QNearFieldManager::TargetAccess //Do nothing, because we dont have access modes for the target } -void QNearFieldManagerPrivateImpl::newIntent(jobject intent) +void QNearFieldManagerPrivateImpl::newIntent(QAndroidJniObject intent) { // This function is called from different thread and is used to move intent to main thread. - QMetaObject::invokeMethod(this, "onTargetDiscovered", Qt::QueuedConnection, Q_ARG(jobject, intent)); + QMetaObject::invokeMethod(this, "onTargetDiscovered", Qt::QueuedConnection, Q_ARG(QAndroidJniObject, intent)); } -QByteArray QNearFieldManagerPrivateImpl::getUid(jobject intent) +QByteArray QNearFieldManagerPrivateImpl::getUid(const QAndroidJniObject &intent) { - if (intent == 0) + if (!intent.isValid()) return QByteArray(); - AndroidNfc::AttachedJNIEnv aenv; - JNIEnv *env = aenv.jniEnv; - jobject tag = AndroidNfc::getTag(env, intent); - - jclass tagClass = env->GetObjectClass(tag); - Q_ASSERT_X(tagClass != 0, "getUid", "could not get Tag class"); - - jmethodID getIdMID = env->GetMethodID(tagClass, "getId", "()[B"); - Q_ASSERT_X(getIdMID != 0, "getUid", "could not get method ID for getId()"); - - jbyteArray tagId = reinterpret_cast<jbyteArray>(env->CallObjectMethod(tag, getIdMID)); - Q_ASSERT_X(tagId != 0, "getUid", "getId() returned null object"); - - QByteArray uid; - jsize len = env->GetArrayLength(tagId); - uid.resize(len); - env->GetByteArrayRegion(tagId, 0, len, reinterpret_cast<jbyte*>(uid.data())); - - return uid; + QAndroidJniEnvironment env; + QAndroidJniObject tag = AndroidNfc::getTag(intent); + return getUidforTag(tag); } -void QNearFieldManagerPrivateImpl::onTargetDiscovered(jobject intent) +void QNearFieldManagerPrivateImpl::onTargetDiscovered(QAndroidJniObject intent) { - AndroidNfc::AttachedJNIEnv aenv; - JNIEnv *env = aenv.jniEnv; - Q_ASSERT_X(env != 0, "onTargetDiscovered", "env pointer is null"); - - // Getting tag object and UID - jobject tag = AndroidNfc::getTag(env, intent); - QByteArray uid = getUid(env, tag); + // Getting UID + QByteArray uid = getUid(intent); - // Accepting all targest but only sending signal of requested types. + // Accepting all targets but only sending signal of requested types. NearFieldTarget *&target = m_detectedTargets[uid]; if (target) { target->setIntent(intent); // Updating existing target @@ -260,15 +239,17 @@ void QNearFieldManagerPrivateImpl::onTargetDestroyed(const QByteArray &uid) m_detectedTargets.remove(uid); } -QByteArray QNearFieldManagerPrivateImpl::getUid(JNIEnv *env, jobject tag) +QByteArray QNearFieldManagerPrivateImpl::getUidforTag(const QAndroidJniObject &tag) { - jclass tagClass = env->GetObjectClass(tag); - jmethodID getIdMID = env->GetMethodID(tagClass, "getId", "()[B"); - jbyteArray tagId = reinterpret_cast<jbyteArray>(env->CallObjectMethod(tag, getIdMID)); + if (!tag.isValid()) + return QByteArray(); + + QAndroidJniEnvironment env; + QAndroidJniObject tagId = tag.callObjectMethod("getId", "()[B"); QByteArray uid; - jsize len = env->GetArrayLength(tagId); + jsize len = env->GetArrayLength(tagId.object<jbyteArray>()); uid.resize(len); - env->GetByteArrayRegion(tagId, 0, len, reinterpret_cast<jbyte*>(uid.data())); + env->GetByteArrayRegion(tagId.object<jbyteArray>(), 0, len, reinterpret_cast<jbyte*>(uid.data())); return uid; } |