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

Commit 97babb1e authored by Fabrice Di Meglio's avatar Fabrice Di Meglio
Browse files

SearchIndexablesProvider - support for querying for non indexable data keys

SearchIndexablesProvider should be able to send a list of data keys that
should not be indexed (mainly depending on some condition/state from the
device)

- update the contract by adding a new query named queryNonIndexableKeys(...)

Change-Id: Ie720825050acb600dca8ac8fed96fa4f59c3af71
parent a8e8f3f6
Loading
Loading
Loading
Loading
+41 −2
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ public class SearchIndexablesContract {
    private static final String SETTINGS = "settings";

    /**
     * Indexable references name.
     * Indexable reference names.
     */
    public static final String INDEXABLES_XML_RES = "indexables_xml_res";

@@ -45,7 +45,7 @@ public class SearchIndexablesContract {
    public static final String INDEXABLES_XML_RES_PATH = SETTINGS + "/" + INDEXABLES_XML_RES;

    /**
     * Indexable raw data name.
     * Indexable raw data names.
     */
    public static final String INDEXABLES_RAW = "indexables_raw";

@@ -54,6 +54,16 @@ public class SearchIndexablesContract {
     */
    public static final String INDEXABLES_RAW_PATH = SETTINGS + "/" + INDEXABLES_RAW;

    /**
     * Non indexable data keys.
     */
    public static final String NON_INDEXABLES_KEYS = "non_indexables_key";

    /**
     * ContentProvider path for non indexable data keys.
     */
    public static final String NON_INDEXABLES_KEYS_PATH = SETTINGS + "/" + NON_INDEXABLES_KEYS;

    /**
     * Indexable xml resources colums.
     */
@@ -114,6 +124,17 @@ public class SearchIndexablesContract {
    public static final int COLUMN_INDEX_RAW_INTENT_TARGET_CLASS = 11;
    public static final int COLUMN_INDEX_RAW_KEY = 12;

    /**
     * Indexable raw data colums.
     */
    public static final String[] NON_INDEXABLES_KEYS_COLUMNS = new String[] {
            NonIndexableKey.COLUMN_KEY_VALUE      // 0
    };

    /**
     * Non indexable data keys colums indices.
     */
    public static final int COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE = 0;

    /**
     * Constants related to a {@link SearchIndexableResource}.
@@ -185,6 +206,24 @@ public class SearchIndexablesContract {
        public static final String COLUMN_KEY = "key";
    }

    /**
     * Constants related to a {@link SearchIndexableResource} and {@link SearchIndexableData}.
     *
     * This is a description of a data (thru its unique key) that cannot be indexed.
     */
    public static final class NonIndexableKey extends BaseColumns {
        private NonIndexableKey() {
        }

        public static final String MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE +
                "/" + NON_INDEXABLES_KEYS;

        /**
         * Key for the non indexable data.
         */
        public static final String COLUMN_KEY_VALUE = "key";
    }

    /**
     * The base columns.
     */
+23 −8
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider {

    private static final int MATCH_RES_CODE = 1;
    private static final int MATCH_RAW_CODE = 2;
    private static final int MATCH_NON_INDEXABLE_KEYS_CODE = 3;

    /**
     * Implementation is provided by the parent class.
@@ -82,6 +83,8 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
                MATCH_RES_CODE);
        mMatcher.addURI(mAuthority, SearchIndexablesContract.INDEXABLES_RAW_PATH,
                MATCH_RAW_CODE);
        mMatcher.addURI(mAuthority, SearchIndexablesContract.NON_INDEXABLES_KEYS_PATH,
                MATCH_NON_INDEXABLE_KEYS_CODE);

        // Sanity check our setup
        if (!info.exported) {
@@ -105,6 +108,8 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
                return queryXmlResources(null);
            case MATCH_RAW_CODE:
                return queryRawData(null);
            case MATCH_NON_INDEXABLE_KEYS_CODE:
                return queryNonIndexableKeys(null);
            default:
                throw new UnsupportedOperationException("Unknown Uri " + uri);
        }
@@ -113,7 +118,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
    /**
     * Returns all {@link android.provider.SearchIndexablesContract.XmlResource}.
     *
     * Those are usually xml resource ID to some {@link android.preference.PreferenceScreen}.
     * Those are Xml resource IDs to some {@link android.preference.PreferenceScreen}.
     *
     * @param projection list of {@link android.provider.SearchIndexablesContract.XmlResource}
     *                   columns to put into the cursor. If {@code null} all supported columns
@@ -124,7 +129,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
    /**
     * Returns all {@link android.provider.SearchIndexablesContract.RawData}.
     *
     * Those are raw indexable data.
     * Those are the raw indexable data.
     *
     * @param projection list of {@link android.provider.SearchIndexablesContract.RawData} columns
     *                   to put into the cursor. If {@code null} all supported columns should be
@@ -132,6 +137,17 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
     */
    public abstract Cursor queryRawData(String[] projection);

    /**
     * Returns all {@link android.provider.SearchIndexablesContract.NonIndexableKey}.
     *
     * Those are the non indexable data keys.
     *
     * @param projection list of {@link android.provider.SearchIndexablesContract.NonIndexableKey}
     *                   columns to put into the cursor. If {@code null} all supported columns
     *                   should be included.
     */
    public abstract Cursor queryNonIndexableKeys(String[] projection);

    @Override
    public String getType(Uri uri) {
        switch (mMatcher.match(uri)) {
@@ -139,14 +155,15 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
                return SearchIndexablesContract.XmlResource.MIME_TYPE;
            case MATCH_RAW_CODE:
                return SearchIndexablesContract.RawData.MIME_TYPE;
            case MATCH_NON_INDEXABLE_KEYS_CODE:
                return SearchIndexablesContract.NonIndexableKey.MIME_TYPE;
            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
        }
    }

    /**
     * Implementation is provided by the parent class. Throws by default, and
     * cannot be overriden.
     * Implementation is provided by the parent class. Throws by default, and cannot be overriden.
     */
    @Override
    public final Uri insert(Uri uri, ContentValues values) {
@@ -154,8 +171,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
    }

    /**
     * Implementation is provided by the parent class. Throws by default, and
     * cannot be overriden.
     * Implementation is provided by the parent class. Throws by default, and cannot be overriden.
     */
    @Override
    public final int delete(Uri uri, String selection, String[] selectionArgs) {
@@ -163,8 +179,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
    }

    /**
     * Implementation is provided by the parent class. Throws by default, and
     * cannot be overriden.
     * Implementation is provided by the parent class. Throws by default, and cannot be overriden.
     */
    @Override
    public final int update(