summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-01-29 16:40:57 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-01-29 16:40:57 +0000
commit63d14042a28138c87e4bf349ae00b39cd3ca1dd4 (patch)
treee7f6ceeca7308086506c6c87f8ddcaadd5c829b7 /core/java
parent3fce7487c3a9b4358202285b09603a31f5e84a69 (diff)
parent51598602e39570ef482d830eb013af44793852d5 (diff)
Merge "Support Slices in Settings Search"
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/provider/SearchIndexablesContract.java42
-rw-r--r--core/java/android/provider/SearchIndexablesProvider.java15
2 files changed, 56 insertions, 1 deletions
diff --git a/core/java/android/provider/SearchIndexablesContract.java b/core/java/android/provider/SearchIndexablesContract.java
index adf437cedd90..42c2d5ced806 100644
--- a/core/java/android/provider/SearchIndexablesContract.java
+++ b/core/java/android/provider/SearchIndexablesContract.java
@@ -81,6 +81,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.
*/
public static final String[] INDEXABLES_XML_RES_COLUMNS = new String[] {
@@ -177,6 +192,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}.
*
* This is a description of
@@ -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";
diff --git a/core/java/android/provider/SearchIndexablesProvider.java b/core/java/android/provider/SearchIndexablesProvider.java
index 02a5e6fd157f..1549c45478ed 100644
--- a/core/java/android/provider/SearchIndexablesProvider.java
+++ b/core/java/android/provider/SearchIndexablesProvider.java
@@ -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)) {