diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 596b2f9ba..d26f252c5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,8 +12,12 @@
+
+
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
index 41566aa11..da66e3c87 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
@@ -10,6 +10,7 @@ import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
+import android.nfc.NfcAdapter;
import android.os.Build;
import android.os.Bundle;
import android.text.InputType;
@@ -677,6 +678,20 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
window.setAttributes(attributes);
}
+ // Pause NFC to prevent interference with barcode scanners
+ if (settings.getDisableNfcWhileViewingCard()) {
+ NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
+ if (nfcAdapter != null) {
+ nfcAdapter.enableReaderMode(this, tag -> {
+ // Intentionally empty: pause all NFC tag discoveries
+ }, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B
+ | NfcAdapter.FLAG_READER_NFC_F | NfcAdapter.FLAG_READER_NFC_V
+ | NfcAdapter.FLAG_READER_NFC_BARCODE
+ | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK
+ | NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS, null);
+ }
+ }
+
loyaltyCard = DBHelper.getLoyaltyCard(this, database, loyaltyCardId);
if (loyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
diff --git a/app/src/main/java/protect/card_locker/preferences/Settings.java b/app/src/main/java/protect/card_locker/preferences/Settings.java
index 9c546f734..5971b79dd 100644
--- a/app/src/main/java/protect/card_locker/preferences/Settings.java
+++ b/app/src/main/java/protect/card_locker/preferences/Settings.java
@@ -82,6 +82,10 @@ public class Settings {
return getBoolean(R.string.settings_key_disable_lockscreen_while_viewing_card, true);
}
+ public boolean getDisableNfcWhileViewingCard() {
+ return getBoolean(R.string.settings_key_disable_nfc_while_viewing_card, false);
+ }
+
public boolean getAllowContentProviderRead() {
return getBoolean(R.string.settings_key_allow_content_provider_read, true);
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d6f8d93c5..bb19d3d97 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -101,6 +101,9 @@
pref_keep_screen_on
Prevent screen lock
Disables screen lock while viewing a card
+ Pause NFC
+ Pauses NFC to prevent interference with scanners while viewing a card
+ pref_disable_nfc_while_viewing_card
Allow other apps to access my data
Apps will still have to request permission to be granted access
pref_disable_lockscreen_while_viewing_card
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index edcb29fe9..cad25635b 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -109,6 +109,15 @@
android:title="@string/settings_disable_lockscreen_while_viewing_card"
app:iconSpaceReserved="false"
app:singleLineTitle="false" />
+
+