Home | History | Annotate | Download | only in search2
      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
     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
     87     public void cleanUp() {
     88         DatabaseTestUtils.clearDb();
     89     }
     90 
     91     @Test
     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
     99     public void testMatchSummary() {
    100         loader = new DatabaseResultLoader(mContext, "summary", mSiteMapManager);
    101         assertThat(loader.loadInBackground().size()).isEqualTo(2);
    102     }
    103 
    104     @Test
    105     public void testMatchKeywords() {
    106         loader = new DatabaseResultLoader(mContext, "keywords", mSiteMapManager);
    107         assertThat(loader.loadInBackground().size()).isEqualTo(2);
    108     }
    109 
    110     @Test
    111     public void testMatchEntries() {
    112         loader = new DatabaseResultLoader(mContext, "entries", mSiteMapManager);
    113         assertThat(loader.loadInBackground().size()).isEqualTo(2);
    114     }
    115 
    116     @Test
    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
    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
    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
    138     public void testSpecialCaseDash_matchesWordWithDash() {
    139         insertSpecialCase("priorits seulment");
    140         loader = new DatabaseResultLoader(mContext, "priorits", mSiteMapManager);
    141         assertThat(loader.loadInBackground().size()).isEqualTo(1);
    142     }
    143 
    144     @Test
    145     public void testSpecialCaseDash_matchesWordWithoutDash() {
    146         insertSpecialCase("priorits seulment");
    147         loader = new DatabaseResultLoader(mContext, "priorites", mSiteMapManager);
    148         assertThat(loader.loadInBackground().size()).isEqualTo(1);
    149     }
    150 
    151     @Test
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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 
    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 
    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 }