diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java | 10 | ||||
-rw-r--r-- | src/nfc/android/androidjninfc.cpp | 11 | ||||
-rw-r--r-- | src/nfc/android/androidmainnewintentlistener.cpp | 36 | ||||
-rw-r--r-- | src/nfc/android/androidmainnewintentlistener_p.h | 7 | ||||
-rw-r--r-- | src/nfc/qnearfieldmanager_android.cpp | 3 |
5 files changed, 52 insertions, 15 deletions
diff --git a/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java b/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java index aefd73c0..e2c14431 100644 --- a/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java +++ b/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java @@ -90,9 +90,9 @@ public class QtNfc //Log.d(TAG, "Thread:" + Thread.currentThread().getId()); } - static public void start() + static public boolean start() { - if (m_adapter == null) return; + if (m_adapter == null) return false; m_activity.runOnUiThread(new Runnable() { public void run() { //Log.d(TAG, "Enabling NFC"); @@ -120,17 +120,19 @@ public class QtNfc } } }); + return true; } - static public void stop() + static public boolean stop() { - if (m_adapter == null) return; + if (m_adapter == null) return false; m_activity.runOnUiThread(new Runnable() { public void run() { //Log.d(TAG, "Disabling NFC"); m_adapter.disableForegroundDispatch(m_activity); } }); + return true; } static public boolean isAvailable() diff --git a/src/nfc/android/androidjninfc.cpp b/src/nfc/android/androidjninfc.cpp index cf804bb8..7083e8d3 100644 --- a/src/nfc/android/androidjninfc.cpp +++ b/src/nfc/android/androidjninfc.cpp @@ -79,8 +79,7 @@ bool startDiscovery() if (!aenv.jniEnv) return false; - aenv.jniEnv->CallStaticObjectMethod(nfcClass, startDiscoveryId); - return true; + return aenv.jniEnv->CallStaticBooleanMethod(nfcClass, startDiscoveryId); } bool isAvailable() @@ -95,12 +94,12 @@ bool isAvailable() bool stopDiscovery() { + __android_log_print(ANDROID_LOG_INFO, "Qt", "QtNfc::stopDiscovery()"); AttachedJNIEnv aenv; if (!aenv.jniEnv) return false; - aenv.jniEnv->CallStaticObjectMethod(nfcClass, stopDiscoveryId); - return true; + return aenv.jniEnv->CallStaticBooleanMethod(nfcClass, startDiscoveryId); } bool registerListener(AndroidNfcListenerInterface *listener) @@ -168,8 +167,8 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void * /*reserved*/) FIND_AND_CHECK_CLASS("org/qtproject/qt5/android/nfc/QtNfc"); nfcClass = static_cast<jclass>(env->NewGlobalRef(clazz)); - GET_AND_CHECK_STATIC_METHOD(startDiscoveryId, nfcClass, "start", "()V"); - GET_AND_CHECK_STATIC_METHOD(stopDiscoveryId, nfcClass, "stop", "()V"); + GET_AND_CHECK_STATIC_METHOD(startDiscoveryId, nfcClass, "start", "()Z"); + GET_AND_CHECK_STATIC_METHOD(stopDiscoveryId, nfcClass, "stop", "()Z"); GET_AND_CHECK_STATIC_METHOD(isAvailableId, nfcClass, "isAvailable", "()Z"); javaVM = vm; diff --git a/src/nfc/android/androidmainnewintentlistener.cpp b/src/nfc/android/androidmainnewintentlistener.cpp index 3772e60f..a23695d3 100644 --- a/src/nfc/android/androidmainnewintentlistener.cpp +++ b/src/nfc/android/androidmainnewintentlistener.cpp @@ -37,14 +37,16 @@ QT_BEGIN_ANDROIDNFC_NAMESPACE MainNfcNewIntentListener::MainNfcNewIntentListener() - : listeners(), listenersLock() + : listeners(), listenersLock(), paused(true), receiving(false) { QtAndroidPrivate::registerNewIntentListener(this); + QtAndroidPrivate::registerResumePauseListener(this); } MainNfcNewIntentListener::~MainNfcNewIntentListener() { QtAndroidPrivate::unregisterNewIntentListener(this); + QtAndroidPrivate::unregisterResumePauseListener(this); } bool MainNfcNewIntentListener::handleNewIntent(JNIEnv *env, jobject intent) @@ -67,6 +69,7 @@ bool MainNfcNewIntentListener::registerListener(AndroidNfcListenerInterface *lis if (!listeners.contains(listener)) listeners.push_back(listener); listenersLock.unlock(); + updateReceiveState(); return true; } @@ -75,7 +78,38 @@ bool MainNfcNewIntentListener::unregisterListener(AndroidNfcListenerInterface *l listenersLock.lockForWrite(); listeners.removeOne(listener); listenersLock.unlock(); + updateReceiveState(); return true; } +void MainNfcNewIntentListener::handleResume() +{ + paused = false; + updateReceiveState(); +} + +void MainNfcNewIntentListener::handlePause() +{ + paused = true; + updateReceiveState(); +} + +void MainNfcNewIntentListener::updateReceiveState() +{ + if (paused && receiving) { + AndroidNfc::stopDiscovery(); + receiving = false; + return; + } + listenersLock.lockForRead(); + if (listeners.count() && !receiving) + receiving = AndroidNfc::startDiscovery(); + + if (!listeners.count() && receiving) { + AndroidNfc::stopDiscovery(); + receiving = false; + } + listenersLock.unlock(); +} + QT_END_ANDROIDNFC_NAMESPACE diff --git a/src/nfc/android/androidmainnewintentlistener_p.h b/src/nfc/android/androidmainnewintentlistener_p.h index 5c0f751c..fd68ac7b 100644 --- a/src/nfc/android/androidmainnewintentlistener_p.h +++ b/src/nfc/android/androidmainnewintentlistener_p.h @@ -42,7 +42,7 @@ QT_BEGIN_ANDROIDNFC_NAMESPACE -class MainNfcNewIntentListener : public QtAndroidPrivate::NewIntentListener +class MainNfcNewIntentListener : public QtAndroidPrivate::NewIntentListener, QtAndroidPrivate::ResumePauseListener { public: MainNfcNewIntentListener(); @@ -50,9 +50,14 @@ public: bool handleNewIntent(JNIEnv *env, jobject intent); bool registerListener(AndroidNfcListenerInterface *listener); bool unregisterListener(AndroidNfcListenerInterface *listener); + void handleResume(); + void handlePause(); + void updateReceiveState(); protected: QList<AndroidNfc::AndroidNfcListenerInterface*> listeners; QReadWriteLock listenersLock; + bool paused; + bool receiving; }; QT_END_ANDROIDNFC_NAMESPACE diff --git a/src/nfc/qnearfieldmanager_android.cpp b/src/nfc/qnearfieldmanager_android.cpp index 2b76e91f..b317fadf 100644 --- a/src/nfc/qnearfieldmanager_android.cpp +++ b/src/nfc/qnearfieldmanager_android.cpp @@ -276,13 +276,10 @@ void QNearFieldManagerPrivateImpl::updateReceiveState() { if (m_detecting) { AndroidNfc::registerListener(this); - AndroidNfc::startDiscovery(); } else { if (ndefMessageHandlers.count() || ndefFilterHandlers.count()) { AndroidNfc::registerListener(this); - AndroidNfc::startDiscovery(); } else { - AndroidNfc::stopDiscovery(); AndroidNfc::unregisterListener(this); } } |