diff --git a/res/values/strings.xml b/res/values/strings.xml
index 10aafc47904..341ac9075bc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7438,6 +7438,8 @@
Bluetooth
Unavailable because NFC is off
+
+ To use, first install a payment app
Apps & notifications
diff --git a/src/com/android/settings/applications/specialaccess/PaymentSettingsEnabler.java b/src/com/android/settings/applications/specialaccess/PaymentSettingsEnabler.java
index 6c5227d4307..597705ca170 100644
--- a/src/com/android/settings/applications/specialaccess/PaymentSettingsEnabler.java
+++ b/src/com/android/settings/applications/specialaccess/PaymentSettingsEnabler.java
@@ -18,6 +18,7 @@ package com.android.settings.applications.specialaccess;
import android.content.Context;
import android.nfc.NfcAdapter;
+import android.nfc.cardemulation.CardEmulation;
import androidx.preference.Preference;
@@ -30,10 +31,14 @@ import com.android.settings.nfc.BaseNfcEnabler;
* preference is updated.
*/
public class PaymentSettingsEnabler extends BaseNfcEnabler {
+ private final CardEmulation mCardEmuManager;
private final Preference mPreference;
+ boolean mIsPaymentAvailable;
public PaymentSettingsEnabler(Context context, Preference preference) {
super(context);
+ mCardEmuManager = CardEmulation.getInstance(super.mNfcAdapter);
+ mIsPaymentAvailable = false;
mPreference = preference;
}
@@ -46,9 +51,29 @@ public class PaymentSettingsEnabler extends BaseNfcEnabler {
mPreference.setEnabled(false);
break;
case NfcAdapter.STATE_ON:
- mPreference.setSummary(null);
- mPreference.setEnabled(true);
+ if (mIsPaymentAvailable) {
+ mPreference.setSummary(null);
+ mPreference.setEnabled(true);
+ } else {
+ mPreference.setSummary(
+ R.string.nfc_and_payment_settings_no_payment_installed_summary);
+
+ mPreference.setEnabled(false);
+ }
break;
}
}
+
+ @Override
+ public void resume() {
+ if (!isNfcAvailable()) {
+ return;
+ }
+ if (mCardEmuManager.getServices(CardEmulation.CATEGORY_PAYMENT).isEmpty()) {
+ mIsPaymentAvailable = false;
+ } else {
+ mIsPaymentAvailable = true;
+ }
+ super.resume();
+ }
}