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 }