OSDN Git Service

Prevent crash when removing duplicates
authorMatthew Fritze <mfritze@google.com>
Tue, 30 May 2017 15:36:52 +0000 (08:36 -0700)
committerMatthew Fritze <mfritze@google.com>
Thu, 1 Jun 2017 18:13:37 +0000 (11:13 -0700)
The method that crashes is removed in O-DR, and thus
does not need to be merged down.

Change-Id: If30bd8bd92d578133984f7f35e7ec5288adfc390
Fixes: 62100634
Test: make RunSettingsRoboTests
Merged-In: Id36f7bf4ceaaa3a2bd326ecafbfe97fd0b247df2

src/com/android/settings/search2/DatabaseResultLoader.java
tests/robotests/src/com/android/settings/search2/DatabaseResultLoaderTest.java

index 5892ebc..70cefe5 100644 (file)
@@ -323,18 +323,18 @@ public class DatabaseResultLoader extends AsyncLoader<List<? extends SearchResul
             for (int j = i - 1; j >= 0; j--) {
                 primaryResult = results.get(j);
                 if (areDuplicateResults(primaryResult, secondaryResult)) {
-
                     if (primaryResult.viewType != ResultPayload.PayloadType.INTENT) {
                         // Case where both payloads are inline
                         results.remove(i);
                         break;
                     } else if (secondaryResult.viewType != ResultPayload.PayloadType.INTENT) {
-                        // Case where only second result is inline
+                        // Case where only second result is inline.
                         results.remove(j);
                         i--; // shift the top index to reflect the lower element being removed
                     } else {
-                        // Case where both payloads are intent
+                        // Case where both payloads are intent.
                         results.remove(i);
+                        break;
                     }
                 }
             }
index 8b97a91..862db32 100644 (file)
@@ -379,6 +379,47 @@ public class DatabaseResultLoaderTest {
     }
 
     @Test
+    public void testDeDupe_threeDuplicates_onlyOneStays() {
+        /*
+         * Create a list as follows:
+         * (3) Intent One
+         * (2) Intent One
+         * (1) Intent One
+         *
+         * After removing duplicates:
+         * (1) Intent One
+         */
+        List<SearchResult> results = new ArrayList();
+        IntentPayload intentPayload = new IntentPayload(new Intent());
+
+        SearchResult.Builder builder = new SearchResult.Builder();
+        // Intent One
+        builder.addTitle(titleOne)
+                .addSummary(summaryOne)
+                .addPayload(intentPayload);
+        SearchResult resultOne = builder.build();
+        results.add(resultOne);
+
+        // Intent Two
+        builder.addTitle(titleOne)
+                .addSummary(summaryOne)
+                .addPayload(intentPayload);
+        SearchResult resultTwo = builder.build();
+        results.add(resultTwo);
+
+        // Intent Three
+        builder.addTitle(titleOne)
+                .addSummary(summaryOne)
+                .addPayload(intentPayload);
+        SearchResult resultThree = builder.build();
+        results.add(resultThree);
+
+        loader = new DatabaseResultLoader(mContext, "", null);
+        loader.removeDuplicates(results);
+        assertThat(results.size()).isEqualTo(1);
+    }
+
+    @Test
     public void testSpecialCaseTwoWords_firstWordMatches_ranksHigher() {
         final String caseOne = "Apple pear";
         final String caseTwo = "Banana apple";