diff --git a/example/App.tsx b/example/App.tsx index 993b6f8..44bd123 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -14,18 +14,22 @@ import { requestReaderPermissions, ReaderPermissionStatus, scanReaders, + startCardMonitor, stopReaderScan, + stopCardMonitor, transmit, } from '@countertek/react-native-ble-nfc-reader'; type PermissionState = ReaderPermissionStatus | 'loading'; +type CardPresence = 'unknown' | 'present' | 'removed'; export default function App() { const [permissionStatus, setPermissionStatus] = useState('loading'); const [message, setMessage] = useState(''); const [readers, setReaders] = useState([]); const [connectedReader, setConnectedReader] = useState(null); - const [cardPresent, setCardPresent] = useState(false); + const [cardPresence, setCardPresence] = useState('unknown'); + const [cardMonitorRunning, setCardMonitorRunning] = useState(false); const [cardUid, setCardUid] = useState(''); const [apduResponse, setApduResponse] = useState(''); const [mifareBlock, setMifareBlock] = useState('4'); @@ -55,7 +59,9 @@ export default function App() { async function scanForReaders() { if (permissionStatus !== 'granted') { - setMessage('Reader permission is required before scanning. Use Request Reader Permission first.'); + setMessage( + 'Reader permission is required before scanning. Use Request Reader Permission first.' + ); return; } @@ -63,6 +69,8 @@ export default function App() { setScanning(true); setReaders([]); setConnectedReader(null); + setCardMonitorRunning(false); + setCardPresence('unknown'); setReaders(await scanReaders({ timeoutMs: 5000 })); setMessage(''); } catch (error) { @@ -75,7 +83,8 @@ export default function App() { async function connectToReader(readerId: string) { try { setConnectedReader(await connectReader(readerId)); - setCardPresent(false); + setCardMonitorRunning(false); + setCardPresence('unknown'); setCardUid(''); setApduResponse(''); setMifareResult(''); @@ -85,15 +94,49 @@ export default function App() { } } + async function startMonitor() { + if (connectedReader === null) { + return; + } + + try { + await startCardMonitor(connectedReader.id); + setCardMonitorRunning(true); + setMessage(''); + } catch (error) { + setMessage(formatError(error)); + } + } + + async function stopMonitor() { + if (connectedReader === null) { + return; + } + + try { + await stopCardMonitor(connectedReader.id); + setCardMonitorRunning(false); + setCardPresence('unknown'); + setMessage(''); + } catch (error) { + setMessage(formatError(error)); + } + } + async function disconnectCurrentReader() { if (connectedReader === null) { return; } try { + if (cardMonitorRunning) { + await stopCardMonitor(connectedReader.id); + } + await disconnectReader(connectedReader.id); setConnectedReader(null); - setCardPresent(false); + setCardMonitorRunning(false); + setCardPresence('unknown'); setCardUid(''); setApduResponse(''); setMifareResult(''); @@ -169,9 +212,7 @@ export default function App() { } try { - setMifareResult( - await mifare.readBlock({ readerId: connectedReader.id, block }) - ); + setMifareResult(await mifare.readBlock({ readerId: connectedReader.id, block })); setMessage(''); } catch (error) { setMessage(formatError(error)); @@ -222,9 +263,7 @@ export default function App() { block, data: mifareData, }); - setMifareResult( - await mifare.readBlock({ readerId: connectedReader.id, block }) - ); + setMifareResult(await mifare.readBlock({ readerId: connectedReader.id, block })); setMessage(''); } catch (error) { setMessage(formatError(error)); @@ -262,14 +301,14 @@ export default function App() { return; } - setCardPresent(true); + setCardPresence('present'); }); const removedSubscription = addCardRemovedListener((event) => { if (event.readerId !== connectedReader?.id) { return; } - setCardPresent(false); + setCardPresence('removed'); setCardUid(''); setApduResponse(''); setMifareResult(''); @@ -286,8 +325,7 @@ export default function App() { style={styles.scroll} contentContainerStyle={styles.container} contentInsetAdjustmentBehavior="automatic" - keyboardShouldPersistTaps="handled" - > + keyboardShouldPersistTaps="handled"> Generic Reader Flow @@ -339,14 +377,27 @@ export default function App() { {formatMetadata(connectedReader)} - 4. Place Card - Card: {cardPresent ? 'present' : 'removed'} + 4. Card Presence Monitor + Monitor: {cardMonitorRunning ? 'running' : 'stopped'} + Card: {cardPresence} +