From d57ce3af8f35d921be4c9ec1b7461f21aa2adeab Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 26 Apr 2017 17:10:52 -0700 Subject: [PATCH] Properly index developer options. Change-Id: Id9ab629438f52c65fd774341b1200dacb4efd93b Fix: 37724514 Test: make RunSettingsRoboTests --- res/xml/development_prefs.xml | 1 + res/xml/empty_settings.xml | 18 -------- src/com/android/settings/ApnSettings.java | 2 +- .../development/DevelopmentSettings.java | 21 +++------ .../search/BaseSearchIndexProvider.java | 6 +-- .../development/DevelopmentSettingsTest.java | 45 ++++++++++++++++++- 6 files changed, 55 insertions(+), 38 deletions(-) delete mode 100644 res/xml/empty_settings.xml diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index 0089ed79590..1eea8dda464 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -16,6 +16,7 @@ - - - diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java index b460050eea4..206d74f30fa 100755 --- a/src/com/android/settings/ApnSettings.java +++ b/src/com/android/settings/ApnSettings.java @@ -184,7 +184,7 @@ public class ApnSettings extends RestrictedSettingsFragment implements mUnavailable = isUiRestricted(); setHasOptionsMenu(!mUnavailable); if (mUnavailable) { - addPreferencesFromResource(R.xml.empty_settings); + addPreferencesFromResource(R.xml.placeholder_prefs); return; } diff --git a/src/com/android/settings/development/DevelopmentSettings.java b/src/com/android/settings/development/DevelopmentSettings.java index bd9083969c3..2b3b82677e7 100644 --- a/src/com/android/settings/development/DevelopmentSettings.java +++ b/src/com/android/settings/development/DevelopmentSettings.java @@ -331,12 +331,11 @@ public class DevelopmentSettings extends RestrictedSettingsFragment private SwitchPreference mColorTemperaturePreference; - private final ArrayList mAllPrefs = new ArrayList(); + private final ArrayList mAllPrefs = new ArrayList<>(); - private final ArrayList mResetSwitchPrefs - = new ArrayList(); + private final ArrayList mResetSwitchPrefs = new ArrayList<>(); - private final HashSet mDisabledPrefs = new HashSet(); + private final HashSet mDisabledPrefs = new HashSet<>(); // To track whether a confirmation dialog was clicked. private boolean mDialogClicked; private Dialog mEnableDialog; @@ -396,7 +395,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment // Block access to developer options if the user is not the owner, if user policy // restricts it, or if the device has not been provisioned mUnavailable = true; - addPreferencesFromResource(R.xml.empty_settings); + addPreferencesFromResource(R.xml.placeholder_prefs); return; } @@ -2723,7 +2722,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { - private boolean isShowingDeveloperOptions(Context context) { + @Override + protected boolean isPageSearchEnabled(Context context) { return context.getSharedPreferences(DevelopmentSettings.PREF_FILE, Context.MODE_PRIVATE).getBoolean( DevelopmentSettings.PREF_SHOW, @@ -2734,10 +2734,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment public List getXmlResourcesToIndex( Context context, boolean enabled) { - if (!isShowingDeveloperOptions(context)) { - return null; - } - final SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.development_prefs; return Arrays.asList(sir); @@ -2745,11 +2741,8 @@ public class DevelopmentSettings extends RestrictedSettingsFragment @Override public List getNonIndexableKeys(Context context) { - if (!isShowingDeveloperOptions(context)) { - return null; - } + final List keys = super.getNonIndexableKeys(context); - final List keys = new ArrayList(); if (!showEnableOemUnlockPreference(context)) { keys.add(ENABLE_OEM_UNLOCK); } diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java index bda93198cab..724868efbcd 100644 --- a/src/com/android/settings/search/BaseSearchIndexProvider.java +++ b/src/com/android/settings/search/BaseSearchIndexProvider.java @@ -33,7 +33,6 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -42,7 +41,6 @@ import java.util.List; public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider { private static final String TAG = "BaseSearchIndex"; - private static final List EMPTY_LIST = Collections.emptyList(); public BaseSearchIndexProvider() { } @@ -72,7 +70,7 @@ public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider { } return nonIndexableKeys; } else { - return EMPTY_LIST; + return new ArrayList<>(); } } @@ -93,7 +91,7 @@ public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider { final List resources = getXmlResourcesToIndex( context, true /* not used*/); if (resources == null || resources.isEmpty()) { - return EMPTY_LIST; + return new ArrayList<>(); } final List nonIndexableKeys = new ArrayList<>(); for (SearchIndexableResource res : resources) { diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java index 485a5394e29..cc9d5ed0c07 100644 --- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java +++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java @@ -18,13 +18,16 @@ package com.android.settings.development; import android.app.Activity; import android.content.Context; +import android.provider.SearchIndexableResource; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.shadow.SettingsShadowResources; import com.android.settingslib.drawer.CategoryKey; import org.junit.Before; @@ -33,12 +36,14 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; import java.util.ArrayList; import java.util.List; +import static com.google.common.truth.Truth.assertThat; import static org.mockito.Answers.RETURNS_DEEP_STUBS; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; @@ -48,7 +53,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) -@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, + shadows = { + SettingsShadowResources.class, + SettingsShadowResources.SettingsShadowTheme.class + }) public class DevelopmentSettingsTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) @@ -90,4 +99,38 @@ public class DevelopmentSettingsTest { verify(mScreen, times(2)).addPreference(any(Preference.class)); } + + @Test + public void searchIndex_shouldIndexFromPrefXml() { + final List index = + DevelopmentSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex( + RuntimeEnvironment.application, true); + + assertThat(index.size()).isEqualTo(1); + assertThat(index.get(0).xmlResId).isEqualTo(R.xml.development_prefs); + } + + @Test + public void searchIndex_pageDisabled_shouldAddAllKeysToNonIndexable() { + final Context appContext = RuntimeEnvironment.application; + new DevelopmentSettingsEnabler(appContext, null /* lifecycle */) + .disableDevelopmentSettings(); + + final List nonIndexableKeys = + DevelopmentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(appContext); + + assertThat(nonIndexableKeys).contains("development_prefs_screen"); + } + + @Test + public void searchIndex_pageEnabled_shouldNotAddKeysToNonIndexable() { + final Context appContext = RuntimeEnvironment.application; + new DevelopmentSettingsEnabler(appContext, null /* lifecycle */) + .enableDevelopmentSettings(); + + final List nonIndexableKeys = + DevelopmentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(appContext); + + assertThat(nonIndexableKeys).doesNotContain("development_prefs_screen"); + } }