Merge "Support Slices in Settings Search"

This commit is contained in:
TreeHugger Robot
2019-01-29 16:40:57 +00:00
committed by Android (Google) Code Review
3 changed files with 65 additions and 1 deletions

View File

@@ -5879,6 +5879,9 @@ package android.provider {
field public static final String[] NON_INDEXABLES_KEYS_COLUMNS;
field public static final String NON_INDEXABLES_KEYS_PATH = "settings/non_indexables_key";
field public static final String PROVIDER_INTERFACE = "android.content.action.SEARCH_INDEXABLES_PROVIDER";
field public static final String SLICE_URI_PAIRS = "slice_uri_pairs";
field public static final String[] SLICE_URI_PAIRS_COLUMNS;
field public static final String SLICE_URI_PAIRS_PATH = "settings/slice_uri_pairs";
}
public static class SearchIndexablesContract.BaseColumns {
@@ -5907,6 +5910,11 @@ package android.provider {
field public static final String MIME_TYPE = "vnd.android.cursor.dir/indexables_raw";
}
public static final class SearchIndexablesContract.SliceUriPairColumns {
field public static final String KEY = "key";
field public static final String SLICE_URI = "slice_uri";
}
public static final class SearchIndexablesContract.XmlResource extends android.provider.SearchIndexablesContract.BaseColumns {
field public static final String COLUMN_XML_RESID = "xmlResId";
field public static final String MIME_TYPE = "vnd.android.cursor.dir/indexables_xml_res";
@@ -5920,6 +5928,7 @@ package android.provider {
method public android.database.Cursor query(android.net.Uri, String[], String, String[], String);
method public abstract android.database.Cursor queryNonIndexableKeys(String[]);
method public abstract android.database.Cursor queryRawData(String[]);
method public android.database.Cursor querySliceUriPairs();
method public abstract android.database.Cursor queryXmlResources(String[]);
method public final int update(android.net.Uri, android.content.ContentValues, String, String[]);
}

View File

@@ -80,6 +80,21 @@ public class SearchIndexablesContract {
*/
public static final String SITE_MAP_PAIRS_PATH = SETTINGS + "/" + SITE_MAP_PAIRS_KEYS;
/**
* Last path segment for Preference Key, Slice Uri pair.
* <p>
* The (Key, Slice Uri) pairs are a mapping between the primary key of the search result and
* a Uri for a Slice that represents the same data. Thus, an app can specify a list of Uris
* for Slices that replace regular intent-based search results with inline content.
* </p>
*/
public static final String SLICE_URI_PAIRS = "slice_uri_pairs";
/**
* ContentProvider path for Slice Uri pairs.
*/
public static final String SLICE_URI_PAIRS_PATH = SETTINGS + "/" + SLICE_URI_PAIRS;
/**
* Indexable xml resources columns.
*/
@@ -176,6 +191,30 @@ public class SearchIndexablesContract {
*/
public static final int COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE = 0;
/**
* Columns for the SliceUri and Preference Key pairs.
*/
public static final class SliceUriPairColumns {
private SliceUriPairColumns() {}
/**
* The preference key for the Setting.
*/
public static final String KEY = "key";
/**
* The Slice Uri corresponding to the Setting key.
*/
public static final String SLICE_URI = "slice_uri";
}
/**
* Cursor schema for SliceUriPairs.
*/
public static final String[] SLICE_URI_PAIRS_COLUMNS = new String[]{
SliceUriPairColumns.KEY,
SliceUriPairColumns.SLICE_URI
};
/**
* Constants related to a {@link SearchIndexableResource}.
*
@@ -211,7 +250,6 @@ public class SearchIndexablesContract {
* {@link android.preference.Preference} and its attributes like
* {@link android.preference.Preference#getTitle()},
* {@link android.preference.Preference#getSummary()}, etc.
*
*/
public static final class RawData extends BaseColumns {
private RawData() {
@@ -262,12 +300,14 @@ public class SearchIndexablesContract {
/**
* Identifier for the Payload object type.
*
* @hide
*/
public static final String PAYLOAD_TYPE = "payload_type";
/**
* Generic payload for improving Search result expressiveness.
*
* @hide
*/
public static final String PAYLOAD = "payload";

View File

@@ -17,6 +17,7 @@
package android.provider;
import android.annotation.SystemApi;
import android.app.slice.Slice;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
@@ -73,6 +74,7 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
private static final int MATCH_RAW_CODE = 2;
private static final int MATCH_NON_INDEXABLE_KEYS_CODE = 3;
private static final int MATCH_SITE_MAP_PAIRS_CODE = 4;
private static final int MATCH_SLICE_URI_PAIRS_CODE = 5;
/**
* Implementation is provided by the parent class.
@@ -90,6 +92,8 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
MATCH_NON_INDEXABLE_KEYS_CODE);
mMatcher.addURI(mAuthority, SearchIndexablesContract.SITE_MAP_PAIRS_PATH,
MATCH_SITE_MAP_PAIRS_CODE);
mMatcher.addURI(mAuthority, SearchIndexablesContract.SLICE_URI_PAIRS_PATH,
MATCH_SLICE_URI_PAIRS_CODE);
// Sanity check our setup
if (!info.exported) {
@@ -117,6 +121,8 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
return queryNonIndexableKeys(null);
case MATCH_SITE_MAP_PAIRS_CODE:
return querySiteMapPairs();
case MATCH_SLICE_URI_PAIRS_CODE:
return querySliceUriPairs();
default:
throw new UnsupportedOperationException("Unknown Uri " + uri);
}
@@ -166,6 +172,15 @@ public abstract class SearchIndexablesProvider extends ContentProvider {
return null;
}
/**
* Returns a {@link Cursor} linking {@link Slice} {@link Uri Uris} to the
* corresponding Settings key.
*/
public Cursor querySliceUriPairs() {
// By default no-op;
return null;
}
@Override
public String getType(Uri uri) {
switch (mMatcher.match(uri)) {