react-native-nfc-manager 3.13.1 → 3.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -971,11 +971,11 @@ class NfcManager extends ReactContextBaseJavaModule implements ActivityEventList
971
971
 
972
972
  @ReactMethod
973
973
  private void registerTagEvent(ReadableMap options, Callback callback) {
974
- this.isReaderModeEnabled = options.getBoolean("isReaderModeEnabled");
975
- this.readerModeFlags = options.getInt("readerModeFlags");
976
- this.readerModeDelay = options.getInt("readerModeDelay");
974
+ isReaderModeEnabled = options.getBoolean("isReaderModeEnabled");
975
+ readerModeFlags = options.getInt("readerModeFlags");
976
+ readerModeDelay = options.getInt("readerModeDelay");
977
977
 
978
- Log.d(LOG_TAG, "registerTag");
978
+ Log.d(LOG_TAG, "registerTagEvent");
979
979
  isForegroundEnabled = true;
980
980
 
981
981
  // capture all mime-based dispatch NDEF
@@ -1002,18 +1002,23 @@ class NfcManager extends ReactContextBaseJavaModule implements ActivityEventList
1002
1002
 
1003
1003
  @ReactMethod
1004
1004
  private void unregisterTagEvent(Callback callback) {
1005
- Log.d(LOG_TAG, "registerTag");
1006
- isForegroundEnabled = false;
1007
- intentFilters.clear();
1005
+ Log.d(LOG_TAG, "unregisterTagEvent");
1008
1006
  if (isResumed) {
1009
1007
  enableDisableForegroundDispatch(false);
1010
1008
  }
1009
+
1010
+ intentFilters.clear();
1011
+ isForegroundEnabled = false;
1012
+ isReaderModeEnabled = false;
1013
+ readerModeFlags = 0;
1014
+ readerModeDelay = 0;
1015
+
1011
1016
  callback.invoke();
1012
1017
  }
1013
1018
 
1014
1019
  @ReactMethod
1015
1020
  private void hasTagEventRegistration(Callback callback) {
1016
- Log.d(LOG_TAG, "isSessionAvailable");
1021
+ Log.d(LOG_TAG, "isSessionAvailable: " + isForegroundEnabled);
1017
1022
  callback.invoke(null, isForegroundEnabled);
1018
1023
  }
1019
1024
 
@@ -1061,25 +1066,36 @@ class NfcManager extends ReactContextBaseJavaModule implements ActivityEventList
1061
1066
  }
1062
1067
 
1063
1068
  if (enable) {
1064
- Log.i(LOG_TAG, "enableReaderMode");
1069
+ Log.i(LOG_TAG, "enableReaderMode: " + readerModeFlags);
1065
1070
  Bundle readerModeExtras = new Bundle();
1066
1071
  readerModeExtras.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, readerModeDelay * 1000);
1067
1072
  nfcAdapter.enableReaderMode(currentActivity, new NfcAdapter.ReaderCallback() {
1068
1073
  @Override
1069
1074
  public void onTagDiscovered(Tag tag) {
1070
- manager.tag = tag;
1071
- Log.d(LOG_TAG, "readerMode onTagDiscovered");
1072
- WritableMap nfcTag = null;
1073
- // if the tag contains NDEF, we want to report the content
1074
- if (Arrays.asList(tag.getTechList()).contains(Ndef.class.getName())) {
1075
- Ndef ndef = Ndef.get(tag);
1076
- nfcTag = ndef2React(ndef, new NdefMessage[] { ndef.getCachedNdefMessage() });
1077
- } else {
1078
- nfcTag = tag2React(tag);
1079
- }
1080
-
1081
- if (nfcTag != null) {
1082
- sendEvent("NfcManagerDiscoverTag", nfcTag);
1075
+ synchronized (this) {
1076
+ manager.tag = tag;
1077
+ Log.d(LOG_TAG, "readerMode onTagDiscovered");
1078
+ WritableMap nfcTag = null;
1079
+ // if the tag contains NDEF, we want to report the content
1080
+ if (Arrays.asList(tag.getTechList()).contains(Ndef.class.getName())) {
1081
+ Ndef ndef = Ndef.get(tag);
1082
+ nfcTag = ndef2React(ndef, new NdefMessage[] { ndef.getCachedNdefMessage() });
1083
+ } else {
1084
+ nfcTag = tag2React(tag);
1085
+ }
1086
+
1087
+ if (nfcTag != null) {
1088
+ sendEvent("NfcManagerDiscoverTag", nfcTag);
1089
+ if (techRequest!= null && !techRequest.isConnected()) {
1090
+ boolean result = techRequest.connect(tag);
1091
+ if (result) {
1092
+ techRequest.getPendingCallback().invoke(null, techRequest.getTechType());
1093
+ } else {
1094
+ // this indicates that we get a NFC tag, but none of the user required tech is matched
1095
+ techRequest.getPendingCallback().invoke(null, null);
1096
+ }
1097
+ }
1098
+ }
1083
1099
  }
1084
1100
  }
1085
1101
  }, readerModeFlags, readerModeExtras);
package/index.d.ts CHANGED
@@ -88,6 +88,7 @@ declare module 'react-native-nfc-manager' {
88
88
 
89
89
  export interface CancelTechReqOpts {
90
90
  throwOnError?: boolean = false;
91
+ delayMsAndroid?: number = 1000;
91
92
  }
92
93
 
93
94
  interface NdefHandler {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nfc-manager",
3
- "version": "3.13.1",
3
+ "version": "3.13.2",
4
4
  "description": "A NFC module for react native.",
5
5
  "main": "src/index.js",
6
6
  "repository": {
@@ -15,6 +15,8 @@ const NfcAdapter = {
15
15
  FLAG_READER_NO_PLATFORM_SOUNDS: 0x100,
16
16
  };
17
17
 
18
+ const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
19
+
18
20
  class NfcManagerAndroid extends NfcManagerBase {
19
21
  constructor() {
20
22
  super();
@@ -42,12 +44,13 @@ class NfcManagerAndroid extends NfcManagerBase {
42
44
  };
43
45
 
44
46
  cancelTechnologyRequest = async (options = {}) => {
45
- const {throwOnError = false} = options;
47
+ const {throwOnError = false, delayMsAndroid = 1000} = options;
46
48
 
47
49
  try {
48
50
  await callNative('cancelTechnologyRequest');
49
51
 
50
- if (!this.cleanUpTagRegistration) {
52
+ if (this.cleanUpTagRegistration) {
53
+ await delay(delayMsAndroid);
51
54
  await this.unregisterTagEvent();
52
55
  this.cleanUpTagRegistration = false;
53
56
  }