diff --git a/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java index c0715706e23..508d6c95589 100644 --- a/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java +++ b/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceController.java @@ -36,7 +36,7 @@ public class BluetoothMasterSwitchPreferenceController extends PreferenceControl implements OnSummaryChangeListener, LifecycleObserver, OnResume, OnPause, OnStart, OnStop { - private static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth"; + public static final String KEY_TOGGLE_BLUETOOTH = "toggle_bluetooth"; private LocalBluetoothManager mBluetoothManager; private MasterSwitchPreference mBtPreference; diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java index b12e8496146..aeb7efbbbba 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java @@ -16,6 +16,7 @@ package com.android.settings.connecteddevice; import android.content.Context; +import android.content.pm.PackageManager; import android.provider.SearchIndexableResource; import com.android.internal.logging.nano.MetricsProto; @@ -85,5 +86,20 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { sir.xmlResId = R.xml.connected_devices; return Arrays.asList(sir); } + + @Override + public List getNonIndexableKeys(Context context) { + PackageManager pm = context.getPackageManager(); + final List keys = new ArrayList(); + + if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) { + keys.add(NfcPreferenceController.KEY_TOGGLE_NFC); + keys.add(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); + } + if (!pm.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) { + keys.add(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH); + } + return keys; + } }; -} \ No newline at end of file +} diff --git a/src/com/android/settings/nfc/NfcPreferenceController.java b/src/com/android/settings/nfc/NfcPreferenceController.java index 11e3e099d7e..7164b5b2823 100644 --- a/src/com/android/settings/nfc/NfcPreferenceController.java +++ b/src/com/android/settings/nfc/NfcPreferenceController.java @@ -39,8 +39,8 @@ import java.util.List; public class NfcPreferenceController extends PreferenceController implements LifecycleObserver, OnResume, OnPause { - private static final String KEY_TOGGLE_NFC = "toggle_nfc"; - private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings"; + public static final String KEY_TOGGLE_NFC = "toggle_nfc"; + public static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings"; private NfcEnabler mNfcEnabler; private NfcAdapter mNfcAdapter; diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java index fc4b75f703e..a4b5c974e4c 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java @@ -15,8 +15,12 @@ */ package com.android.settings.connecteddevice; +import android.content.Context; +import android.content.pm.PackageManager; import android.provider.SearchIndexableResource; +import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController; +import com.android.settings.nfc.NfcPreferenceController; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settingslib.drawer.CategoryKey; @@ -24,22 +28,33 @@ import com.android.settingslib.drawer.CategoryKey; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; import java.util.List; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class ConnectedDeviceDashboardFragmentTest { + @Mock + Context mContext; + + @Mock + private PackageManager mManager; private ConnectedDeviceDashboardFragment mFragment; @Before public void setUp() { + MockitoAnnotations.initMocks(this); mFragment = new ConnectedDeviceDashboardFragment(); + when(mContext.getPackageManager()).thenReturn(mManager); } @Test @@ -50,11 +65,47 @@ public class ConnectedDeviceDashboardFragmentTest { @Test public void testSearchIndexProvider_shouldIndexResource() { final List indexRes = - ConnectedDeviceDashboardFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( - ShadowApplication.getInstance().getApplicationContext(), - true /* enabled */); + mFragment.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(mContext, true /* enabled */); assertThat(indexRes).isNotNull(); assertThat(indexRes.get(0).xmlResId).isEqualTo(mFragment.getPreferenceScreenResId()); } + + @Test + public void testSearchIndexProvider_NoNfc_KeyAdded() { + when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(false); + final List keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); + + assertThat(keys).isNotNull(); + assertThat(keys).contains(NfcPreferenceController.KEY_TOGGLE_NFC); + assertThat(keys).contains(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); + } + + @Test + public void testSearchIndexProvider_NFC_KeyNotAdded() { + when(mManager.hasSystemFeature(PackageManager.FEATURE_NFC)).thenReturn(true); + final List keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); + + assertThat(keys).isNotNull(); + assertThat(keys).doesNotContain(NfcPreferenceController.KEY_TOGGLE_NFC); + assertThat(keys).doesNotContain(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS); + } + + @Test + public void testSearchIndexProvider_NoBluetooth_KeyAdded() { + when(mManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)).thenReturn(false); + final List keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); + + assertThat(keys).isNotNull(); + assertThat(keys).contains(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH); + } + + @Test + public void testSearchIndexProvider_Bluetooth_KeyNotAdded() { + when(mManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)).thenReturn(true); + final List keys = mFragment.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext); + + assertThat(keys).isNotNull(); + assertThat(keys).doesNotContain(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH); + } }