DatabaseIndexingManagerTest.java revision 4f198813ed0d513ddb1461315bae1c881904ebf0
11dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze/* 2ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze * Copyright (C) 2017 The Android Open Source Project 31dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * 41dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * Licensed under the Apache License, Version 2.0 (the "License"); 51dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * you may not use this file except in compliance with the License. 61dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * You may obtain a copy of the License at 71dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * 81dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * http://www.apache.org/licenses/LICENSE-2.0 91dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * 101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * Unless required by applicable law or agreed to in writing, software 111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * distributed under the License is distributed on an "AS IS" BASIS, 121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * See the License for the specific language governing permissions and 141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * limitations under the License. 151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * 161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze */ 171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1804615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritzepackage com.android.settings.search2; 191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 20ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.annotation.NonNull; 21ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.annotation.Nullable; 22ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.content.ContentProvider; 23ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.content.ContentValues; 241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.content.Context; 25ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.content.Intent; 26ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.content.pm.PackageManager; 27ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.content.pm.ProviderInfo; 28ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.content.pm.ResolveInfo; 291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.database.Cursor; 30ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.database.MatrixCursor; 311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.database.sqlite.SQLiteDatabase; 32ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.net.Uri; 33a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritzeimport android.os.Build; 341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.provider.SearchIndexableResource; 35ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport android.util.ArrayMap; 361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.R; 371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.SettingsRobolectricTestRunner; 381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.TestConfig; 3904615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritzeimport com.android.settings.search.IndexDatabaseHelper; 4004615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritzeimport com.android.settings.search.SearchIndexableRaw; 41a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhangimport com.android.settings.testutils.DatabaseTestUtils; 42ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport com.android.settings.testutils.shadow.ShadowDatabaseIndexingUtils; 43ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport com.android.settings.testutils.shadow.ShadowRunnableAsyncTask; 441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.After; 451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.Before; 461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.Test; 471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.runner.RunWith; 48ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport org.mockito.Mock; 49ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport org.mockito.MockitoAnnotations; 50ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport org.robolectric.RuntimeEnvironment; 511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.robolectric.annotation.Config; 52ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport org.robolectric.shadows.ShadowContentResolver; 531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.ArrayList; 551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.Arrays; 561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.HashMap; 57ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport java.util.HashSet; 581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.List; 591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.Locale; 603f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritzeimport java.util.Map; 61ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport java.util.Set; 621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 634f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritzeimport static android.provider.SearchIndexablesContract.INDEXABLES_RAW_COLUMNS; 641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport static com.google.common.truth.Truth.assertThat; 65ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Matchers.any; 66ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Matchers.anyInt; 67ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Matchers.anyList; 68ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Matchers.anyMap; 69ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Matchers.anyString; 70ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Mockito.doReturn; 714f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritzeimport static org.mockito.Mockito.mock; 721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport static org.mockito.Mockito.spy; 73ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Mockito.times; 74ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Mockito.verify; 75ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritzeimport static org.mockito.Mockito.when; 761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze@RunWith(SettingsRobolectricTestRunner.class) 78ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, 79a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze shadows = {ShadowRunnableAsyncTask.class}) 801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzepublic class DatabaseIndexingManagerTest { 811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String localeStr = "en_US"; 821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 833f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze private final int rank = 8; 841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String title = "title\u2011title"; 851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String updatedTitle = "title-title"; 861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String normalizedTitle = "titletitle"; 871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String summaryOn = "summary\u2011on"; 881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String updatedSummaryOn = "summary-on"; 891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String normalizedSummaryOn = "summaryon"; 901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String summaryOff = "summary\u2011off"; 91a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang private final String updatedSummaryOff = "summary-off"; 921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String normalizedSummaryOff = "summaryoff"; 931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String entries = "entries"; 941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String keywords = "keywords, keywordss, keywordsss"; 951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String spaceDelimittedKeywords = "keywords keywordss keywordsss"; 961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String screenTitle = "screen title"; 971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String className = "class name"; 981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final int iconResId = 0xff; 991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String action = "action"; 1001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String targetPackage = "target package"; 1011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String targetClass = "target class"; 1021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String packageName = "package name"; 1031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final String key = "key"; 1041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final int userId = -1; 1051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private final boolean enabled = true; 1061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 107ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private final String AUTHORITY_ONE = "authority"; 108ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private final String PACKAGE_ONE = "com.android.settings"; 109ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 110ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private final String TITLE_ONE = "title one"; 111ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private final String TITLE_TWO = "title two"; 112ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private final String KEY_ONE = "key one"; 113ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private final String KEY_TWO = "key two"; 114ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private Context mContext; 116ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private DatabaseIndexingManager mManager; 1181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private SQLiteDatabase mDb; 1191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 120ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Mock 121ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private PackageManager mPackageManager; 122ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Before 1241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze public void setUp() { 125ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze MockitoAnnotations.initMocks(this); 126ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mContext = spy(RuntimeEnvironment.application); 127a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze mManager = spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE)); 1281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase(); 129ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 130ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze doReturn(mPackageManager).when(mContext).getPackageManager(); 1311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 1321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @After 1341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze public void cleanUp() { 135a8b089db8a6d495a18dc3ad91d3bd84b042fb004Fan Zhang DatabaseTestUtils.clearDb(); 1361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 1371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 1391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze public void testDatabaseSchema() { 1401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor dbCursor = mDb.query("prefs_index", null, null, null, null, null, null); 1411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze List<String> columnNames = new ArrayList<>(Arrays.asList(dbCursor.getColumnNames())); 1421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Note that docid is not included. 143a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang List<String> expColumnNames = new ArrayList<>(Arrays.asList(new String[]{ 1441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "locale", 1451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_rank", 1461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_title", 1471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_title_normalized", 1481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_summary_on", 1491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_summary_on_normalized", 1501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_summary_off", 1511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_summary_off_normalized", 1521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_entries", 1531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_keywords", 1541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "class_name", 1551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "screen_title", 1561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "intent_action", 1571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "intent_target_package", 1581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "intent_target_class", 1591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "icon", 1601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "enabled", 1611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "data_key_reference", 1621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "user_id", 1631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "payload_type", 1641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze "payload" 1651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze })); 1661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Prevent database schema regressions 1671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(columnNames).containsAllIn(expColumnNames); 1681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 1691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Tests for the flow: IndexOneRaw -> UpdateOneRowWithFilteredData -> UpdateOneRow 1711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 173ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testInsertRawColumn_rowInserted() { 1741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableRaw raw = getFakeRaw(); 1751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */); 1761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 1771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getCount()).isEqualTo(1); 1781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 1791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 181ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testInsertRawColumn_rowMatches() { 1821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableRaw raw = getFakeRaw(); 1831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */); 1841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 1851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze cursor.moveToPosition(0); 1861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 1871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 1881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 1891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 1901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(raw.rank); 1911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 1921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(2)).isEqualTo(updatedTitle); 1931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 1941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(3)).isEqualTo(normalizedTitle); 1951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 1961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn); 1971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 1981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn); 1991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off 2001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEqualTo(updatedSummaryOff); 2011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary off normalized 2021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEqualTo(normalizedSummaryOff); 2031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries 2041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isEqualTo(raw.entries); 2051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 2061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(9)).isEqualTo(spaceDelimittedKeywords); 2071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 2081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(10)).isEqualTo(raw.screenTitle); 2091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 2101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)).isEqualTo(raw.className); 2111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 2121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(12)).isEqualTo(raw.iconResId); 2131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 2141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isEqualTo(raw.intentAction); 2151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 2161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isEqualTo(raw.intentTargetPackage); 2171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 2181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isEqualTo(raw.intentTargetClass); 2191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 2201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(raw.enabled); 2211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 2221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isNotNull(); 2231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 2241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(raw.userId); 2251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 2261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 2271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload 2281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 2291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 2301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 232ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testInsertRawColumn_mismatchedLocale_noRowInserted() { 2331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableRaw raw = getFakeRaw("ca-fr"); 2341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */); 2351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 2361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getCount()).isEqualTo(0); 2371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 2381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Tests for the flow: IndexOneResource -> IndexFromResource -> 2401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // UpdateOneRowWithFilteredData -> UpdateOneRow 2411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 2431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze public void testNullResource_NothingInserted() { 2441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, null /* searchIndexableResource */, 245248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang new HashMap<>()); 2461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 2471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getCount()).isEqualTo(0); 2481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 2491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 2511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze public void testAddResource_RowsInserted() { 252dc9a82f5b017f430aa7d50f12450082f1bdc871eFan Zhang SearchIndexableResource resource = getFakeResource(R.xml.display_settings); 253ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 2541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 2556138f1ab31e90f59c725e4d4738c008c3fa30391Andrew Sapperstein assertThat(cursor.getCount()).isEqualTo(18); 2561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 2571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 259ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testAddResource_withNIKs_rowsInsertedDisabled() { 260dc9a82f5b017f430aa7d50f12450082f1bdc871eFan Zhang SearchIndexableResource resource = getFakeResource(R.xml.display_settings); 261d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling // Only add 2 of 16 items to be disabled. 262d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling String[] keys = {"brightness", "wallpaper"}; 263ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Map<String, Set<String>> niks = getNonIndexableKeys(keys); 264ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 2653f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, niks); 2663f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze 2673f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null); 2683f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getCount()).isEqualTo(2); 2693f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null); 2706138f1ab31e90f59c725e4d4738c008c3fa30391Andrew Sapperstein assertThat(cursor.getCount()).isEqualTo(16); 2713f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze } 2723f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze 2733f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze @Test 274ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testAddResourceHeader_rowsMatch() { 2751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableResource resource = getFakeResource(R.xml.application_settings); 276ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 2771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null); 2791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze cursor.moveToPosition(1); 2801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 2811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 2821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 2831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 2841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 2851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 286015a50bef99a23a8c795486b99021a5784d65d64Doris Ling assertThat(cursor.getString(2)).isEqualTo("App info"); 2871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 288015a50bef99a23a8c795486b99021a5784d65d64Doris Ling assertThat(cursor.getString(3)).isEqualTo("app info"); 2891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 2901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(4)).isEqualTo("Manage apps, set up quick launch shortcuts"); 2911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 2921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(5)).isEqualTo("manage apps, set up quick launch shortcuts"); 2931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off - only on for checkbox preferences 2941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEmpty(); 2951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary off normalized - only on for checkbox preferences 2961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEmpty(); 2971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries - only on for list preferences 2981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isNull(); 2991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 3001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(9)).isEmpty(); 3011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 302015a50bef99a23a8c795486b99021a5784d65d64Doris Ling assertThat(cursor.getString(10)).isEqualTo("App info"); 3031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 3041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)).isEqualTo(className); 3051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 306d0b42b03229225571ed060a377a0f72264058db6Matthew Fritze assertThat(cursor.getInt(12)).isEqualTo(0); 3071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 3081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isEqualTo(action); 3091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 3101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isEqualTo(targetPackage); 3111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 3121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isEqualTo(targetClass); 3131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 3141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 3151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 3161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isEqualTo("applications_settings"); 3171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 3181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 3191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 3201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 3211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload - should be updated to real payloads as controllers are added 3221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 3231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 3241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 3251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 326ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testAddResource_withChildFragment_shouldUpdateSiteMapDb() { 327f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam // FIXME: This test was failing. (count = 6 at the end) 328f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam 329f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// SearchIndexableResource resource = getFakeResource(R.xml.network_and_internet); 330f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// mManager.indexOneSearchIndexableData(mDb, localeStr, resource, 331f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// new HashMap<>()); 332f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// Cursor query = mDb.query(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, SITE_MAP_COLUMNS, 333f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// null, null, null, null, null); 334f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// query.moveToPosition(-1); 335f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// int count = 0; 336f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// while (query.moveToNext()) { 337f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// count++; 338f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// assertThat(query.getString(query.getColumnIndex(SiteMapColumns.PARENT_CLASS))) 339f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// .isEqualTo(className); 340f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// assertThat(query.getString(query.getColumnIndex(SiteMapColumns.PARENT_TITLE))) 341f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// .isEqualTo(mContext.getString(R.string.network_dashboard_title)); 342f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// assertThat(query.getString(query.getColumnIndex(SiteMapColumns.CHILD_CLASS))) 343f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// .isNotEmpty(); 344f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// assertThat(query.getString(query.getColumnIndex(SiteMapColumns.CHILD_TITLE))) 345f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// .isNotEmpty(); 346f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// } 347f04ff76af05823619f1c522f22d8193edbb56bfaMaurice Lam// assertThat(count).isEqualTo(5); 348a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang } 349a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang 350a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang @Test 351ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testAddResource_customSetting_rowsMatch() { 352d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings); 353ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 354248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang final String prefTitle = 355248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang mContext.getString(R.string.fingerprint_swipe_for_notifications_title); 356248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang final String prefSummary = 357248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang mContext.getString(R.string.fingerprint_swipe_for_notifications_summary); 358248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang Cursor cursor = mDb.rawQuery( 359248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang "SELECT * FROM prefs_index where data_title='" + prefTitle + "'", null); 360248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang cursor.moveToFirst(); 3611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 3621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 3631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 3641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 3651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 3661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 367248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang assertThat(cursor.getString(2)).isEqualTo(prefTitle); 3681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 369248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang assertThat(cursor.getString(3)).isEqualTo(prefTitle.toLowerCase()); 3701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 371248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang assertThat(cursor.getString(4)).isEqualTo(prefSummary); 3721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 373248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang assertThat(cursor.getString(5)).isEqualTo(prefSummary.toLowerCase()); 3741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off - only on for checkbox preferences 3751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEmpty(); 3761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary off normalized - only on for checkbox preferences 3771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEmpty(); 3781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries - only on for list preferences 3791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isNull(); 3801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 3811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(9)).isEmpty(); 3821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 383248d95c61809b253eb16fb1d597ed5e2f83ada78Fan Zhang assertThat(cursor.getString(10)).isEqualTo( 384d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling mContext.getString(R.string.fingerprint_swipe_for_notifications_title)); 3851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 3861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)).isEqualTo(className); 3871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 3881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(12)).isEqualTo(iconResId); 3891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 3901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isEqualTo(action); 3911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 3921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isEqualTo(targetPackage); 3931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 3941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isEqualTo(targetClass); 3951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 3961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 3971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 3981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isEqualTo("gesture_swipe_down_fingerprint"); 3991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 4001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 4011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 4021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 4031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload - should be updated to real payloads as controllers are added 4041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 4051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 4061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 4071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 408ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testAddResource_checkboxPreference_rowsMatch() { 4091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableResource resource = getFakeResource(R.xml.application_settings); 410ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 4111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 4121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze /* Should return 6 results, with the following titles: 4131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * Advanced Settings, Apps, Manage Apps, Preferred install location, Running Services 4141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze */ 4151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null); 4161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze cursor.moveToPosition(0); 4171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 4181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 4191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 4201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 4211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 4221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(2)).isEqualTo("Advanced settings"); 4231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 4241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(3)).isEqualTo("advanced settings"); 4251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 4261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(4)).isEqualTo("Enable more settings options"); 4271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 4281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(5)).isEqualTo("enable more settings options"); 4291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off 4301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEqualTo("Enable more settings options"); 4311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off 4321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEqualTo("enable more settings options"); 4331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries - only on for list preferences 4341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isNull(); 4351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 4361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(9)).isEmpty(); 4371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 438015a50bef99a23a8c795486b99021a5784d65d64Doris Ling assertThat(cursor.getString(10)).isEqualTo("App info"); 4391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 4401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)).isEqualTo(className); 4411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 4421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(12)).isEqualTo(iconResId); 4431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 4441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isEqualTo(action); 4451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 4461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isEqualTo(targetPackage); 4471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 4481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isEqualTo(targetClass); 4491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 4501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 4511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 4521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isEqualTo("toggle_advanced_settings"); 4531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 4541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 4551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 4561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 4571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload - should be updated to real payloads as controllers are added 4581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 4591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 4601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 4611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 462ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testAddResource_listPreference_rowsMatch() { 4631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableResource resource = getFakeResource(R.xml.application_settings); 464ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 4651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 4661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null); 4671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze cursor.moveToPosition(3); 4681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 4691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 4701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 4711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 4721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 4731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(2)).isEqualTo("Preferred install location"); 4741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 4751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(3)).isEqualTo("preferred install location"); 4761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 477a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang assertThat(cursor.getString(4)).isEqualTo( 478a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang "Change the preferred installation location for new apps"); 4791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 480a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang assertThat(cursor.getString(5)).isEqualTo( 481a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang "change the preferred installation location for new apps"); 4821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off - only on for checkbox preferences 4831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEmpty(); 4841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary off normalized - only on for checkbox preferences 4851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEmpty(); 4861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries - only on for list preferences 4871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isEqualTo("Internal device storage|Removable SD card|" + 488a96b11f65d9f29dd4037da85e12f5cf9dcfa0176Fan Zhang "Let the system decide|"); 4891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 4901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(9)).isEmpty(); 4911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 492015a50bef99a23a8c795486b99021a5784d65d64Doris Ling assertThat(cursor.getString(10)).isEqualTo("App info"); 4931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 4941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)).isEqualTo(className); 4951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 4961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(12)).isEqualTo(iconResId); 4971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 4981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isEqualTo(action); 4991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 5001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isEqualTo(targetPackage); 5011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 5021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isEqualTo(targetClass); 5031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 5041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 5051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 5061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isEqualTo("app_install_location"); 5071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 5081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 5091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 5101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 5111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload - should be updated to real payloads as controllers are added 5121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 5131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 5141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 5151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Tests for the flow: IndexOneResource -> IndexFromProvider -> IndexFromResource -> 5161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // UpdateOneRowWithFilteredData -> UpdateOneRow 5171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 5181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 519ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testResourceProvider_rowInserted() { 520d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings); 5211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze resource.xmlResId = 0; 5221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze resource.className = "com.android.settings.display.ScreenZoomSettings"; 5231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 524ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 5251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 5261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getCount()).isEqualTo(1); 5271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 5281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 5291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 530ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testResourceProvider_rowMatches() { 531d299b03f28fd23973b32931c3ae9a254a37d474dDoris Ling SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings); 5321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze resource.xmlResId = 0; 5331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze resource.className = "com.android.settings.display.ScreenZoomSettings"; 5341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 535ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 5361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 5371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze cursor.moveToPosition(0); 5381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 5391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 5401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 5411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 5421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 5431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 5441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(2)).isEqualTo("Display size"); 5451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 5461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(3)).isEqualTo("display size"); 5471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 5481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(4)).isEmpty(); 5491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 5501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(5)).isEmpty(); 5511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off - only on for checkbox preferences 5521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEmpty(); 5531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary off normalized - only on for checkbox preferences 5541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEmpty(); 5551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries - only on for list preferences 5561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isNull(); 5571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 5581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(9)).isEqualTo("display density screen zoom scale scaling"); 5591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 5601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(10)).isEqualTo("Display size"); 5611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 5621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)) 5631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze .isEqualTo("com.android.settings.display.ScreenZoomSettings"); 5641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 5651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(12)).isEqualTo(iconResId); 5661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 5671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isNull(); 5681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 5691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isNull(); 5701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 5711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isNull(); 5721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 5731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 5741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 5751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isNull(); 5761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 5771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 5781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 5791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 5801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload - should be updated to real payloads as controllers are added 5811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 5821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 5831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 5841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 585ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testResourceProvider_resourceRowInserted() { 5863f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze SearchIndexableResource resource = getFakeResource(0); 5871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze resource.className = "com.android.settings.LegalSettings"; 5881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 589ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 5901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 5913f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getCount()).isEqualTo(6); 5921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 5931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 5941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze @Test 595ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testResourceProvider_resourceRowMatches() { 5963f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze SearchIndexableResource resource = getFakeResource(0); 5973f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze resource.className = "com.android.settings.display.ScreenZoomSettings"; 5981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 599ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); 6001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null); 6011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze cursor.moveToPosition(0); 6021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 6031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Locale 6041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 6051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Rank 6061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 6071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data Title 6083f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getString(2)).isEqualTo("Display size"); 6091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Normalized Title 6103f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getString(3)).isEqualTo("display size"); 6111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On 6121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(4)).isEmpty(); 6131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary On Normalized 6141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(5)).isEmpty(); 6151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary Off - only on for checkbox preferences 6161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(6)).isEmpty(); 6171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Summary off normalized - only on for checkbox preferences 6181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(7)).isEmpty(); 6191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Entries - only on for list preferences 6201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(8)).isNull(); 6211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Keywords 6223f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getString(9)).isEqualTo( 6233f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze "display density screen zoom scale scaling"); 6241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Screen Title 6253f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getString(10)).isEqualTo("Display size"); 6261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Class Name 6271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(11)) 6283f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze .isEqualTo("com.android.settings.display.ScreenZoomSettings"); 6291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Icon 6301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(12)).isEqualTo(iconResId); 6311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Intent Action 6321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(13)).isNull(); 6331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Package 6341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(14)).isNull(); 6351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Target Class 6361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(15)).isNull(); 6371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Enabled 6381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 6391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Data ref key 6401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getString(17)).isNull(); 6411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // User Id 6421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 6431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload Type - default is 0 6441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 6451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Payload - should be updated to real payloads as controllers are added 6461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze assertThat(cursor.getBlob(20)).isNull(); 6471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 6481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 6493f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze @Test 650ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testResourceProvider_disabledResource_rowsInserted() { 6513f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze SearchIndexableResource resource = getFakeResource(0); 6523f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze resource.className = "com.android.settings.LegalSettings"; 6533f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze 6543f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze mManager.indexOneSearchIndexableData(mDb, localeStr, resource, 655ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze new HashMap<String, Set<String>>()); 6563f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze 6573f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null); 6583f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getCount()).isEqualTo(2); 6593f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null); 6603f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze assertThat(cursor.getCount()).isEqualTo(4); 6613f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze } 6623f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze 66304615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze @Test 664ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testResource_withTitleAndSettingName_titleNotInserted() { 66504615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze SearchIndexableResource resource = getFakeResource(R.xml.swipe_to_notification_settings); 66604615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze mManager.indexFromResource(mDb, localeStr, resource, new ArrayList<String>()); 66704615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze 66804615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE" + 66904615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze " enabled = 1", null); 67004615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze assertThat(cursor.getCount()).isEqualTo(1); 67104615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze } 67204615bc1b6a10edad13754c9e6be1197ad150901Matthew Fritze 673ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Test new public indexing flow 674ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 675ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 676a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Config(shadows = {ShadowDatabaseIndexingUtils.class,}) 677ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testPerformIndexing_fullIndex_getsDataFromProviders() { 678ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze DummyProvider provider = new DummyProvider(); 679ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze provider.onCreate(); 680a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze ShadowContentResolver.registerProvider(AUTHORITY_ONE, provider); 681ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 682ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Test that Indexables are added for Full indexing 683ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt())) 684ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze .thenReturn(getDummyResolveInfo()); 685ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 686ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze DatabaseIndexingManager manager = 687a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE)); 688a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze doReturn(true).when(manager).isFullIndex(anyString(), anyString()); 689ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 690ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze manager.performIndexing(); 691ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 692a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze verify(manager).addIndexablesFromRemoteProvider(PACKAGE_ONE, AUTHORITY_ONE); 693a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze verify(manager).updateDatabase(true /* isFullIndex */, Locale.getDefault().toString()); 694a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze } 695ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 696a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Test 697a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Config(shadows = {ShadowDatabaseIndexingUtils.class,}) 698a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze public void testPerformIndexing_incrementalIndex_noDataAdded() { 699a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze DummyProvider provider = new DummyProvider(); 700a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze provider.onCreate(); 701a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze ShadowContentResolver.registerProvider(AUTHORITY_ONE, provider); 702ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 703a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Test that Indexables are added for Full indexing 704a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt())) 705a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze .thenReturn(getDummyResolveInfo()); 706a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 707a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze DatabaseIndexingManager manager = 708a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE)); 709a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze doReturn(false).when(manager).isFullIndex(anyString(), anyString()); 710a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 711a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze manager.mDataToProcess.dataToUpdate.clear(); 712a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 713a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze manager.performIndexing(); 714a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 715a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze verify(manager, times(0)).addDataToDatabase(any(SQLiteDatabase.class), anyString(), 716a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze anyList(), anyMap()); 717a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze verify(manager, times(0)).addIndexablesFromRemoteProvider(PACKAGE_ONE, AUTHORITY_ONE); 718a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze verify(manager).updateDataInDatabase(any(SQLiteDatabase.class), anyMap()); 719ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 720ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 721ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 722a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Config(shadows = {ShadowDatabaseIndexingUtils.class,}) 723a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze public void testPerformIndexing_localeChanged_databaseDropped() { 724a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze DummyProvider provider = new DummyProvider(); 725a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze provider.onCreate(); 726a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze ShadowContentResolver.registerProvider(AUTHORITY_ONE, provider); 727a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 728a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Test that Indexables are added for Full indexing 729a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt())) 730a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze .thenReturn(getDummyResolveInfo()); 731a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 732a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Initialize the Manager 733a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze DatabaseIndexingManager manager = 734a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE)); 735a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze doReturn(true).when(manager).isFullIndex(anyString(), anyString()); 736a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 737a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Insert data point which will be dropped 738a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze final String oldTitle = "This is French"; 739a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze insertSpecialCase(oldTitle, true, "key"); 740a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 741a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Add a data point to be added by the indexing 742a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze SearchIndexableRaw raw = new SearchIndexableRaw(mContext); 743a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze final String newTitle = "This is English"; 744a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze raw.title = newTitle; 745a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze manager.mDataToProcess.dataToUpdate.add(raw); 746a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 747a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze manager.performIndexing(); 748a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 749a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Assert that the New Title is inserted 750a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze final Cursor newCursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE data_title = '" + 751a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze newTitle + "'", null); 752a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze assertThat(newCursor.getCount()).isEqualTo(1); 753a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 754a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Assert that the Old Title is no longer in the database, since it was dropped 755a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze final Cursor oldCursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE data_title = '" + 756a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze oldTitle + "'", null); 757a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze assertThat(oldCursor.getCount()).isEqualTo(0); 758a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze } 759a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 760a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Test 761a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Config(shadows = {ShadowDatabaseIndexingUtils.class,}) 762a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze public void testPerformIndexing_onOta_FullIndex() { 763ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze DummyProvider provider = new DummyProvider(); 764ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze provider.onCreate(); 765ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze ShadowContentResolver.registerProvider( 766ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze AUTHORITY_ONE, provider 767ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze ); 768ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 769ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Test that Indexables are added for Full indexing 770ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt())) 771ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze .thenReturn(getDummyResolveInfo()); 772ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 773ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze DatabaseIndexingManager manager = 774a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE)); 775a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze doReturn(true).when(manager).isFullIndex(anyString(), anyString()); 776ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 777ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze manager.performIndexing(); 778ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 779a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze verify(manager).updateDatabase(true /* isFullIndex */, Locale.getDefault().toString()); 780a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze } 781ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 782a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Test 783a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze @Config(shadows = {ShadowDatabaseIndexingUtils.class,}) 784a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze public void testPerformIndexing_onOta_buildNumberIsCached() { 785a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze DummyProvider provider = new DummyProvider(); 786a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze provider.onCreate(); 787a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze ShadowContentResolver.registerProvider( 788a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze AUTHORITY_ONE, provider 789a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze ); 790a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 791a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze // Test that Indexables are added for Full indexing 792a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze when(mPackageManager.queryIntentContentProviders(any(Intent.class), anyInt())) 793a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze .thenReturn(getDummyResolveInfo()); 794a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 795a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze DatabaseIndexingManager manager = 796a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze spy(new DatabaseIndexingManager(mContext, PACKAGE_ONE)); 797a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze doReturn(true).when(manager).isFullIndex(anyString(), anyString()); 798a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 799a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze manager.performIndexing(); 800a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze 801a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze assertThat(IndexDatabaseHelper.getInstance(mContext).isBuildIndexed(mContext, 802a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze Build.FINGERPRINT)).isTrue(); 803ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 804ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 805ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 806ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testFullUpdatedDatabase_noData_addDataToDatabaseNotCalled() { 807a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze mManager.updateDatabase(true /* isFullIndex */, localeStr); 808ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.mDataToProcess.dataToUpdate.clear(); 809ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze verify(mManager, times(0)).addDataToDatabase(any(SQLiteDatabase.class), anyString(), 810ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze anyList(), anyMap()); 811ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 812ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 813ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 814ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testFullUpdatedDatabase_updatedDataInDatabaseNotCalled() { 815a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze mManager.updateDatabase(true /* isFullIndex */, localeStr); 816ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze verify(mManager, times(0)).updateDataInDatabase(any(SQLiteDatabase.class), anyMap()); 817ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 818ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 819ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 8208a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze public void testLocaleUpdated_afterIndexing_localeNotAdded() { 821a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze mManager.updateDatabase(true /* isFullIndex */, localeStr); 822ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(IndexDatabaseHelper.getInstance(mContext) 8238a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze .isLocaleAlreadyIndexed(mContext, localeStr)).isFalse(); 8248a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze } 8258a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze 8268a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze @Test 8278a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze public void testLocaleUpdated_afterFullIndexing_localeAdded() { 8288a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze mManager.performIndexing(); 8298a42b074a7ccaf8325b571d261fda5b9a494a059Matthew Fritze assertThat(IndexDatabaseHelper.getInstance(mContext) 830ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze .isLocaleAlreadyIndexed(mContext, localeStr)).isTrue(); 831ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 832ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 833ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 834ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testUpdateDatabase_newEligibleData_addedToDatabase() { 835ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Test that addDataToDatabase is called when dataToUpdate is non-empty 836ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.mDataToProcess.dataToUpdate.add(getFakeRaw()); 837a0d03178d094a58108f963c66f2d9886b72b8113Matthew Fritze mManager.updateDatabase(true /* isFullIndex */, localeStr); 838ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 839ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); 840ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze cursor.moveToPosition(0); 841ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 842ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Locale 843ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(0)).isEqualTo(localeStr); 844ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Data Rank 845ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getInt(1)).isEqualTo(rank); 846ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Data Title 847ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(2)).isEqualTo(updatedTitle); 848ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Normalized Title 849ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(3)).isEqualTo(normalizedTitle); 850ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Summary On 851ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn); 852ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Summary On Normalized 853ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn); 854ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Summary Off 855ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(6)).isEqualTo(updatedSummaryOff); 856ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Summary off normalized 857ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(7)).isEqualTo(normalizedSummaryOff); 858ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Entries 859ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(8)).isEqualTo(entries); 860ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Keywords 861ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(9)).isEqualTo(spaceDelimittedKeywords); 862ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Screen Title 863ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(10)).isEqualTo(screenTitle); 864ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Class Name 865ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(11)).isEqualTo(className); 866ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Icon 867ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getInt(12)).isEqualTo(iconResId); 868ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Intent Action 869ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(13)).isEqualTo(action); 870ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Target Package 871ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(14)).isEqualTo(targetPackage); 872ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Target Class 873ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(15)).isEqualTo(targetClass); 874ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Enabled 875ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getInt(16) == 1).isEqualTo(enabled); 876ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Data ref key 877ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(17)).isNotNull(); 878ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // User Id 879ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getInt(18)).isEqualTo(userId); 880ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Payload Type - default is 0 881ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getInt(19)).isEqualTo(0); 882ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Payload 883ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getBlob(20)).isNull(); 884ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 885ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 886ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 887ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public void testUpdateDataInDatabase_enabledResultsAreNonIndexable_becomeDisabled() { 888ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Both results are enabled, and then TITLE_ONE gets disabled. 889ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze final boolean enabled = true; 890ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze insertSpecialCase(TITLE_ONE, enabled, KEY_ONE); 891ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze insertSpecialCase(TITLE_TWO, enabled, KEY_TWO); 892ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Map<String, Set<String>> niks = new ArrayMap<>(); 893ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Set<String> keys = new HashSet<>(); 894ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze keys.add(KEY_ONE); 895ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze niks.put(targetPackage, keys); 896ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 897ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.updateDataInDatabase(mDb, niks); 898ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 899ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null); 900ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze cursor.moveToPosition(0); 901ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 902ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(2)).isEqualTo(TITLE_ONE); 903ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 904ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 905ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Test 9064f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze public void testUpdateDataInDatabase_disabledResultsAreIndexable_becomeEnabled() { 907ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // Both results are initially disabled, and then TITLE_TWO gets enabled. 908ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze final boolean enabled = false; 909ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze insertSpecialCase(TITLE_ONE, enabled, KEY_ONE); 910ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze insertSpecialCase(TITLE_TWO, enabled, KEY_TWO); 911ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Map<String, Set<String>> niks = new ArrayMap<>(); 912ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Set<String> keys = new HashSet<>(); 913ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze keys.add(KEY_ONE); 914ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze niks.put(targetPackage, keys); 915ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 916ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mManager.updateDataInDatabase(mDb, niks); 917ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 918ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null); 919ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze cursor.moveToPosition(0); 920ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 921ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze assertThat(cursor.getString(2)).isEqualTo(TITLE_TWO); 922ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 923ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 9244f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze @Test 9254f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze @Config(shadows = {ShadowContentResolver.class}) 9264f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze public void testEmptyNonIndexableKeys_emptyDataKeyResources_addedToDatabase() { 9274f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze insertSpecialCase(TITLE_ONE, true /* enabled */, null /* dataReferenceKey */); 9284f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze 9294f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze mManager.updateDatabase(false, localeStr); 9304f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze 9314f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null); 9324f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze cursor.moveToPosition(0); 9334f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze assertThat(cursor.getCount()).isEqualTo(1); 9344f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze assertThat(cursor.getString(2)).isEqualTo(TITLE_ONE); 9354f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze } 9361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze // Util functions 9371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 9381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private SearchIndexableRaw getFakeRaw() { 9391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze return getFakeRaw(localeStr); 9401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 9411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 9421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private SearchIndexableRaw getFakeRaw(String localeStr) { 9431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableRaw data = new SearchIndexableRaw(mContext); 9441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.locale = new Locale(localeStr); 9451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.rank = rank; 9461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.title = title; 9471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.summaryOn = summaryOn; 9481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.summaryOff = summaryOff; 9491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.entries = entries; 9501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.keywords = keywords; 9511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.screenTitle = screenTitle; 9521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.className = className; 9531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.packageName = packageName; 9541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.iconResId = iconResId; 9551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.intentAction = action; 9561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.intentTargetPackage = targetPackage; 9571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.intentTargetClass = targetClass; 9581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.key = key; 9591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.userId = userId; 9601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze data.enabled = enabled; 9611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze return data; 9621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 9631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze 9641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze private SearchIndexableResource getFakeResource(int xml) { 9651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze SearchIndexableResource sir = new SearchIndexableResource(mContext); 9661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.rank = rank; 9671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.xmlResId = xml; 9681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.className = className; 9691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.packageName = packageName; 9701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.iconResId = iconResId; 9711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.intentAction = action; 9721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.intentTargetPackage = targetPackage; 9731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.intentTargetClass = targetClass; 9741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze sir.enabled = enabled; 9751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze return sir; 9761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze } 9773f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze 978ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private Map<String, Set<String>> getNonIndexableKeys(String[] keys) { 979ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Map<String, Set<String>> niks = new HashMap<>(); 980ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze Set<String> keysList = new HashSet<>(); 981ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze keysList.addAll(Arrays.asList(keys)); 9823f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze niks.put(packageName, keysList); 9833f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze return niks; 9843f3b547e4a2eeeb362d9b7c98b05f9a244cd754eMatthew Fritze } 985ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 986ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private List<ResolveInfo> getDummyResolveInfo() { 987ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze List<ResolveInfo> infoList = new ArrayList<>(); 988ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze ResolveInfo info = new ResolveInfo(); 989ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze info.providerInfo = new ProviderInfo(); 990ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze info.providerInfo.exported = true; 991ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze info.providerInfo.authority = AUTHORITY_ONE; 992ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze info.providerInfo.packageName = PACKAGE_ONE; 993ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze infoList.add(info); 994ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 995ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return infoList; 996ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 997ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 998ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // TODO move this method and its counterpart in CursorToSearchResultConverterTest into 999ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze // a util class with public fields to assert values. 1000ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private Cursor getDummyCursor() { 10014f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS); 1002ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze final String BLANK = ""; 1003ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1004ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze ArrayList<String> item = 10054f198813ed0d513ddb1461315bae1c881904ebf0Matthew Fritze new ArrayList<>(INDEXABLES_RAW_COLUMNS.length); 1006ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add("42"); // Rank 1007ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(TITLE_ONE); // Title 1008ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // Summary on 1009ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // summary off 1010ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // entries 1011ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // keywords 1012ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // screen title 1013ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // classname 1014ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add("123"); // Icon 1015ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // Intent action 1016ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // target package 1017ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(BLANK); // target class 1018ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add(KEY_ONE); // Key 1019ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze item.add("-1"); // userId 1020ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze cursor.addRow(item); 1021ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1022ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return cursor; 1023ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1024ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1025ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private void insertSpecialCase(String specialCase, boolean enabled, String key) { 1026ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1027ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze ContentValues values = new ContentValues(); 1028ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DOCID, specialCase.hashCode()); 1029ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.LOCALE, localeStr); 1030ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_RANK, 1); 1031ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE, specialCase); 1032ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED, ""); 1033ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON, ""); 1034ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED, ""); 1035ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF, ""); 1036ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_OFF_NORMALIZED, ""); 1037ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_ENTRIES, ""); 1038ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS, ""); 1039ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, ""); 1040ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, "Moves"); 1041ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.INTENT_ACTION, ""); 1042ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, targetPackage); 1043ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, ""); 1044ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.ICON, ""); 1045ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.ENABLED, enabled); 1046ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, key); 1047ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0); 1048ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0); 1049ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD, (String) null); 1050ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1051ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, values); 1052ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1053ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1054ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze private class DummyProvider extends ContentProvider { 1055ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1056ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Override 1057ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public boolean onCreate() { 1058ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return false; 1059ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1060ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1061ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Override 1062ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public Cursor query(@NonNull Uri uri, @Nullable String[] projection, 1063ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Nullable String selection, @Nullable String[] selectionArgs, 1064ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Nullable String sortOrder) { 1065ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze if (uri.toString().contains("xml")) { 1066ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return null; 1067ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1068ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return getDummyCursor(); 1069ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1070ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1071ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Override 1072ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public String getType(@NonNull Uri uri) { 1073ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return null; 1074ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1075ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1076ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Override 1077ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) { 1078ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return null; 1079ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1080ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1081ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Override 1082ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public int delete(@NonNull Uri uri, @Nullable String selection, 1083ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Nullable String[] selectionArgs) { 1084ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return 0; 1085ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1086ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze 1087ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Override 1088ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze public int update(@NonNull Uri uri, @Nullable ContentValues values, 1089ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze @Nullable String selection, @Nullable String[] selectionArgs) { 1090ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze return 0; 1091ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1092ebb5b7f73d24e060ffb838d0fc4c6301eb900923Matthew Fritze } 1093a9831d40d081cc8c7ca32891e64c09b5e1d19abbPhilip Quinn} 1094