Remove accessibility duplicates in settings search

Bug: 33701673
Test: make RunSettingsRoboTests
Change-Id: I46e79051d10c4cae851f8e76304e6cfe0a3f73d4
Merged-In: Idda6d2f98cb8d2cb91a9a4721b2ef84921f9056a
diff --git a/res/xml/accessibility_magnification_settings.xml b/res/xml/accessibility_magnification_settings.xml
index 0f3c119..4083360 100644
--- a/res/xml/accessibility_magnification_settings.xml
+++ b/res/xml/accessibility_magnification_settings.xml
@@ -14,6 +14,7 @@
      limitations under the License.
 -->
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+                  android:key="magnification_preference_screen_title"
                   android:title="@string/accessibility_screen_magnification_title">
     <Preference
         android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index a9ca458..98844fa 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -50,6 +50,8 @@
 public class DisplaySettings extends DashboardFragment {
     private static final String TAG = "DisplaySettings";
 
+    public static final String KEY_DISPLAY_SIZE = "screen_zoom";
+
     private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness";
     private static final String KEY_SCREEN_TIMEOUT = "screen_timeout";
 
@@ -123,6 +125,13 @@
                 }
 
                 @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = new ArrayList<>();
+                    keys.add(KEY_DISPLAY_SIZE);
+                    return keys;
+                }
+
+                @Override
                 public List<PreferenceController> getPreferenceControllers(Context context) {
                     return buildPreferenceControllers(context, null);
                 }
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index eb3e726..342b384 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -46,6 +46,7 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.internal.view.RotationPolicy;
 import com.android.internal.view.RotationPolicy.RotationPolicyListener;
+import com.android.settings.DisplaySettings;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
@@ -721,7 +722,7 @@
             new BaseSearchIndexProvider() {
         @Override
         public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
-            List<SearchIndexableRaw> indexables = new ArrayList<SearchIndexableRaw>();
+            List<SearchIndexableRaw> indexables = new ArrayList<>();
 
             PackageManager packageManager = context.getPackageManager();
             AccessibilityManager accessibilityManager =
@@ -763,5 +764,16 @@
             indexables.add(indexable);
             return indexables;
         }
+
+        @Override
+        public List<String> getNonIndexableKeys(Context context) {
+            List<String> keys = new ArrayList<>();
+            // Duplicates in Display
+            keys.add(FONT_SIZE_PREFERENCE_SCREEN);
+            // TODO (b/37741509) Remove this non-indexble key when bug is resolved.
+            keys.add(DisplaySettings.KEY_DISPLAY_SIZE);
+
+            return keys;
+        }
     };
 }
diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
index 83299e8..68979ad 100644
--- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
@@ -31,9 +31,11 @@
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.PreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -42,6 +44,7 @@
         Indexable {
 
     // Settings App preference keys
+    private static final String PREFERENCE_TITLE_KEY = "magnification_preference_screen_title";
     private static final String MAGNIFICATION_GESTURES_PREFERENCE_SCREEN_KEY =
             "screen_magnification_gestures_preference_screen";
     private static final String MAGNIFICATION_NAVBAR_PREFERENCE_SCREEN_KEY =
@@ -214,5 +217,12 @@
                         return Collections.emptyList();
                     }
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    keys.add(PREFERENCE_TITLE_KEY);
+                    return keys;
+                }
             };
 }
diff --git a/src/com/android/settings/search/BaseSearchIndexProvider.java b/src/com/android/settings/search/BaseSearchIndexProvider.java
index bda9319..8732227 100644
--- a/src/com/android/settings/search/BaseSearchIndexProvider.java
+++ b/src/com/android/settings/search/BaseSearchIndexProvider.java
@@ -42,7 +42,7 @@
 public class BaseSearchIndexProvider implements Indexable.SearchIndexProvider {
 
     private static final String TAG = "BaseSearchIndex";
-    private static final List<String> EMPTY_LIST = Collections.emptyList();
+    private static final List<String> EMPTY_LIST = new ArrayList<>();
 
     public BaseSearchIndexProvider() {
     }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
new file mode 100644
index 0000000..4da06c0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -0,0 +1,34 @@
+package com.android.settings.accessibility;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AccessibilitySettingsTest {
+
+    @Test
+    public void testNonIndexableKeys_existInXmlLayout() {
+        final Context context = RuntimeEnvironment.application;
+        final List<String> niks = AccessibilitySettings.SEARCH_INDEX_DATA_PROVIDER
+                .getNonIndexableKeys(context);
+        final List<String> keys = new ArrayList<>();
+
+        keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.accessibility_settings));
+
+        assertThat(keys).containsAllIn(niks);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/search/DataIntegrityTest.java b/tests/robotests/src/com/android/settings/search/DataIntegrityTest.java
index f10752a..6ffd704 100644
--- a/tests/robotests/src/com/android/settings/search/DataIntegrityTest.java
+++ b/tests/robotests/src/com/android/settings/search/DataIntegrityTest.java
@@ -93,10 +93,7 @@
         for (Integer xmlResId : xmlList) {
             // Get all keys to be indexed
             final List<String> prefKeys = XmlTestUtils.getKeysFromPreferenceXml(context, xmlResId);
-
             pageKeys.addAll(prefKeys);
-            // Remove grandfathered keys.
-            pageKeys.removeAll(grandfatheredKeys);
             // Find all already-existing keys.
             pageKeys.retainAll(masterKeys);
             // Keep list of offending duplicate keys.
@@ -105,7 +102,7 @@
             masterKeys.addAll(prefKeys);
             pageKeys.clear();
         }
-        assertThat(duplicateKeys).isEmpty();
+        assertThat(duplicateKeys).containsExactlyElementsIn(grandfatheredKeys);
     }
 
     /**