8#import <CoreNFC/NFCError.h>
9#import <CoreNFC/NFCTag.h>
13@implementation QT_MANGLE_NAMESPACE(QIosTagReaderDelegate)
15- (instancetype)initWithListener:(QNearFieldManagerPrivateImpl *)listener
19 self.listener = listener;
20 self.sessionStoppedByApplication =
false;
30 if (self.session && !self.sessionStoppedByApplication) {
31 [self.session invalidateSession];
32 self.sessionStoppedByApplication =
true;
35 if (self.sessionStoppedByApplication) {
36 Q_EMIT self.listener->didInvalidateWithError(
true);
40 self.session = [[[NFCTagReaderSession alloc] initWithPollingOption:NFCPollingISO14443 delegate:self queue:nil] autorelease];
43 self.session.alertMessage = self.message;
44 [self.session beginSession];
46 Q_EMIT self.listener->didInvalidateWithError(
true);
50- (
void)stopSession:(QString)message
52 if (self.session && !self.sessionStoppedByApplication) {
54 [self.session invalidateSession];
56 [self.session invalidateSessionWithErrorMessage:message.toNSString()];
57 self.sessionStoppedByApplication =
true;
61- (
void)alertMessage:(QString)message
63 if (self.session && !self.sessionStoppedByApplication)
64 self.session.alertMessage = message.toNSString();
66 self.message = message.toNSString();
69- (
void)tagReaderSessionDidBecomeActive:(NFCTagReaderSession*)session
71 if (session != self.session)
72 [session invalidateSession];
75- (
void)tagReaderSession:(NFCTagReaderSession*)session didInvalidateWithError:(NSError*)error
77 if (session != self.session)
81 if (self.sessionStoppedByApplication) {
82 self.sessionStoppedByApplication =
false;
86 const bool doRestart =
87 !(error.code == NFCReaderError::NFCReaderSessionInvalidationErrorUserCanceled
88 || error.code == NFCReaderError::NFCReaderErrorUnsupportedFeature);
89 Q_EMIT self.listener->didInvalidateWithError(doRestart);
92- (
void)tagReaderSession:(NFCTagReaderSession*)session didDetectTags:(NSArray<__kindof id<NFCTag>>*)tags
94 if (session != self.session)
97 bool foundTag =
false;
98 for (id<NFCTag> tag in tags) {
99 if (tag.type == NFCTagTypeISO7816Compatible) {
102 Q_EMIT self.listener->tagDiscovered(tag);
107 [session restartPolling];