Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3f3b547e authored by Matthew Fritze's avatar Matthew Fritze
Browse files

Index everything into the database and disable invalid ones

Change-Id: I7eb931009b722c10487f6212113a8993463b7bce
Fixes: 34142852
Test: make RunSettingsRoboTests
parent 2a7c6bd8
Loading
Loading
Loading
Loading
+53 −58
Original line number Diff line number Diff line
@@ -516,10 +516,7 @@ public class DatabaseIndexingManager {
                nonIndexableKeys.addAll(resNonIndxableKeys);
            }

            indexFromResource(sir.context, database, localeStr,
                    sir.xmlResId, sir.className, sir.iconResId, sir.rank,
                    sir.intentAction, sir.intentTargetPackage, sir.intentTargetClass,
                    nonIndexableKeys);
            indexFromResource(database, localeStr, sir, nonIndexableKeys);
        } else {
            if (TextUtils.isEmpty(sir.className)) {
                Log.w(LOG_TAG, "Cannot index an empty Search Provider name!");
@@ -543,20 +540,17 @@ public class DatabaseIndexingManager {
                    nonIndexableKeys.addAll(providerNonIndexableKeys);
                }

                indexFromProvider(mContext, database, localeStr, provider, sir.className,
                        sir.iconResId, sir.rank, sir.enabled, nonIndexableKeys);
                indexFromProvider(database, localeStr, provider, sir, nonIndexableKeys);
            }
        }
    }

    private void indexFromResource(Context context, SQLiteDatabase database, String localeStr,
            int xmlResId, String fragmentName, int iconResId, int rank,
            String intentAction, String intentTargetPackage, String intentTargetClass,
            List<String> nonIndexableKeys) {

    private void indexFromResource(SQLiteDatabase database, String localeStr,
            SearchIndexableResource sir, List<String> nonIndexableKeys) {
        final Context context = sir.context;
        XmlResourceParser parser = null;
        try {
            parser = context.getResources().getXml(xmlResId);
            parser = context.getResources().getXml(sir.xmlResId);

            int type;
            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
@@ -583,6 +577,13 @@ public class DatabaseIndexingManager {
            String keywords;
            String childFragment;
            ResultPayload payload;
            boolean enabled;
            final String fragmentName = sir.className;
            final int iconResId = sir.iconResId;
            final int rank = sir.rank;
            final String intentAction = sir.intentAction;
            final String intentTargetPackage = sir.intentTargetPackage;
            final String intentTargetClass = sir.intentTargetClass;

            Map<String, PreferenceController> controllerUriMap = null;

@@ -593,10 +594,11 @@ public class DatabaseIndexingManager {

            // Insert rows for the main PreferenceScreen node. Rewrite the data for removing
            // hyphens.
            if (!nonIndexableKeys.contains(key)) {

            title = XmlParserUtils.getDataTitle(context, attrs);
            summary = XmlParserUtils.getDataSummary(context, attrs);
            keywords = XmlParserUtils.getDataKeywords(context, attrs);
            enabled = !nonIndexableKeys.contains(key);

            DatabaseRow.Builder builder = new DatabaseRow.Builder();
            builder.setLocale(localeStr)
@@ -608,13 +610,12 @@ public class DatabaseIndexingManager {
                    .setIntentAction(intentAction)
                    .setIntentTargetPackage(intentTargetPackage)
                    .setIntentTargetClass(intentTargetClass)
                        .setEnabled(true)
                    .setEnabled(enabled)
                    .setKey(key)
                    .setUserId(-1 /* default user id */);

            updateOneRowWithFilteredData(database, builder, title, summary,
                    null /* summary off */, keywords);
            }

            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
                    && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
@@ -625,14 +626,11 @@ public class DatabaseIndexingManager {
                nodeName = parser.getName();

                key = XmlParserUtils.getDataKey(context, attrs);
                if (nonIndexableKeys.contains(key)) {
                    continue;
                }

                enabled = ! nonIndexableKeys.contains(key);
                title = XmlParserUtils.getDataTitle(context, attrs);
                keywords = XmlParserUtils.getDataKeywords(context, attrs);

                DatabaseRow.Builder builder = new DatabaseRow.Builder();
                builder = new DatabaseRow.Builder();
                builder.setLocale(localeStr)
                        .setClassName(fragmentName)
                        .setScreenTitle(screenTitle)
@@ -641,7 +639,7 @@ public class DatabaseIndexingManager {
                        .setIntentAction(intentAction)
                        .setIntentTargetPackage(intentTargetPackage)
                        .setIntentTargetClass(intentTargetClass)
                        .setEnabled(true)
                        .setEnabled(enabled)
                        .setKey(key)
                        .setUserId(-1 /* default user id */);

@@ -685,16 +683,21 @@ public class DatabaseIndexingManager {
        }
    }

    private void indexFromProvider(Context context, SQLiteDatabase database, String localeStr,
            Indexable.SearchIndexProvider provider, String className, int iconResId, int rank,
            boolean enabled, List<String> nonIndexableKeys) {
    private void indexFromProvider(SQLiteDatabase database, String localeStr,
            Indexable.SearchIndexProvider provider, SearchIndexableResource sir,
            List<String> nonIndexableKeys) {

        final String className = sir.className;
        final int iconResId = sir.iconResId;
        final int rank = sir.rank;

        if (provider == null) {
            Log.w(LOG_TAG, "Cannot find provider: " + className);
            return;
        }

        final List<SearchIndexableRaw> rawList = provider.getRawDataToIndex(context, enabled);
        final List<SearchIndexableRaw> rawList = provider.getRawDataToIndex(mContext,
                true /* enabled */);

        if (rawList != null) {

@@ -706,10 +709,7 @@ public class DatabaseIndexingManager {
                if (!raw.locale.toString().equalsIgnoreCase(localeStr)) {
                    continue;
                }

                if (nonIndexableKeys.contains(raw.key)) {
                    continue;
                }
                boolean enabled = !nonIndexableKeys.contains(raw.key);

                DatabaseRow.Builder builder = new DatabaseRow.Builder();
                builder.setLocale(localeStr)
@@ -721,7 +721,7 @@ public class DatabaseIndexingManager {
                        .setIntentAction(raw.intentAction)
                        .setIntentTargetPackage(raw.intentTargetPackage)
                        .setIntentTargetClass(raw.intentTargetClass)
                        .setEnabled(raw.enabled)
                        .setEnabled(enabled)
                        .setKey(raw.key)
                        .setUserId(raw.userId);

@@ -731,7 +731,7 @@ public class DatabaseIndexingManager {
        }

        final List<SearchIndexableResource> resList =
                provider.getXmlResourcesToIndex(context, enabled);
                provider.getXmlResourcesToIndex(mContext, true);
        if (resList != null) {
            final int resSize = resList.size();
            for (int i = 0; i < resSize; i++) {
@@ -742,15 +742,10 @@ public class DatabaseIndexingManager {
                    continue;
                }

                final int itemIconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
                final int itemRank = (item.rank == 0) ? rank : item.rank;
                String itemClassName = (TextUtils.isEmpty(item.className))
                        ? className : item.className;
                item.iconResId = (item.iconResId == 0) ? iconResId : item.iconResId;
                item.className = (TextUtils.isEmpty(item.className)) ? className : item.className;

                indexFromResource(context, database, localeStr,
                        item.xmlResId, itemClassName, itemIconResId, itemRank,
                        item.intentAction, item.intentTargetPackage,
                        item.intentTargetClass, nonIndexableKeys);
                indexFromResource(database, localeStr, item, nonIndexableKeys);
            }
        }
    }
+2 −2
Original line number Diff line number Diff line
@@ -129,7 +129,6 @@ public class DatabaseResultLoader extends AsyncLoader<List<SearchResult>> {
        secondaryResults = query(MATCH_COLUMNS_SECONDARY, BASE_RANKS[1]);
        tertiaryResults = query(MATCH_COLUMNS_TERTIARY, BASE_RANKS[2]);


        final List<SearchResult> results = new ArrayList<>(primaryResults.size()
                + secondaryResults.size()
                + tertiaryResults.size());
@@ -167,7 +166,7 @@ public class DatabaseResultLoader extends AsyncLoader<List<SearchResult>> {
    }

    private static String buildWhereClause(String[] matchColumns) {
        StringBuilder sb = new StringBuilder(" ");
        StringBuilder sb = new StringBuilder(" (");
        final int count = matchColumns.length;
        for (int n = 0; n < count; n++) {
            sb.append(matchColumns[n]);
@@ -176,6 +175,7 @@ public class DatabaseResultLoader extends AsyncLoader<List<SearchResult>> {
                sb.append(" OR ");
            }
        }
        sb.append(") AND enabled = 1");
        return sb.toString();
    }
}
+48 −13
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import static com.android.settings.dashboard.SiteMapManager.SITE_MAP_COLUMNS;
import static com.google.common.truth.Truth.assertThat;
@@ -51,7 +52,7 @@ import static org.mockito.Mockito.spy;
public class DatabaseIndexingManagerTest {
    private final String localeStr = "en_US";

    private final int rank = 42;
    private final int rank = 8;
    private final String title = "title\u2011title";
    private final String updatedTitle = "title-title";
    private final String normalizedTitle = "titletitle";
@@ -212,6 +213,20 @@ public class DatabaseIndexingManagerTest {
        assertThat(cursor.getCount()).isEqualTo(6);
    }

    @Test
    public void testAddResourceWithNIKs_RowsInsertedDisabled() {
        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
        // Only add 2 of 6 items to be disabled.
        String[] keys = {"gesture_double_tap_power", "gesture_swipe_down_fingerprint"};
        Map<String, List<String>> niks = getNonIndexableKeys(keys);
        mManager.indexOneSearchIndexableData(mDb, localeStr, resource, niks);

        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
        assertThat(cursor.getCount()).isEqualTo(2);
        cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
        assertThat(cursor.getCount()).isEqualTo(4);
    }

    @Test
    public void testAddResourceHeader_RowsMatch() {
        SearchIndexableResource resource = getFakeResource(R.xml.application_settings);
@@ -529,21 +544,19 @@ public class DatabaseIndexingManagerTest {

    @Test
    public void testResourceProvider_ResourceRowInserted() {
        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
        resource.xmlResId = 0;
        SearchIndexableResource resource = getFakeResource(0);
        resource.className = "com.android.settings.LegalSettings";

        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
                new HashMap<>());
        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null);
        assertThat(cursor.getCount()).isEqualTo(2);
        assertThat(cursor.getCount()).isEqualTo(6);
    }

    @Test
    public void testResourceProvider_ResourceRowMatches() {
        SearchIndexableResource resource = getFakeResource(R.xml.gesture_settings);
        resource.xmlResId = 0;
        resource.className = "com.android.settings.LegalSettings";
        SearchIndexableResource resource = getFakeResource(0);
        resource.className = "com.android.settings.display.ScreenZoomSettings";

        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
                new HashMap<>());
@@ -555,9 +568,9 @@ public class DatabaseIndexingManagerTest {
        // Data Rank
        assertThat(cursor.getInt(1)).isEqualTo(rank);
        // Data Title
        assertThat(cursor.getString(2)).isEqualTo("Legal information");
        assertThat(cursor.getString(2)).isEqualTo("Display size");
        // Normalized Title
        assertThat(cursor.getString(3)).isEqualTo("legal information");
        assertThat(cursor.getString(3)).isEqualTo("display size");
        // Summary On
        assertThat(cursor.getString(4)).isEmpty();
        // Summary On Normalized
@@ -569,12 +582,13 @@ public class DatabaseIndexingManagerTest {
        // Entries - only on for list preferences
        assertThat(cursor.getString(8)).isNull();
        // Keywords
        assertThat(cursor.getString(9)).isEmpty();
        assertThat(cursor.getString(9)).isEqualTo(
                "display density screen zoom scale scaling");
        // Screen Title
        assertThat(cursor.getString(10)).isEqualTo("Legal information");
        assertThat(cursor.getString(10)).isEqualTo("Display size");
        // Class Name
        assertThat(cursor.getString(11))
                .isEqualTo("com.android.settings.LegalSettings");
                .isEqualTo("com.android.settings.display.ScreenZoomSettings");
        // Icon
        assertThat(cursor.getInt(12)).isEqualTo(iconResId);
        // Intent Action
@@ -595,6 +609,20 @@ public class DatabaseIndexingManagerTest {
        assertThat(cursor.getBlob(20)).isNull();
    }

    @Test
    public void testResourceProvider_DisabledResourceRowsInserted() {
        SearchIndexableResource resource = getFakeResource(0);
        resource.className = "com.android.settings.LegalSettings";

        mManager.indexOneSearchIndexableData(mDb, localeStr, resource,
                new HashMap<String, List<String>>());

        Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 1", null);
        assertThat(cursor.getCount()).isEqualTo(2);
        cursor = mDb.rawQuery("SELECT * FROM prefs_index WHERE enabled = 0", null);
        assertThat(cursor.getCount()).isEqualTo(4);
    }

    // Util functions

    private SearchIndexableRaw getFakeRaw() {
@@ -636,4 +664,11 @@ public class DatabaseIndexingManagerTest {
        sir.enabled = enabled;
        return sir;
    }

    private Map<String, List<String>> getNonIndexableKeys(String[] keys) {
        Map<String, List<String>> niks = new HashMap<>();
        List<String> keysList = new ArrayList<>(Arrays.asList(keys));
        niks.put(packageName, keysList);
        return niks;
    }
}
 No newline at end of file
+9 −9
Original line number Diff line number Diff line
@@ -80,26 +80,26 @@ public class DatabaseResultLoaderTest {
    @Test
    public void testMatchTitle() {
        loader = new DatabaseResultLoader(mContext, "title");
        assertThat(loader.loadInBackground().size()).isEqualTo(3);
        verify(mSiteMapManager, times(3)).buildBreadCrumb(eq(mContext), anyString(), anyString());
        assertThat(loader.loadInBackground().size()).isEqualTo(2);
        verify(mSiteMapManager, times(2)).buildBreadCrumb(eq(mContext), anyString(), anyString());
    }

    @Test
    public void testMatchSummary() {
        loader = new DatabaseResultLoader(mContext, "summary");
        assertThat(loader.loadInBackground().size()).isEqualTo(3);
        assertThat(loader.loadInBackground().size()).isEqualTo(2);
    }

    @Test
    public void testMatchKeywords() {
        loader = new DatabaseResultLoader(mContext, "keywords");
        assertThat(loader.loadInBackground().size()).isEqualTo(3);
        assertThat(loader.loadInBackground().size()).isEqualTo(2);
    }

    @Test
    public void testMatchEntries() {
        loader = new DatabaseResultLoader(mContext, "entries");
        assertThat(loader.loadInBackground().size()).isEqualTo(3);
        assertThat(loader.loadInBackground().size()).isEqualTo(2);
    }

    @Test
@@ -167,7 +167,7 @@ public class DatabaseResultLoaderTest {
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
@@ -196,7 +196,7 @@ public class DatabaseResultLoaderTest {
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
@@ -223,7 +223,7 @@ public class DatabaseResultLoaderTest {
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, true);
        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);
@@ -249,7 +249,7 @@ public class DatabaseResultLoaderTest {
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_PACKAGE, "");
        values.put(IndexDatabaseHelper.IndexColumns.INTENT_TARGET_CLASS, "");
        values.put(IndexDatabaseHelper.IndexColumns.ICON, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, "");
        values.put(IndexDatabaseHelper.IndexColumns.ENABLED, false);
        values.put(IndexDatabaseHelper.IndexColumns.DATA_KEY_REF, "gesture_double_tap_power");
        values.put(IndexDatabaseHelper.IndexColumns.USER_ID, 0);
        values.put(IndexDatabaseHelper.IndexColumns.PAYLOAD_TYPE, 0);