void tst_QNearFieldManager::registerNdefMessageHandler_filter_data() { QTest::addColumn<QNdefFilter>("filter"); QNdefFilter filter; QTest::newRow("Empty") << filter; filter.clear(); filter.setOrderMatch(true); filter.appendRecord(QNdefRecord::Mime, "image/png"); filter.appendRecord<QNdefNfcTextRecord>(2, 10); filter.appendRecord<QNdefNfcUriRecord>(1, 1); QTest::newRow("Image + Multiple Text + URI") << filter; filter.clear(); filter.setOrderMatch(true); filter.appendRecord<QNdefNfcTextRecord>(1, 1); filter.appendRecord<QNdefNfcUriRecord>(1, 1); QTest::newRow("Text + URI") << filter; QNdefFilter::Record record; filter.clear(); filter.setOrderMatch(false); filter.appendRecord<QNdefNfcUriRecord>(1, 1); record.typeNameFormat = QNdefRecord::NfcRtd; record.type = "T"; record.minimum = 1; record.maximum = 1; filter.appendRecord(record); QTest::newRow("Unordered Text + URI") << filter; }
void tst_QNearFieldManager::registerNdefMessageHandler_filter_data() { QTest::addColumn<QNdefFilter>("filter"); QTest::addColumn<QString>("hint"); QNdefFilter filter; filter.appendRecord(QNdefRecord::NfcRtd, "Sp"); QTest::newRow("SP") << filter << "Please touch a tag with 'SP' NDef message"; filter.clear(); filter.setOrderMatch(true); filter.appendRecord<QNdefNfcTextRecord>(1, 1); filter.appendRecord<QNdefNfcUriRecord>(1, 1); QTest::newRow("Text + URI") << filter << "Please touch a tag with 'Text + URI' NDef message"; filter.clear(); filter.appendRecord<QNdefNfcUriRecord>(1, 1); QTest::newRow("URI") << filter << "Please touch a tag with 'URI' NDef message"; filter.clear(); filter.setOrderMatch(true); filter.appendRecord<QNdefNfcUriRecord>(1, 1); QTest::newRow("URI") << filter << "Please touch a tag with only one 'URI' NDef record"; }
void QDeclarativeNearField::registerMessageHandler() { if (!m_manager) m_manager = new QNearFieldManager(this); if (m_messageHandlerId != -1) m_manager->unregisterNdefMessageHandler(m_messageHandlerId); // no filter abort if (m_filter.isEmpty()) return; QNdefFilter filter; filter.setOrderMatch(m_orderMatch); foreach (QDeclarativeNdefFilter *f, m_filter) { const QString type = f->type(); uint min = f->minimum() < 0 ? UINT_MAX : f->minimum(); uint max = f->maximum() < 0 ? UINT_MAX : f->maximum(); if (type.startsWith(QLatin1String("urn:nfc:wkt:"))) filter.appendRecord(QNdefRecord::NfcRtd, type.mid(12).toUtf8(), min, max); else if (type.startsWith(QLatin1String("urn:nfc:ext:"))) filter.appendRecord(QNdefRecord::ExternalRtd, type.mid(12).toUtf8(), min, max); else if (type.startsWith(QLatin1String("urn:nfc:mime"))) filter.appendRecord(QNdefRecord::Mime, type.mid(13).toUtf8(), min, max); else qWarning("Unknown NDEF record type %s", qPrintable(type)); } m_messageHandlerId = m_manager->registerNdefMessageHandler(filter, this, SLOT(_q_handleNdefMessage(QNdefMessage))); }
AnnotatedUrl::AnnotatedUrl(QObject *parent) : QObject(parent) { //! [QNearFieldManager register handler] manager = new QNearFieldManager(this); if (!manager->isAvailable()) { qWarning() << "NFC not available"; return; } QNdefFilter filter; filter.setOrderMatch(false); filter.appendRecord<QNdefNfcTextRecord>(1, UINT_MAX); filter.appendRecord<QNdefNfcUriRecord>(); int result = manager->registerNdefMessageHandler(filter, this, SLOT(handleMessage(QNdefMessage,QNearFieldTarget*))); //! [QNearFieldManager register handler] if (result != -1) return; manager->startTargetDetection(); connect(manager, SIGNAL(targetDetected(QNearFieldTarget*)), this, SLOT(targetDetected(QNearFieldTarget*))); connect(manager, SIGNAL(targetLost(QNearFieldTarget*)), this, SLOT(targetLost(QNearFieldTarget*))); }