summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java10
-rw-r--r--src/nfc/android/androidjninfc.cpp11
-rw-r--r--src/nfc/android/androidmainnewintentlistener.cpp36
-rw-r--r--src/nfc/android/androidmainnewintentlistener_p.h7
-rw-r--r--src/nfc/qnearfieldmanager_android.cpp3
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);
}
}