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" /> + +