From 70d9d0ce58a88ce3c2e8673e8ea20ba078632e25 Mon Sep 17 00:00:00 2001 From: Lars Schmertmann Date: Fri, 10 Jul 2020 14:54:28 +0200 Subject: Move the check for relevant NFC intents to the MainNfcNewIntentListener The MainNfcNewIntentListener registers itself in QtAndroidPrivate from qtbase to listen for intents. Every listener only needs to return true, if the intent contains expected data. This will cause QtAndroidPrivate to stop notify other listeners. So we need to move the check from QNearFieldManagerPrivateImpl::onTargetDiscovered to MainNfcNewIntentListener::handleNewIntent. Change-Id: Ib5001a4d3746782d7162e02a0ffeee6c370a8826 Reviewed-by: Alex Blasche (cherry picked from commit 8bc3fb29cbc6a49fdff22915081d356d4d6abfa9) Reviewed-by: Qt Cherry-pick Bot --- src/nfc/android/androidmainnewintentlistener.cpp | 5 +++++ src/nfc/qnearfieldmanager_android.cpp | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/nfc/android/androidmainnewintentlistener.cpp b/src/nfc/android/androidmainnewintentlistener.cpp index 2076453d..1b510539 100644 --- a/src/nfc/android/androidmainnewintentlistener.cpp +++ b/src/nfc/android/androidmainnewintentlistener.cpp @@ -39,6 +39,7 @@ #include "androidmainnewintentlistener_p.h" +#include "android/androidjninfc_p.h" #include "qdebug.h" #include #include @@ -60,6 +61,10 @@ MainNfcNewIntentListener::~MainNfcNewIntentListener() bool MainNfcNewIntentListener::handleNewIntent(JNIEnv */*env*/, jobject intent) { + // Only intents with a tag are relevant + if (!AndroidNfc::getTag(intent).isValid()) + return false; + listenersLock.lockForRead(); for (AndroidNfc::AndroidNfcListenerInterface *listener : qAsConst(listeners)) { listener->newIntent(QAndroidJniObject(intent)); diff --git a/src/nfc/qnearfieldmanager_android.cpp b/src/nfc/qnearfieldmanager_android.cpp index 0b305501..e5f04cee 100644 --- a/src/nfc/qnearfieldmanager_android.cpp +++ b/src/nfc/qnearfieldmanager_android.cpp @@ -304,10 +304,6 @@ QByteArray QNearFieldManagerPrivateImpl::getUid(const QAndroidJniObject &intent) void QNearFieldManagerPrivateImpl::onTargetDiscovered(QAndroidJniObject intent) { - // Only intents with a tag are relevant - if (!AndroidNfc::getTag(intent).isValid()) - return; - // Getting UID QByteArray uid = getUid(intent); -- cgit v1.2.3