From 4b0677a2a45e2542b44e906c91e4bf57ed00f44e Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Fri, 8 Sep 2017 14:05:15 -0700 Subject: [PATCH] Index the System status page - Page is found in System > About Phone > Status The page was simply never indexed. - Remove the unavailable summary text. - Suppress IP address because it appears in wifi settings as well. Test: make RunSettingsRoboTests Change-Id: I0c5eb5222fc356dd3686fb84ca47da8e2d3274f5 Fixes: 65443327 --- res/xml/device_info_status.xml | 16 ++-- .../android/settings/deviceinfo/Status.java | 22 ++++- .../search/SearchIndexableResources.java | 2 + .../settings/wifi/ConfigureWifiSettings.java | 21 +++++ .../grandfather_not_implementing_indexable | 1 - .../wifi/ConfigureWifiSettingsTest.java | 83 +++++++++++++++++++ 6 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml index 9a57af987bf..b381d04242d 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" /> diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java index baddc6cac2b..624103a179f 100644 --- a/src/com/android/settings/deviceinfo/Status.java +++ b/src/com/android/settings/deviceinfo/Status.java @@ -31,6 +31,7 @@ import android.os.Message; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserManager; +import android.provider.SearchIndexableResource; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.text.TextUtils; @@ -40,13 +41,17 @@ import com.android.internal.util.ArrayUtils; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.search.Indexable; import java.lang.ref.WeakReference; +import java.util.Arrays; +import java.util.List; import static android.content.Context.CONNECTIVITY_SERVICE; import static android.content.Context.WIFI_SERVICE; -public class Status extends SettingsPreferenceFragment { +public class Status extends SettingsPreferenceFragment implements Indexable { private static final String KEY_BATTERY_STATUS = "battery_status"; private static final String KEY_BATTERY_LEVEL = "battery_level"; @@ -302,4 +307,19 @@ public class Status extends SettingsPreferenceFragment { return h + ":" + pad(m) + ":" + pad(s); } + + /** + * For Search. + */ + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + + @Override + public List 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 c20d2a03007..b657d80b31f 100644 --- a/src/com/android/settings/search/SearchIndexableResources.java +++ b/src/com/android/settings/search/SearchIndexableResources.java @@ -45,6 +45,7 @@ import com.android.settings.datausage.DataPlanUsageSummary; import com.android.settings.datausage.DataUsageMeteredSettings; import com.android.settings.datausage.DataUsageSummary; 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; @@ -188,6 +189,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 aeee6ffa011..53b2619fc99 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 be5a99b2c65..d961fd6eb86 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); + } +}