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