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

Commit d81e24bf authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Index everything into the database and disable invalid ones"

parents 88c0364a 3f3b547e
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);