diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml index 6fe43ec87b0..3456f9199ea 100644 --- a/res/xml/device_info_status.xml +++ b/res/xml/device_info_status.xml @@ -23,13 +23,13 @@ android:enabled="false" android:shouldDisableView="false" android:title="@string/battery_status_title" - android:summary="@string/device_info_not_available" /> + android:summary="@string/summary_placeholder" /> getXmlResourcesToIndex( + Context context, boolean enabled) { + final SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.device_info_status; + return Arrays.asList(sir); + } + }; } diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java index 32098130784..b9e944ec049 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -46,6 +46,7 @@ import com.android.settings.datausage.DataUsageMeteredSettings; import com.android.settings.datausage.DataUsageSummary; import com.android.settings.deletionhelper.AutomaticStorageManagerSettings; import com.android.settings.development.DevelopmentSettings; +import com.android.settings.deviceinfo.Status; import com.android.settings.deviceinfo.StorageDashboardFragment; import com.android.settings.deviceinfo.StorageSettings; import com.android.settings.display.AmbientDisplaySettings; @@ -189,6 +190,7 @@ public final class SearchIndexableResources { addIndex(PrintSettingsFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_print); addIndex(DevelopmentSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_development); addIndex(DeviceInfoSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about); + addIndex(Status.class, NO_DATA_RES_ID, 0 /* icon */); addIndex(LegalSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about); addIndex(ZenModeVisualInterruptionSettings.class, R.xml.zen_mode_visual_interruptions_settings, diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java index 43f25f11977..4199a6d3b97 100644 --- a/src/com/android/settings/wifi/ConfigureWifiSettings.java +++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java @@ -19,6 +19,8 @@ import static android.content.Context.WIFI_SERVICE; import android.content.Context; import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.net.NetworkScoreManager; import android.net.wifi.WifiManager; import android.provider.SearchIndexableResource; @@ -42,6 +44,8 @@ public class ConfigureWifiSettings extends DashboardFragment { private static final String TAG = "ConfigureWifiSettings"; + public static final String KEY_IP_ADDRESS = "current_ip_address"; + private WifiWakeupPreferenceController mWifiWakeupPreferenceController; private UseOpenWifiPreferenceController mUseOpenWifiPreferenceController; @@ -114,5 +118,22 @@ public class ConfigureWifiSettings extends DashboardFragment { sir.xmlResId = R.xml.wifi_configure_settings; return Arrays.asList(sir); } + + @Override + public List getNonIndexableKeys(Context context) { + List keys = super.getNonIndexableKeys(context); + + // If connected to WiFi, this IP address will be the same as the Status IP. + // Or, if there is no connection they will say unavailable. + ConnectivityManager cm = (ConnectivityManager) + context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo info = cm.getActiveNetworkInfo(); + if (info == null + || info.getType() == ConnectivityManager.TYPE_WIFI) { + keys.add(KEY_IP_ADDRESS); + } + + return keys; + } }; } diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable index 08fe16a2e24..e8a32ecad56 100644 --- a/tests/robotests/assets/grandfather_not_implementing_indexable +++ b/tests/robotests/assets/grandfather_not_implementing_indexable @@ -20,7 +20,6 @@ com.android.settings.applications.ProcessStatsDetail com.android.settings.wifi.WifiInfo com.android.settings.applications.VrListenerSettings com.android.settings.inputmethod.UserDictionaryList -com.android.settings.deviceinfo.Status com.android.settings.datausage.DataSaverSummary com.android.settings.notification.ChannelNotificationSettings com.android.settings.datausage.AppDataUsage diff --git a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java new file mode 100644 index 00000000000..687287be8a4 --- /dev/null +++ b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java @@ -0,0 +1,83 @@ +package com.android.settings.wifi; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.testutils.XmlTestUtils; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class ConfigureWifiSettingsTest { + + private Context mContext; + + @Before + public void setUp() { + mContext = spy(RuntimeEnvironment.application); + } + + @Test + public void testNonIndexableKeys_existInXmlLayout() { + final List niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext); + final int xmlId = new ConfigureWifiSettings().getPreferenceScreenResId(); + + final List keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId); + + assertThat(keys).containsAllIn(niks); + } + + @Test + public void testNonIndexableKeys_noConnection_blocksIP() { + ConnectivityManager manager = mock(ConnectivityManager.class); + when(manager.getActiveNetworkInfo()).thenReturn(null); + doReturn(manager).when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE); + + final List niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext); + assertThat(niks).contains(ConfigureWifiSettings.KEY_IP_ADDRESS); + } + + @Test + public void testNonIndexableKeys_wifiConnection_blocksIP() { + ConnectivityManager manager = mock(ConnectivityManager.class); + NetworkInfo info = mock(NetworkInfo.class); + when(info.getType()).thenReturn(ConnectivityManager.TYPE_WIFI); + when(manager.getActiveNetworkInfo()).thenReturn(info); + doReturn(manager).when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE); + + final List niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext); + assertThat(niks).contains(ConfigureWifiSettings.KEY_IP_ADDRESS); + } + + @Test + public void testNonIndexableKeys_mobileConnection_blocksIP() { + ConnectivityManager manager = mock(ConnectivityManager.class); + NetworkInfo info = mock(NetworkInfo.class); + when(info.getType()).thenReturn(ConnectivityManager.TYPE_MOBILE); + when(manager.getActiveNetworkInfo()).thenReturn(info); + doReturn(manager).when(mContext).getSystemService(Context.CONNECTIVITY_SERVICE); + + final List niks = ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER + .getNonIndexableKeys(mContext); + assertThat(niks).doesNotContain(ConfigureWifiSettings.KEY_IP_ADDRESS); + } +}