summaryrefslogtreecommitdiffstats
path: root/src/nfc/qnearfieldmanager_android.cpp
diff options
context:
space:
mode:
authorPeter Rustler <peter.rustler@basyskom.com>2015-03-06 12:16:28 +0100
committerAlex Blasche <alexander.blasche@theqtcompany.com>2015-03-19 08:10:04 +0000
commit24a9b68c8eba782fee2e040113fe8afe783ba8ec (patch)
treeeb14aeafe3358765b32cf12fe8dd97f245cd92de /src/nfc/qnearfieldmanager_android.cpp
parent55aab6b68bf4991fb133b5f7066a07554e3c5b3e (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.cpp59
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;
}