diff --git a/src/com/android/settings/nfc/AndroidBeamPreferenceController.java b/src/com/android/settings/nfc/AndroidBeamPreferenceController.java index 12ab1b756dc..9fc0aec2230 100644 --- a/src/com/android/settings/nfc/AndroidBeamPreferenceController.java +++ b/src/com/android/settings/nfc/AndroidBeamPreferenceController.java @@ -16,6 +16,7 @@ package com.android.settings.nfc; import android.content.Context; +import android.content.pm.PackageManager; import android.nfc.NfcAdapter; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -63,6 +64,10 @@ public class AndroidBeamPreferenceController extends BasePreferenceController @Override @AvailabilityStatus public int getAvailabilityStatus() { + PackageManager pm = mContext.getPackageManager(); + if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)) { + return UNSUPPORTED_ON_DEVICE; + } return mNfcAdapter != null ? AVAILABLE : UNSUPPORTED_ON_DEVICE; diff --git a/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java index 0abd428d027..90daae0ac87 100644 --- a/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/nfc/AndroidBeamPreferenceControllerTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.pm.PackageManager; import android.nfc.NfcAdapter; import android.nfc.NfcManager; import android.os.UserHandle; @@ -56,6 +57,8 @@ public class AndroidBeamPreferenceControllerTest { private UserManager mUserManager; @Mock private PreferenceScreen mScreen; + @Mock + private PackageManager mPackageManager; private RestrictedPreference mAndroidBeamPreference; private AndroidBeamPreferenceController mAndroidBeamController; @@ -77,6 +80,8 @@ public class AndroidBeamPreferenceControllerTest { mAndroidBeamPreference = new RestrictedPreference(RuntimeEnvironment.application); when(mScreen.findPreference(mAndroidBeamController.getPreferenceKey())).thenReturn( mAndroidBeamPreference); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)).thenReturn(true); Settings.Global.putString(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS, @@ -93,6 +98,13 @@ public class AndroidBeamPreferenceControllerTest { assertThat(mAndroidBeamController.isAvailable()).isTrue(); } + @Test + public void isAvailable_noNfcFeature_shouldReturnFalse() { + when(mNfcAdapter.isEnabled()).thenReturn(true); + when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)).thenReturn(false); + assertThat(mAndroidBeamController.isAvailable()).isFalse(); + } + @Test public void isAvailable_noNfcAdapter_shouldReturnFalse() { ReflectionHelpers.setField(mAndroidBeamController, "mNfcAdapter", null);