summaryrefslogtreecommitdiffstats
path: root/src/nfc/qnearfieldtarget_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/qnearfieldtarget_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/qnearfieldtarget_android.cpp')
-rw-r--r--src/nfc/qnearfieldtarget_android.cpp45
1 files changed, 17 insertions, 28 deletions
diff --git a/src/nfc/qnearfieldtarget_android.cpp b/src/nfc/qnearfieldtarget_android.cpp
index d98c07f4..9007ad94 100644
--- a/src/nfc/qnearfieldtarget_android.cpp
+++ b/src/nfc/qnearfieldtarget_android.cpp
@@ -45,7 +45,7 @@ const QString NearFieldTarget::MifareClassicTechnology = QString::fromUtf8("andr
const QString NearFieldTarget::MifareUltralightTechnology = QString::fromUtf8("android.nfc.tech.MifareUltralight");
-NearFieldTarget::NearFieldTarget(jobject intent, const QByteArray uid, QObject *parent) :
+NearFieldTarget::NearFieldTarget(QAndroidJniObject intent, const QByteArray uid, QObject *parent) :
QNearFieldTarget(parent),
m_intent(intent),
m_uid(uid)
@@ -90,7 +90,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
// Making sure that target is still in range
QNearFieldTarget::RequestId requestId(new QNearFieldTarget::RequestIdPrivate);
- if (m_intent == 0) {
+ if (!m_intent.isValid()) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
Q_ARG(const QNearFieldTarget::RequestId&, requestId));
@@ -98,9 +98,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
}
// Getting Ndef technology object
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
- Q_ASSERT_X(env != 0, "readNdefMessages", "env pointer is null");
+ QAndroidJniEnvironment env;
jobject ndef = getTagTechnology(NdefTechology, env);
if (ndef == 0) {
QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
@@ -228,8 +226,7 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
if (messages.size() > 1)
qWarning("QNearFieldTarget::writeNdefMessages: Android supports writing only one NDEF message per tag.");
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
+ QAndroidJniEnvironment env;
jmethodID writeMethod;
jobject tagTechnology;
jclass tagClass;
@@ -294,14 +291,14 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
return requestId;
}
-void NearFieldTarget::setIntent(jobject intent)
+void NearFieldTarget::setIntent(QAndroidJniObject intent)
{
if (m_intent == intent)
return;
releaseIntent();
m_intent = intent;
- if (m_intent) {
+ if (m_intent.isValid()) {
// Updating tech list and type in case of there is another tag with same UID as one before.
updateTechList();
updateType();
@@ -311,14 +308,12 @@ void NearFieldTarget::setIntent(jobject intent)
void NearFieldTarget::checkIsTargetLost()
{
- if (m_intent == 0 || m_techList.isEmpty()) {
+ if (!m_intent.isValid() || m_techList.isEmpty()) {
handleTargetLost();
return;
}
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
-
+ QAndroidJniEnvironment env;
// Using first available technology to check connection
QString techStr = m_techList.first();
jobject tagTechObj = getTagTechnology(techStr, env);
@@ -340,24 +335,18 @@ void NearFieldTarget::releaseIntent()
{
m_targetCheckTimer->stop();
- if (m_intent == 0)
- return;
-
- AndroidNfc::AttachedJNIEnv aenv;
- Q_ASSERT_X(aenv.jniEnv != 0, "releaseIntent", "aenv.jniEnv pointer is null");
- aenv.jniEnv->DeleteGlobalRef(m_intent);
- m_intent = 0;
+ m_intent = QAndroidJniObject();
}
void NearFieldTarget::updateTechList()
{
- if (m_intent == 0)
+ if (!m_intent.isValid())
return;
// Getting tech list
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
- jobject tag = AndroidNfc::getTag(env, m_intent);
+ QAndroidJniEnvironment env;
+ QAndroidJniObject x = AndroidNfc::getTag(/*env,*/ m_intent);
+ jobject tag = x.object<jobject>();
jclass tagClass = env->GetObjectClass(tag);
jmethodID techListMID = env->GetMethodID(tagClass, "getTechList", "()[Ljava/lang/String;");
jobjectArray techListArray = reinterpret_cast<jobjectArray>(env->CallObjectMethod(tag, techListMID));
@@ -384,9 +373,7 @@ void NearFieldTarget::updateType()
QNearFieldTarget::Type NearFieldTarget::getTagType() const
{
- AndroidNfc::AttachedJNIEnv aenv;
- JNIEnv *env = aenv.jniEnv;
- Q_ASSERT_X(env != 0, "type", "env pointer is null");
+ QAndroidJniEnvironment env;
if (m_techList.contains(NdefTechology)) {
jobject ndef = getTagTechnology(NdefTechology, env);
@@ -462,7 +449,9 @@ jobject NearFieldTarget::getTagTechnology(const QString &tech, JNIEnv *env) cons
techClass.replace(QLatin1Char('.'), QLatin1Char('/'));
// Getting requested technology
- jobject tag = AndroidNfc::getTag(env, m_intent);
+ QAndroidJniEnvironment aenv;
+ QAndroidJniObject x = AndroidNfc::getTag(m_intent);
+ jobject tag = x.object<jobject>();
jclass tagClass = env->FindClass(techClass.toUtf8().constData());
const QString sig = QString::fromUtf8("(Landroid/nfc/Tag;)L%1;");
jmethodID getTagMethodID = env->GetStaticMethodID(tagClass, "get", sig.arg(techClass).toUtf8().constData());