17fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze/*
27fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * Copyright (C) 2017 The Android Open Source Project
37fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
47fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * Licensed under the Apache License, Version 2.0 (the "License");
57fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * you may not use this file except in compliance with the License.
67fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * You may obtain a copy of the License at
77fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
87fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *      http://www.apache.org/licenses/LICENSE-2.0
97fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * Unless required by applicable law or agreed to in writing, software
117fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * distributed under the License is distributed on an "AS IS" BASIS,
127fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * See the License for the specific language governing permissions and
147fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze * limitations under the License.
157fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze *
167fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze */
177fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
182078bc2358031ef3a191900d9036daf4251911c1Matthew Fritzepackage com.android.settings.search;
197fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
207fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport android.content.ContentValues;
217fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport android.content.Context;
2252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritzeimport android.content.Intent;
237fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport android.database.sqlite.SQLiteDatabase;
24a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhang
257fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport com.android.settings.TestConfig;
26a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport com.android.settings.dashboard.SiteMapManager;
27a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhangimport com.android.settings.testutils.DatabaseTestUtils;
28a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport com.android.settings.testutils.FakeFeatureFactory;
29fbcf4e6e14d090aaced06d3f8708d6e9df1962baFan Zhangimport com.android.settings.testutils.SettingsRobolectricTestRunner;
30a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhang
317fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.After;
327fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.Before;
337fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.Test;
347fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.junit.runner.RunWith;
35a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.Answers;
36a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.Mock;
37a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport org.mockito.MockitoAnnotations;
387fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.robolectric.RuntimeEnvironment;
397fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport org.robolectric.annotation.Config;
407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
41683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryadimport java.util.Arrays;
42683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryadimport java.util.HashSet;
43683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryadimport java.util.Set;
44b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze
457fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzeimport static com.google.common.truth.Truth.assertThat;
46a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Matchers.anyString;
47a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Matchers.eq;
48a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Mockito.times;
49a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Mockito.verify;
50a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhangimport static org.mockito.Mockito.when;
517fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
527fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze@RunWith(SettingsRobolectricTestRunner.class)
537fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
547fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritzepublic class DatabaseResultLoaderTest {
557fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
56a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
57a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private Context mMockContext;
58a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    @Mock
59a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private SiteMapManager mSiteMapManager;
60a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang    private Context mContext;
6152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
627fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    SQLiteDatabase mDb;
637fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
647fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Before
657fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void setUp() {
66a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        MockitoAnnotations.initMocks(this);
677fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mContext = RuntimeEnvironment.application;
68a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        FakeFeatureFactory.setupForTest(mMockContext);
69a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        FakeFeatureFactory factory =
70a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
71a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang        when(factory.searchFeatureProvider.getSiteMapManager())
72a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang                .thenReturn(mSiteMapManager);
737fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
747fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        setUpDb();
757fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
767fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
777fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @After
787fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void cleanUp() {
79012028e3a320dd3eeca3c39f0e47c1c40697bdf6Fan Zhang        DatabaseTestUtils.clearDb(mContext);
807fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
817fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
827fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
837fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchTitle() {
846efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "title", mSiteMapManager);
853f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
863f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        verify(mSiteMapManager, times(2)).buildBreadCrumb(eq(mContext), anyString(), anyString());
877fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
887fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
897fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
907fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchSummary() {
916efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "summary",
926efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager);
933f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
947fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
957fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
967fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
977fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchKeywords() {
986efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "keywords",
996efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager);
1003f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
1017fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1027fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1037fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
1047fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    public void testMatchEntries() {
1056efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "entries",
1066efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager);
1073f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(2);
1087fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1097fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
11152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseWord_matchesNonPrefix() {
1127fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("Data usage");
1136efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "usage", mSiteMapManager);
1147fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1157fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1167fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1177fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
11852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesWordNoDash() {
1197fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("wi-fi calling");
1206efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "wifi", mSiteMapManager);
1217fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1227fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1237fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1247fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
12552b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesWordWithDash() {
1267fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("priorités seulment");
1276efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "priorités",
1286efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager);
1297fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1307fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1317fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1327fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
13352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesWordWithoutDash() {
1347fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("priorités seulment");
1356efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "priorites",
1366efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager);
1377fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1387fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1397fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
1407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    @Test
14152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseDash_matchesEntireQueryWithoutDash() {
1427fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        insertSpecialCase("wi-fi calling");
1436efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "wifi calling",
1446efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze                mSiteMapManager);
1457fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
1467fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
1477fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
148314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
14952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCasePrefix_matchesPrefixOfEntry() {
150314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Photos");
1516efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "pho", mSiteMapManager);
152314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
153314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
154314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
155314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
156314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    public void testSpecialCasePrefix_DoesNotMatchNonPrefixSubstring() {
157314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Photos");
1586efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "hot", mSiteMapManager);
159314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(0);
160314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
161314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
162314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
16352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefix_matchesPrefixOfEntry() {
164314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
1656efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "Apps", mSiteMapManager);
166314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
167314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
168314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
169314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
17052b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefix_matchesSecondWordPrefixOfEntry() {
171314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
1726efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "Not", mSiteMapManager);
173314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
174314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
175314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
176314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
177314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfFirstEntry() {
178314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
1796efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "pp", mSiteMapManager);
180314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(0);
181314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
182314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
183314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
184314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfSecondEntry() {
185314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps Notifications");
1866efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "tion", mSiteMapManager);
187314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(0);
188314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
189314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
190314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
19152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfEntry() {
192314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps & Notifications");
1936efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "App", mSiteMapManager);
194314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
195314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
196314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
197314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    @Test
19852b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    public void testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfSecondEntry() {
199314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        insertSpecialCase("Apps & Notifications");
2006efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "No", mSiteMapManager);
201314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
202314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze    }
203314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze
204b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze    @Test
2056efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze    public void testResultMatchedByMultipleQueries_duplicatesRemoved() {
2066efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        String key = "durr";
2076efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        insertSameValueAllFieldsCase(key);
2086efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, key, null);
20952b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
2106efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        assertThat(loader.loadInBackground().size()).isEqualTo(1);
21152b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    }
21252b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze
21352b6f8887bb67b43066739c244e89e54caf2718bMatthew Fritze    @Test
214683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad    public void testSpecialCaseTwoWords_multipleResults() {
215b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        final String caseOne = "Apple pear";
216b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        final String caseTwo = "Banana apple";
217b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        insertSpecialCase(caseOne);
218b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        insertSpecialCase(caseTwo);
2196efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "App", null);
220683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad        Set<? extends SearchResult> results = loader.loadInBackground();
221683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad        Set<CharSequence> expectedTitles = new HashSet<>(Arrays.asList(caseOne, caseTwo));
222683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad        Set<CharSequence> actualTitles = new HashSet<>();
223683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad        for (SearchResult result : results) {
224683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad            actualTitles.add(result.title);
225683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad        }
226683ccdf97bd8b3ed30b7014f2df17227cff92561Soroosh Mariooryad        assertThat(actualTitles).isEqualTo(expectedTitles);
227b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze    }
228b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze
2297fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    private void insertSpecialCase(String specialCase) {
2307fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        String normalized = DatabaseIndexingUtils.normalizeHyphen(specialCase);
2317fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        normalized = DatabaseIndexingUtils.normalizeString(normalized);
2323746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final ResultPayload payload = new ResultPayload(new Intent());
2337fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
2347fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        ContentValues values = new ContentValues();
235b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, normalized.hashCode());
2367fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
2377fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
2387fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, specialCase);
2397fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, normalized);
2407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "");
2417fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "");
2427fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "");
2437fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "");
2447fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "");
2457fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "");
2467fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
2477fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
2487fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
2497fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
2507fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
2517fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
2527fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
2533f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
2546efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, normalized.hashCode());
2557fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
2567fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
2573746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, ResultPayloadUtils.marshall(payload));
2587fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
2597fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
2607fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
2617fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
2627fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    private void setUpDb() {
2633746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        final byte[] payload = ResultPayloadUtils.marshall(new ResultPayload(new Intent()));
2643746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze
2657fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        ContentValues values = new ContentValues();
2666efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, 1);
2677fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
2687fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
2697fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "alpha_title");
2707fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "alpha title");
2717fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "alpha_summary");
272314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "alpha summary");
2737fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "alpha_summary");
274314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "alpha summary");
275314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "alpha entries");
276314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "alpha keywords");
2777fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
2787fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
2797fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
2807fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
2817fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
2827fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
2837fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
2843f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
2856efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power_0");
2867fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
2877fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
2883746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, payload);
2897fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
2907fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
2917fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
2927fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values = new ContentValues();
2936efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, 2);
2947fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
2957fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
2967fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "bravo_title");
2977fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "bravo title");
2987fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "bravo_summary");
299314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "bravo summary");
3007fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "bravo_summary");
301314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "bravo summary");
302314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "bravo entries");
303314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "bravo keywords");
3047fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
3057fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
3067fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
3077fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
3087fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
3097fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
3107fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
3113f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
3126efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power_1");
3137fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
3147fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
3153746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, payload);
3167fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
3177fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
3187fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values = new ContentValues();
3196efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, 3);
3207fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
3217fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
3227fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "charlie_title");
3237fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "charlie title");
3247fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "charlie_summary");
325314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "charlie summary");
3267fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "charlie_summary");
327314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "charlie summary");
328314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "charlie entries");
329314b09eb4b6bff2626604155e4273956aeaa24b5Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "charlie keywords");
3307fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
3317fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze                "com.android.settings.gestures.GestureSettings");
3327fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
3337fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
3347fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
3357fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
3367fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
3373f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, false);
3386efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power_2");
3397fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
3407fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
3413746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, payload);
3427fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze
3437fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
3447fda314980107337d2eb9237ed00e997ae4ee345Matthew Fritze    }
3456efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze
3466efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze    private void insertSameValueAllFieldsCase(String key) {
3476efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        final ResultPayload payload = new ResultPayload(new Intent());
3486efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze
3496efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        ContentValues values = new ContentValues();
3506efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DOCID, key.hashCode());
3516efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
3526efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
3536efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, key);
3546efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, key);
3556efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, key);
3566efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, key);
3576efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, key);
3586efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, key);
3596efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, key);
3606efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, key);
3616efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, key);
3626efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
3636efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, key);
3646efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
3656efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, key);
3666efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
3676efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
3686efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, key.hashCode());
3696efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
3706efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
3716efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, ResultPayloadUtils.marshall(payload));
3726efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze
3736efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze        mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
3746efea1e624bb4b48290000cfdb82df224a31b81dMatthew Fritze    }
375b7b286cb893268bec38584acdf5696f68675ecedMatthew Fritze}