From 0428a87c71b09ffde09b7ad9cc1dae654c8e1b5a Mon Sep 17 00:00:00 2001
From: il-Luca <218278332+il-Luca@users.noreply.github.com>
Date: Fri, 27 Feb 2026 12:37:19 +0100
Subject: [PATCH] Add option to pause NFC while viewing a card
---
app/src/main/AndroidManifest.xml | 4 ++++
.../card_locker/LoyaltyCardViewActivity.java | 15 +++++++++++++++
.../protect/card_locker/preferences/Settings.java | 4 ++++
app/src/main/res/values/strings.xml | 3 +++
app/src/main/res/xml/preferences.xml | 9 +++++++++
5 files changed, 35 insertions(+)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 596b2f9ba6..d26f252c5b 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 41566aa11e..da66e3c87c 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.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 @@ protected void onResume() {
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 9c546f734c..5971b79dd6 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 boolean getDisableLockscreenWhileViewingCard() {
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 d6f8d93c5a..bb19d3d971 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 edcb29fe90..cad25635b0 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" />
+
+