• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 package com.android.settings.search2;
19 
20 import android.content.ContentValues;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.database.sqlite.SQLiteDatabase;
24 
25 import com.android.settings.SettingsRobolectricTestRunner;
26 import com.android.settings.TestConfig;
27 import com.android.settings.dashboard.SiteMapManager;
28 import com.android.settings.search.IndexDatabaseHelper;
29 import com.android.settings.testutils.DatabaseTestUtils;
30 import com.android.settings.testutils.FakeFeatureFactory;
31 
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.Answers;
37 import org.mockito.Mock;
38 import org.mockito.MockitoAnnotations;
39 import org.robolectric.RuntimeEnvironment;
40 import org.robolectric.annotation.Config;
41 
42 import java.util.ArrayList;
43 import java.util.List;
44 
45 import static com.google.common.truth.Truth.assertThat;
46 import static org.mockito.Matchers.anyString;
47 import static org.mockito.Matchers.eq;
48 import static org.mockito.Mockito.times;
49 import static org.mockito.Mockito.verify;
50 import static org.mockito.Mockito.when;
51 
52 @RunWith(SettingsRobolectricTestRunner.class)
53 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
54 public class DatabaseResultLoaderTest {
55 
56     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
57     private Context mMockContext;
58     @Mock
59     private SiteMapManager mSiteMapManager;
60     private Context mContext;
61     private DatabaseResultLoader loader;
62 
63     private final String titleOne = "titleOne";
64     private final String titleTwo = "titleTwo";
65     private final String titleThree = "titleThree";
66     private final String titleFour = "titleFour";
67     private final String summaryOne = "summaryOne";
68     private final String summaryTwo = "summaryTwo";
69     private final String summaryThree = "summaryThree";
70 
71     SQLiteDatabase mDb;
72 
73     @Before
setUp()74     public void setUp() {
75         MockitoAnnotations.initMocks(this);
76         mContext = RuntimeEnvironment.application;
77         FakeFeatureFactory.setupForTest(mMockContext);
78         FakeFeatureFactory factory =
79                 (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
80         when(factory.searchFeatureProvider.getSiteMapManager())
81                 .thenReturn(mSiteMapManager);
82         mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
83         setUpDb();
84     }
85 
86     @After
cleanUp()87     public void cleanUp() {
88         DatabaseTestUtils.clearDb();
89     }
90 
91     @Test
testMatchTitle()92     public void testMatchTitle() {
93         loader = new DatabaseResultLoader(mContext, "title", mSiteMapManager);
94         assertThat(loader.loadInBackground().size()).isEqualTo(2);
95         verify(mSiteMapManager, times(2)).buildBreadCrumb(eq(mContext), anyString(), anyString());
96     }
97 
98     @Test
testMatchSummary()99     public void testMatchSummary() {
100         loader = new DatabaseResultLoader(mContext, "summary", mSiteMapManager);
101         assertThat(loader.loadInBackground().size()).isEqualTo(2);
102     }
103 
104     @Test
testMatchKeywords()105     public void testMatchKeywords() {
106         loader = new DatabaseResultLoader(mContext, "keywords", mSiteMapManager);
107         assertThat(loader.loadInBackground().size()).isEqualTo(2);
108     }
109 
110     @Test
testMatchEntries()111     public void testMatchEntries() {
112         loader = new DatabaseResultLoader(mContext, "entries", mSiteMapManager);
113         assertThat(loader.loadInBackground().size()).isEqualTo(2);
114     }
115 
116     @Test
testSpecialCaseWord_matchesNonPrefix()117     public void testSpecialCaseWord_matchesNonPrefix() {
118         insertSpecialCase("Data usage");
119         loader = new DatabaseResultLoader(mContext, "usage", mSiteMapManager);
120         assertThat(loader.loadInBackground().size()).isEqualTo(1);
121     }
122 
123     @Test
testSpecialCaseSpace_matches()124     public void testSpecialCaseSpace_matches() {
125         insertSpecialCase("space");
126         loader = new DatabaseResultLoader(mContext, " space ", mSiteMapManager);
127         assertThat(loader.loadInBackground().size()).isEqualTo(1);
128     }
129 
130     @Test
testSpecialCaseDash_matchesWordNoDash()131     public void testSpecialCaseDash_matchesWordNoDash() {
132         insertSpecialCase("wi-fi calling");
133         loader = new DatabaseResultLoader(mContext, "wifi", mSiteMapManager);
134         assertThat(loader.loadInBackground().size()).isEqualTo(1);
135     }
136 
137     @Test
testSpecialCaseDash_matchesWordWithDash()138     public void testSpecialCaseDash_matchesWordWithDash() {
139         insertSpecialCase("priorités seulment");
140         loader = new DatabaseResultLoader(mContext, "priorités", mSiteMapManager);
141         assertThat(loader.loadInBackground().size()).isEqualTo(1);
142     }
143 
144     @Test
testSpecialCaseDash_matchesWordWithoutDash()145     public void testSpecialCaseDash_matchesWordWithoutDash() {
146         insertSpecialCase("priorités seulment");
147         loader = new DatabaseResultLoader(mContext, "priorites", mSiteMapManager);
148         assertThat(loader.loadInBackground().size()).isEqualTo(1);
149     }
150 
151     @Test
testSpecialCaseDash_matchesEntireQueryWithoutDash()152     public void testSpecialCaseDash_matchesEntireQueryWithoutDash() {
153         insertSpecialCase("wi-fi calling");
154         loader = new DatabaseResultLoader(mContext, "wifi calling", mSiteMapManager);
155         assertThat(loader.loadInBackground().size()).isEqualTo(1);
156     }
157 
158     @Test
testSpecialCasePrefix_matchesPrefixOfEntry()159     public void testSpecialCasePrefix_matchesPrefixOfEntry() {
160         insertSpecialCase("Photos");
161         loader = new DatabaseResultLoader(mContext, "pho", mSiteMapManager);
162         assertThat(loader.loadInBackground().size()).isEqualTo(1);
163     }
164 
165     @Test
testSpecialCasePrefix_DoesNotMatchNonPrefixSubstring()166     public void testSpecialCasePrefix_DoesNotMatchNonPrefixSubstring() {
167         insertSpecialCase("Photos");
168         loader = new DatabaseResultLoader(mContext, "hot", mSiteMapManager);
169         assertThat(loader.loadInBackground().size()).isEqualTo(0);
170     }
171 
172     @Test
testSpecialCaseMultiWordPrefix_matchesPrefixOfEntry()173     public void testSpecialCaseMultiWordPrefix_matchesPrefixOfEntry() {
174         insertSpecialCase("Apps Notifications");
175         loader = new DatabaseResultLoader(mContext, "Apps", mSiteMapManager);
176         assertThat(loader.loadInBackground().size()).isEqualTo(1);
177     }
178 
179     @Test
testSpecialCaseMultiWordPrefix_matchesSecondWordPrefixOfEntry()180     public void testSpecialCaseMultiWordPrefix_matchesSecondWordPrefixOfEntry() {
181         insertSpecialCase("Apps Notifications");
182         loader = new DatabaseResultLoader(mContext, "Not", mSiteMapManager);
183         assertThat(loader.loadInBackground().size()).isEqualTo(1);
184     }
185 
186     @Test
testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfFirstEntry()187     public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfFirstEntry() {
188         insertSpecialCase("Apps Notifications");
189         loader = new DatabaseResultLoader(mContext, "pp", mSiteMapManager);
190         assertThat(loader.loadInBackground().size()).isEqualTo(0);
191     }
192 
193     @Test
testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfSecondEntry()194     public void testSpecialCaseMultiWordPrefix_DoesNotMatchMatchesPrefixOfSecondEntry() {
195         insertSpecialCase("Apps Notifications");
196         loader = new DatabaseResultLoader(mContext, "tion", mSiteMapManager);
197         assertThat(loader.loadInBackground().size()).isEqualTo(0);
198     }
199 
200     @Test
testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfEntry()201     public void testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfEntry() {
202         insertSpecialCase("Apps & Notifications");
203         loader = new DatabaseResultLoader(mContext, "App", mSiteMapManager);
204         assertThat(loader.loadInBackground().size()).isEqualTo(1);
205     }
206 
207     @Test
testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfSecondEntry()208     public void testSpecialCaseMultiWordPrefixWithSpecial_matchesPrefixOfSecondEntry() {
209         insertSpecialCase("Apps & Notifications");
210         loader = new DatabaseResultLoader(mContext, "No", mSiteMapManager);
211         assertThat(loader.loadInBackground().size()).isEqualTo(1);
212     }
213 
214     @Test
testDeDupe_noDuplicates_originalListReturn()215     public void testDeDupe_noDuplicates_originalListReturn() {
216         // Three elements with unique titles and summaries
217         List<SearchResult> results = new ArrayList();
218         IntentPayload intentPayload = new IntentPayload(new Intent());
219 
220         SearchResult.Builder builder = new SearchResult.Builder();
221         builder.addTitle(titleOne)
222                 .addSummary(summaryOne)
223                 .addPayload(intentPayload);
224         SearchResult resultOne = builder.build();
225         results.add(resultOne);
226 
227         builder.addTitle(titleTwo)
228                 .addSummary(summaryTwo);
229         SearchResult resultTwo = builder.build();
230         results.add(resultTwo);
231 
232         builder.addTitle(titleThree)
233                 .addSummary(summaryThree);
234         SearchResult resultThree = builder.build();
235         results.add(resultThree);
236 
237         loader = new DatabaseResultLoader(mContext, "", null);
238         loader.removeDuplicates(results);
239         assertThat(results.size()).isEqualTo(3);
240         assertThat(results.get(0)).isEqualTo(resultOne);
241         assertThat(results.get(1)).isEqualTo(resultTwo);
242         assertThat(results.get(2)).isEqualTo(resultThree);
243     }
244 
245     @Test
testDeDupe_oneDuplicate_duplicateRemoved()246     public void testDeDupe_oneDuplicate_duplicateRemoved() {
247         List<SearchResult> results = new ArrayList();
248         IntentPayload intentPayload = new IntentPayload(new Intent());
249 
250         SearchResult.Builder builder = new SearchResult.Builder();
251         builder.addTitle(titleOne)
252                 .addSummary(summaryOne)
253                 .addRank(0)
254                 .addPayload(intentPayload);
255         SearchResult resultOne = builder.build();
256         results.add(resultOne);
257 
258         // Duplicate of the first element
259         builder.addTitle(titleOne)
260                 .addSummary(summaryOne)
261                 .addRank(1);
262         SearchResult resultTwo = builder.build();
263         results.add(resultTwo);
264 
265         // Unique
266         builder.addTitle(titleThree)
267                 .addSummary(summaryThree);
268         SearchResult resultThree = builder.build();
269         results.add(resultThree);
270 
271         loader = new DatabaseResultLoader(mContext, "", null);
272         loader.removeDuplicates(results);
273         assertThat(results.size()).isEqualTo(2);
274         assertThat(results.get(0)).isEqualTo(resultOne);
275         assertThat(results.get(1)).isEqualTo(resultThree);
276     }
277 
278     @Test
testDeDupe_firstDupeInline_secondDuplicateRemoved()279     public void testDeDupe_firstDupeInline_secondDuplicateRemoved() {
280         List<SearchResult> results = new ArrayList();
281         InlineSwitchPayload inlinePayload = new InlineSwitchPayload("", 0,
282                 null);
283         IntentPayload intentPayload = new IntentPayload(new Intent());
284 
285         SearchResult.Builder builder = new SearchResult.Builder();
286         // Inline result
287         builder.addTitle(titleOne)
288                 .addSummary(summaryOne)
289                 .addRank(0)
290                 .addPayload(inlinePayload);
291         SearchResult resultOne = builder.build();
292         results.add(resultOne);
293 
294         // Duplicate of first result, but Intent Result. Should be removed.
295         builder.addTitle(titleOne)
296                 .addSummary(summaryOne)
297                 .addRank(1)
298                 .addPayload(intentPayload);
299         SearchResult resultTwo = builder.build();
300         results.add(resultTwo);
301 
302         // Unique
303         builder.addTitle(titleThree)
304                 .addSummary(summaryThree);
305         SearchResult resultThree = builder.build();
306         results.add(resultThree);
307 
308         loader = new DatabaseResultLoader(mContext, "", null);
309         loader.removeDuplicates(results);
310         assertThat(results.size()).isEqualTo(2);
311         assertThat(results.get(0)).isEqualTo(resultOne);
312         assertThat(results.get(1)).isEqualTo(resultThree);
313     }
314 
315     @Test
testDeDupe_secondDupeInline_firstDuplicateRemoved()316     public void testDeDupe_secondDupeInline_firstDuplicateRemoved() {
317         /*
318          * Create a list as follows:
319          * (5) Intent Four
320          * (4) Inline Two
321          * (3) Intent Three
322          * (2) Intent Two
323          * (1) Intent One
324          *
325          * After removing duplicates:
326          * (4) Intent Four
327          * (3) Inline Two
328          * (2) Intent Three
329          * (1) Intent One
330          */
331         List<SearchResult> results = new ArrayList();
332         InlineSwitchPayload inlinePayload = new InlineSwitchPayload("", 0,
333                 null);
334         IntentPayload intentPayload = new IntentPayload(new Intent());
335 
336 
337         SearchResult.Builder builder = new SearchResult.Builder();
338         // Intent One
339         builder.addTitle(titleOne)
340                 .addSummary(summaryOne)
341                 .addPayload(intentPayload);
342         SearchResult resultOne = builder.build();
343         results.add(resultOne);
344 
345         // Intent Two
346         builder.addTitle(titleTwo)
347                 .addSummary(summaryTwo)
348                 .addPayload(intentPayload);
349         SearchResult resultTwo = builder.build();
350         results.add(resultTwo);
351 
352         // Intent Three
353         builder.addTitle(titleThree)
354                 .addSummary(summaryThree);
355         SearchResult resultThree = builder.build();
356         results.add(resultThree);
357 
358         // Inline Two
359         builder.addTitle(titleTwo)
360                 .addSummary(summaryTwo)
361                 .addPayload(inlinePayload);
362         SearchResult resultFour = builder.build();
363         results.add(resultFour);
364 
365         // Intent Four
366         builder.addTitle(titleFour)
367                 .addSummary(summaryOne)
368                 .addPayload(intentPayload);
369         SearchResult resultFive = builder.build();
370         results.add(resultFive);
371 
372         loader = new DatabaseResultLoader(mContext, "", null);
373         loader.removeDuplicates(results);
374         assertThat(results.size()).isEqualTo(4);
375         assertThat(results.get(0)).isEqualTo(resultOne);
376         assertThat(results.get(1)).isEqualTo(resultThree);
377         assertThat(results.get(2)).isEqualTo(resultFour);
378         assertThat(results.get(3)).isEqualTo(resultFive);
379     }
380 
381     @Test
testDeDupe_threeDuplicates_onlyOneStays()382     public void testDeDupe_threeDuplicates_onlyOneStays() {
383         /*
384          * Create a list as follows:
385          * (3) Intent One
386          * (2) Intent One
387          * (1) Intent One
388          *
389          * After removing duplicates:
390          * (1) Intent One
391          */
392         List<SearchResult> results = new ArrayList();
393         IntentPayload intentPayload = new IntentPayload(new Intent());
394 
395         SearchResult.Builder builder = new SearchResult.Builder();
396         // Intent One
397         builder.addTitle(titleOne)
398                 .addSummary(summaryOne)
399                 .addPayload(intentPayload);
400         SearchResult resultOne = builder.build();
401         results.add(resultOne);
402 
403         // Intent Two
404         builder.addTitle(titleOne)
405                 .addSummary(summaryOne)
406                 .addPayload(intentPayload);
407         SearchResult resultTwo = builder.build();
408         results.add(resultTwo);
409 
410         // Intent Three
411         builder.addTitle(titleOne)
412                 .addSummary(summaryOne)
413                 .addPayload(intentPayload);
414         SearchResult resultThree = builder.build();
415         results.add(resultThree);
416 
417         loader = new DatabaseResultLoader(mContext, "", null);
418         loader.removeDuplicates(results);
419         assertThat(results.size()).isEqualTo(1);
420     }
421 
422     @Test
testSpecialCaseTwoWords_firstWordMatches_ranksHigher()423     public void testSpecialCaseTwoWords_firstWordMatches_ranksHigher() {
424         final String caseOne = "Apple pear";
425         final String caseTwo = "Banana apple";
426         insertSpecialCase(caseOne);
427         insertSpecialCase(caseTwo);
428         loader = new DatabaseResultLoader(mContext, "App", null);
429         List<? extends SearchResult> results = loader.loadInBackground();
430 
431         assertThat(results.get(0).title).isEqualTo(caseOne);
432         assertThat(results.get(1).title).isEqualTo(caseTwo);
433         assertThat(results.get(0).rank).isLessThan(results.get(1).rank);
434     }
435 
insertSpecialCase(String specialCase)436     private void insertSpecialCase(String specialCase) {
437         String normalized = DatabaseIndexingUtils.normalizeHyphen(specialCase);
438         normalized = DatabaseIndexingUtils.normalizeString(normalized);
439 
440         ContentValues values = new ContentValues();
441         values.put(IndexDatabaseHelper.IndexColumns.DOCID, normalized.hashCode());
442         values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
443         values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
444         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, specialCase);
445         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, normalized);
446         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "");
447         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "");
448         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "");
449         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "");
450         values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "");
451         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "");
452         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
453                 "com.android.settings.gestures.GestureSettings");
454         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
455         values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
456         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
457         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
458         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
459         values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
460         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
461         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
462         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
463         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null);
464 
465         mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
466     }
467 
setUpDb()468     private void setUpDb() {
469         ContentValues values = new ContentValues();
470         values.put(IndexDatabaseHelper.IndexColumns.DOCID, 0);
471         values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
472         values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
473         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "alpha_title");
474         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "alpha title");
475         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "alpha_summary");
476         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "alpha summary");
477         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "alpha_summary");
478         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "alpha summary");
479         values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "alpha entries");
480         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "alpha keywords");
481         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
482                 "com.android.settings.gestures.GestureSettings");
483         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
484         values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
485         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
486         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
487         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
488         values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
489         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
490         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
491         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
492         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null);
493 
494         mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
495 
496         values = new ContentValues();
497         values.put(IndexDatabaseHelper.IndexColumns.DOCID, 1);
498         values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
499         values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
500         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "bravo_title");
501         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "bravo title");
502         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "bravo_summary");
503         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "bravo summary");
504         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "bravo_summary");
505         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "bravo summary");
506         values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "bravo entries");
507         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "bravo keywords");
508         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
509                 "com.android.settings.gestures.GestureSettings");
510         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
511         values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
512         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
513         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
514         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
515         values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
516         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
517         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
518         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
519         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null);
520         mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
521 
522         values = new ContentValues();
523         values.put(IndexDatabaseHelper.IndexColumns.DOCID, 2);
524         values.put(IndexDatabaseHelper.IndexColumns.LOCALE, "en-us");
525         values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1);
526         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, "charlie_title");
527         values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, "charlie title");
528         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, "charlie_summary");
529         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, "charlie summary");
530         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, "charlie_summary");
531         values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, "charlie summary");
532         values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, "charlie entries");
533         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, "charlie keywords");
534         values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME,
535                 "com.android.settings.gestures.GestureSettings");
536         values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves");
537         values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, "");
538         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
539         values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
540         values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
541         values.put(IndexDatabaseHelper.IndexColumns.ENABLED, false);
542         values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
543         values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
544         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
545         values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null);
546 
547         mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values);
548     }
549 }