DatabaseIndexingManagerTest.java revision 1dec073528352fcf036c5ba52d5d535ba32c472c
11dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze/*
21dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze * Copyright (C) 2016 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
181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzepackage com.android.settings.search;
191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.content.Context;
211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.database.Cursor;
221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.database.sqlite.SQLiteDatabase;
231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport android.provider.SearchIndexableResource;
241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.R;
251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.SettingsRobolectricTestRunner;
261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.TestConfig;
271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport com.android.settings.search2.DatabaseIndexingManager;
281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.After;
301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.Before;
311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.Test;
321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.junit.runner.RunWith;
331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.robolectric.annotation.Config;
341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport org.robolectric.shadows.ShadowApplication;
351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.lang.reflect.Field;
371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.ArrayList;
381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.Arrays;
391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.HashMap;
401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.List;
411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport java.util.Locale;
421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport static com.google.common.truth.Truth.assertThat;
441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzeimport static org.mockito.Mockito.spy;
451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze@RunWith(SettingsRobolectricTestRunner.class)
471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritzepublic class DatabaseIndexingManagerTest {
491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String localeStr = "en_US";
501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final int rank = 42;
521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String title = "title\u2011title";
531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String updatedTitle = "title-title";
541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String normalizedTitle = "titletitle";
551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String summaryOn = "summary\u2011on";
561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String updatedSummaryOn = "summary-on";
571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String normalizedSummaryOn = "summaryon";
581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String summaryOff = "summary\u2011off";
591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String updatedSummaryOff ="summary-off";
601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String normalizedSummaryOff = "summaryoff";
611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String entries = "entries";
621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String keywords = "keywords, keywordss, keywordsss";
631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String spaceDelimittedKeywords = "keywords keywordss keywordsss";
641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String screenTitle = "screen title";
651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String className = "class name";
661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final int iconResId = 0xff;
671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String action = "action";
681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String targetPackage = "target package";
691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String targetClass = "target class";
701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String packageName = "package name";
711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final String key = "key";
721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final int userId = -1;
731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private final boolean enabled = true;
741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private Context mContext;
761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private DatabaseIndexingManager mManager;
771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private SQLiteDatabase mDb;
781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Before
801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void setUp() {
811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mContext = ShadowApplication.getInstance().getApplicationContext();
821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager = spy(new DatabaseIndexingManager(mContext, mContext.getPackageName()));
831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @After
871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void cleanUp() {
881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Field instance;
891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Class clazz = IndexDatabaseHelper.class;
901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        try {
911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze            instance = clazz.getDeclaredField("sSingleton");
921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze            instance.setAccessible(true);
931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze            instance.set(null, null);
941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        } catch (Exception e) {
951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze            throw new RuntimeException();
961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        }
971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
1001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testDatabaseSchema() {
1011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor dbCursor = mDb.query("prefs_index", null, null, null, null, null, null);
1021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        List<String> columnNames = new ArrayList<>(Arrays.asList(dbCursor.getColumnNames()));
1031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Note that docid is not included.
1041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        List<String> expColumnNames = new ArrayList<>(Arrays.asList(new String[ ]{
1051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "locale",
1061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_rank",
1071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_title",
1081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_title_normalized",
1091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_summary_on",
1101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_summary_on_normalized",
1111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_summary_off",
1121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_summary_off_normalized",
1131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_entries",
1141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_keywords",
1151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "class_name",
1161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "screen_title",
1171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "intent_action",
1181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "intent_target_package",
1191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "intent_target_class",
1201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "icon",
1211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "enabled",
1221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "data_key_reference",
1231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "user_id",
1241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "payload_type",
1251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "payload"
1261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        }));
1271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Prevent database schema regressions
1281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(columnNames).containsAllIn(expColumnNames);
1291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
1301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
1311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    // Tests for the flow: IndexOneRaw -> UpdateOneRowWithFilteredData -> UpdateOneRow
1321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
1331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
1341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testInsertRawColumn_RowInserted() {
1351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableRaw raw = getFakeRaw();
1361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */);
1371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
1381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getCount()).isEqualTo(1);
1391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
1401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
1411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
1421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testInsertRawColumn_RowMatches() {
1431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableRaw raw = getFakeRaw();
1441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */);
1451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
1461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(0);
1471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
1481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
1491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
1501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
1511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(raw.rank);
1521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
1531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo(updatedTitle);
1541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
1551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo(normalizedTitle);
1561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
1571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEqualTo(updatedSummaryOn);
1581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
1591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEqualTo(normalizedSummaryOn);
1601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off
1611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEqualTo(updatedSummaryOff);
1621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary off normalized
1631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEqualTo(normalizedSummaryOff);
1641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries
1651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isEqualTo(raw.entries);
1661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
1671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEqualTo(spaceDelimittedKeywords);
1681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
1691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo(raw.screenTitle);
1701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
1711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11)).isEqualTo(raw.className);
1721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
1731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(raw.iconResId);
1741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
1751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isEqualTo(raw.intentAction);
1761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
1771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isEqualTo(raw.intentTargetPackage);
1781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
1791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isEqualTo(raw.intentTargetClass);
1801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
1811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(raw.enabled);
1821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
1831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isNotNull();
1841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
1851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(raw.userId);
1861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
1871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
1881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload
1891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
1901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
1911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
1921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
1931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testInsertRawColumnMismatchedLocale_NoRowInserted() {
1941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableRaw raw = getFakeRaw("ca-fr");
1951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, raw, null /* Non-indexable keys */);
1961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
1971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getCount()).isEqualTo(0);
1981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
1991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    // Tests for the flow: IndexOneResource -> IndexFromResource ->
2011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    //                     UpdateOneRowWithFilteredData -> UpdateOneRow
2021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
2041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testNullResource_NothingInserted() {
2051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, null /* searchIndexableResource */,
2061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
2071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
2081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getCount()).isEqualTo(0);
2091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
2101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
2121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testAddResource_RowsInserted() {
2131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
2141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
2151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
2161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
2171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getCount()).isEqualTo(6);
2181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
2191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
2211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testAddResourceHeader_RowsMatch() {
2221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
2231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
2241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
2251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
2271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(1);
2281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
2301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
2311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
2321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(rank);
2331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
2341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo("Apps");
2351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
2361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo("apps");
2371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
2381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEqualTo("Manage apps, set up quick launch shortcuts");
2391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
2401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEqualTo("manage apps, set up quick launch shortcuts");
2411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off - only on for checkbox preferences
2421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEmpty();
2431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary off normalized - only on for checkbox preferences
2441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEmpty();
2451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries - only on for list preferences
2461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isNull();
2471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
2481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEmpty();
2491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
2501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo("Apps");
2511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
2521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11)).isEqualTo(className);
2531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
2541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
2551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
2561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isEqualTo(action);
2571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
2581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isEqualTo(targetPackage);
2591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
2601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isEqualTo(targetClass);
2611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
2621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(enabled);
2631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
2641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isEqualTo("applications_settings");
2651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
2661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(userId);
2671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
2681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
2691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload - should be updated to real payloads as controllers are added
2701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
2711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
2721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
2741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testAddResourceCustomSetting_RowsMatch() {
2751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
2761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
2771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
2781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
2801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(0);
2811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
2821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
2831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
2841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
2851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(rank);
2861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
2871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo("Swipe for notifications");
2881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
2891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo("swipe for notifications");
2901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
2911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEqualTo("To check your notifications, " +
2921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "swipe down on the fingerprint sensor on the back of your phone.");
2931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
2941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEqualTo("to check your notifications, " +
2951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                "swipe down on the fingerprint sensor on the back of your phone.");
2961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off - only on for checkbox preferences
2971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEmpty();
2981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary off normalized - only on for checkbox preferences
2991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEmpty();
3001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries - only on for list preferences
3011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isNull();
3021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
3031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEmpty();
3041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
3051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo("Gestures");
3061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
3071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11)).isEqualTo(className);
3081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
3091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
3101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
3111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isEqualTo(action);
3121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
3131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isEqualTo(targetPackage);
3141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
3151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isEqualTo(targetClass);
3161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
3171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(enabled);
3181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
3191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isEqualTo("gesture_swipe_down_fingerprint");
3201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
3211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(userId);
3221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
3231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
3241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload - should be updated to real payloads as controllers are added
3251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
3261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
3271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
3281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
3291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testAddResourceCheckboxPreference_RowsMatch() {
3301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
3311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
3321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
3331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
3341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        /* Should return 6 results, with the following titles:
3351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze         * Advanced Settings, Apps, Manage Apps, Preferred install location, Running Services
3361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze         */
3371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
3381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(0);
3391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
3401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
3411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
3421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(rank);
3431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
3441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo("Advanced settings");
3451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
3461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo("advanced settings");
3471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
3481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEqualTo("Enable more settings options");
3491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
3501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEqualTo("enable more settings options");
3511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off
3521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEqualTo("Enable more settings options");
3531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off
3541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEqualTo("enable more settings options");
3551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries - only on for list preferences
3561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isNull();
3571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
3581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEmpty();
3591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
3601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo("Apps");
3611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
3621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11)).isEqualTo(className);
3631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
3641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
3651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
3661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isEqualTo(action);
3671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
3681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isEqualTo(targetPackage);
3691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
3701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isEqualTo(targetClass);
3711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
3721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(enabled);
3731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
3741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isEqualTo("toggle_advanced_settings");
3751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
3761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(userId);
3771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
3781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
3791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload - should be updated to real payloads as controllers are added
3801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
3811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
3821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
3831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
3841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testAddResourceListPreference_RowsMatch() {
3851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
3861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
3871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
3881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
3891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
3901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(3);
3911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
3921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
3931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
3941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(rank);
3951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
3961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo("Preferred install location");
3971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
3981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo("preferred install location");
3991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
4001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEqualTo("Change the preferred installation location for new apps");
4011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
4021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEqualTo("change the preferred installation location for new apps");
4031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off - only on for checkbox preferences
4041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEmpty();
4051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary off normalized - only on for checkbox preferences
4061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEmpty();
4071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries - only on for list preferences
4081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isEqualTo("Internal device storage|Removable SD card|" +
4091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                        "Let the system decide|");
4101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
4111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEmpty();
4121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
4131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo("Apps");
4141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
4151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11)).isEqualTo(className);
4161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
4171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
4181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
4191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isEqualTo(action);
4201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
4211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isEqualTo(targetPackage);
4221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
4231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isEqualTo(targetClass);
4241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
4251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(enabled);
4261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
4271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isEqualTo("app_install_location");
4281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
4291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(userId);
4301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
4311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
4321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload - should be updated to real payloads as controllers are added
4331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
4341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
4351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
4361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    // Tests for the flow: IndexOneResource -> IndexFromProvider -> IndexFromResource ->
4371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    //                     UpdateOneRowWithFilteredData -> UpdateOneRow
4381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
4391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
4401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testResourceProvider_RowInserted() {
4411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
4421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.xmlResId = 0;
4431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.className = "com.android.settings.display.ScreenZoomSettings";
4441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
4451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
4461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
4471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
4481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getCount()).isEqualTo(1);
4491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
4501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
4511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
4521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testResourceProvider_Matches() {
4531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
4541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.xmlResId = 0;
4551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.className = "com.android.settings.display.ScreenZoomSettings";
4561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
4571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
4581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
4591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
4601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(0);
4611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
4621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
4631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
4641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
4651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(rank);
4661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
4671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo("Display size");
4681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
4691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo("display size");
4701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
4711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEmpty();
4721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
4731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEmpty();
4741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off - only on for checkbox preferences
4751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEmpty();
4761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary off normalized - only on for checkbox preferences
4771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEmpty();
4781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries - only on for list preferences
4791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isNull();
4801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
4811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEqualTo("display density screen zoom scale scaling");
4821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
4831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo("Display size");
4841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
4851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11))
4861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                .isEqualTo("com.android.settings.display.ScreenZoomSettings");
4871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
4881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
4891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
4901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isNull();
4911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
4921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isNull();
4931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
4941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isNull();
4951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
4961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(enabled);
4971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
4981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isNull();
4991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
5001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(userId);
5011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
5021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
5031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload - should be updated to real payloads as controllers are added
5041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
5051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
5061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
5081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testResourceProvider_ResourceRowInserted() {
5091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
5101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.xmlResId = 0;
5111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.className = "com.android.settings.LegalSettings";
5121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
5141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
5151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
5161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getCount()).isEqualTo(2);
5171dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
5181dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5191dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    @Test
5201dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    public void testResourceProvider_ResourceRowMatches() {
5211dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
5221dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.xmlResId = 0;
5231dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        resource.className = "com.android.settings.LegalSettings";
5241dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5251dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
5261dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                new HashMap<String, List<String>>());
5271dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index ORDER BY data_title", null);
5281dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        cursor.moveToPosition(0);
5291dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5301dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Locale
5311dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(0)).isEqualTo(localeStr);
5321dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Rank
5331dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(1)).isEqualTo(rank);
5341dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data Title
5351dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(2)).isEqualTo("Legal information");
5361dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Normalized Title
5371dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(3)).isEqualTo("legal information");
5381dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On
5391dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(4)).isEmpty();
5401dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary On Normalized
5411dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(5)).isEmpty();
5421dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary Off - only on for checkbox preferences
5431dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(6)).isEmpty();
5441dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Summary off normalized - only on for checkbox preferences
5451dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(7)).isEmpty();
5461dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Entries - only on for list preferences
5471dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(8)).isNull();
5481dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Keywords
5491dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(9)).isEmpty();
5501dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Screen Title
5511dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(10)).isEqualTo("Legal information");
5521dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Class Name
5531dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(11))
5541dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze                .isEqualTo("com.android.settings.LegalSettings");
5551dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Icon
5561dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
5571dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Intent Action
5581dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(13)).isNull();
5591dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Package
5601dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(14)).isNull();
5611dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Target Class
5621dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(15)).isNull();
5631dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Enabled
5641dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(16) == 1).isEqualTo(enabled);
5651dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Data ref key
5661dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getString(17)).isNull();
5671dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // User Id
5681dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(18)).isEqualTo(userId);
5691dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload Type - default is 0
5701dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getInt(19)).isEqualTo(0);
5711dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        // Payload - should be updated to real payloads as controllers are added
5721dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        assertThat(cursor.getBlob(20)).isNull();
5731dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
5741dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5751dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    // Util functions
5761dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5771dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private SearchIndexableRaw getFakeRaw() {
5781dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        return getFakeRaw(localeStr);
5791dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
5801dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
5811dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private SearchIndexableRaw getFakeRaw(String localeStr) {
5821dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableRaw data = new SearchIndexableRaw(mContext);
5831dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.locale = new Locale(localeStr);
5841dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.rank = rank;
5851dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.title = title;
5861dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.summaryOn = summaryOn;
5871dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.summaryOff = summaryOff;
5881dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.entries = entries;
5891dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.keywords = keywords;
5901dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.screenTitle = screenTitle;
5911dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.className = className;
5921dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.packageName = packageName;
5931dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.iconResId = iconResId;
5941dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.intentAction = action;
5951dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.intentTargetPackage = targetPackage;
5961dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.intentTargetClass = targetClass;
5971dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.key = key;
5981dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.userId = userId;
5991dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        data.enabled = enabled;
6001dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        return data;
6011dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
6021dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze
6031dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    private SearchIndexableResource getFakeResource(int xml) {
6041dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        SearchIndexableResource sir = new SearchIndexableResource(mContext);
6051dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.rank = rank;
6061dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.xmlResId = xml;
6071dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.className = className;
6081dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.packageName = packageName;
6091dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.iconResId = iconResId;
6101dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.intentAction = action;
6111dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.intentTargetPackage = targetPackage;
6121dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.intentTargetClass = targetClass;
6131dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        sir.enabled = enabled;
6141dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze        return sir;
6151dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze    }
6161dec073528352fcf036c5ba52d5d535ba32c472cMatthew Fritze}
617