Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ebd80e68 authored by Matthew Fritze's avatar Matthew Fritze
Browse files

Prevent crash when removing duplicates

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
parent 9ef166a5
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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;
                    }
                }
            }
+41 −0
Original line number Diff line number Diff line
@@ -378,6 +378,47 @@ public class DatabaseResultLoaderTest {
        assertThat(results.get(3)).isEqualTo(resultFive);
    }

    @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";