diff --git a/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java b/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java index b7cd4f5f8bce2..1918070546f5d 100644 --- a/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java +++ b/apex/appsearch/framework/java/android/app/appsearch/AppSearchSession.java @@ -22,6 +22,7 @@ import android.app.appsearch.exceptions.AppSearchException; import android.os.Bundle; import android.os.ParcelableException; import android.os.RemoteException; +import android.util.ArraySet; import java.util.ArrayList; import java.util.List; @@ -34,6 +35,8 @@ import java.util.function.Consumer; /** * Represents a connection to an AppSearch storage system where {@link GenericDocument}s can be * placed and queried. + * + * This class is thread safe. * @hide */ public final class AppSearchSession { @@ -79,7 +82,7 @@ public final class AppSearchSession { } /** - * Sets the schema will be used by documents provided to the {@link #putDocuments} method. + * Sets the schema that will be used by documents provided to the {@link #putDocuments} method. * *
The schema provided here is compared to the stored copy of the schema previously supplied * to {@link #setSchema}, if any, to determine how to treat existing documents. The following @@ -123,11 +126,19 @@ public final class AppSearchSession { *
It is a no-op to set the same schema as has been previously set; this is handled * efficiently. * + *
By default, documents are visible on platform surfaces. To opt out, call {@code
+ * SetSchemaRequest.Builder#setPlatformSurfaceable} with {@code surfaceable} as false. Any
+ * visibility settings apply only to the schemas that are included in the {@code request}.
+ * Visibility settings for a schema type do not apply or persist across
+ * {@link SetSchemaRequest}s.
+ *
* @param request The schema update request.
* @param executor Executor on which to invoke the callback.
* @param callback Callback to receive errors resulting from setting the schema. If the
* operation succeeds, the callback will be invoked with {@code null}.
*/
+ // TODO(b/169883602): Change @code references to @link when setPlatformSurfaceable APIs are
+ // exposed.
public void setSchema(
@NonNull SetSchemaRequest request,
@NonNull @CallbackExecutor Executor executor,
@@ -155,6 +166,43 @@ public final class AppSearchSession {
}
}
+ /**
+ * Retrieves the schema most recently successfully provided to {@link #setSchema}.
+ *
+ * @param executor Executor on which to invoke the callback.
+ * @param callback Callback to receive the pending results of schema.
+ */
+ public void getSchema(
+ @NonNull @CallbackExecutor Executor executor,
+ @NonNull Consumer An empty {@code queryExpression} matches all documents.
*
@@ -377,10 +425,13 @@ public final class AppSearchSession {
* the current database.
*
* @param queryExpression Query String to search.
- * @param searchSpec Defines what and how to remove
- * @param executor Executor on which to invoke the callback.
- * @param callback Callback to receive errors resulting from removing the documents. If the
- * operation succeeds, the callback will be invoked with {@code null}.
+ * @param searchSpec Spec containing schemaTypes, namespaces and query expression indicates
+ * how document will be removed. All specific about how to scoring,
+ * ordering, snippeting and resulting will be ignored.
+ * @param executor Executor on which to invoke the callback.
+ * @param callback Callback to receive errors resulting from removing the documents. If
+ * the operation succeeds, the callback will be invoked with
+ * {@code null}.
*/
public void removeByQuery(@NonNull String queryExpression,
@NonNull SearchSpec searchSpec,
diff --git a/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java b/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java
index d2aa8eab4708d..07938b704f117 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java
+++ b/apex/appsearch/framework/java/android/app/appsearch/GlobalSearchSession.java
@@ -115,7 +115,7 @@ public class GlobalSearchSession {
* @return The search result of performing this operation.
*/
@NonNull
- public SearchResults globalQuery(
+ public SearchResults query(
@NonNull String queryExpression,
@NonNull SearchSpec searchSpec,
@NonNull @CallbackExecutor Executor executor) {
diff --git a/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl b/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl
index 1d7cb87131c03..7883046f258ed 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl
+++ b/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl
@@ -28,10 +28,10 @@ parcelable SearchResults;
/** {@hide} */
interface IAppSearchManager {
/**
- * Sets the schema.
+ * Updates the AppSearch schema for this database.
*
- * @param databaseName The databaseName this document resides in.
- * @param schemaBundles List of AppSearchSchema bundles.
+ * @param databaseName The name of the database where this schema lives.
+ * @param schemaBundles List of {@link AppSearchSchema} bundles.
* @param schemasNotPlatformSurfaceable Schema types that should not be surfaced on platform
* surfaces.
* @param forceOverride Whether to apply the new schema even if it is incompatible. All
@@ -46,6 +46,17 @@ interface IAppSearchManager {
boolean forceOverride,
in IAppSearchResultCallback callback);
+
+ /**
+ * Retrieves the AppSearch schema for this database.
+ *
+ * @param databaseName The name of the database to retrieve.
+ * @param callback {@link IAppSearchResultCallback#onResult} will be called with an
+ * {@link AppSearchResult}<{@link List}<{@link Bundle}>>, where the value are
+ * AppSearchSchema bundle.
+ */
+ void getSchema(in String databaseName, in IAppSearchResultCallback callback);
+
/**
* Inserts documents into the index.
*
diff --git a/apex/appsearch/framework/java/android/app/appsearch/SearchResults.java b/apex/appsearch/framework/java/android/app/appsearch/SearchResults.java
index 8548d209c7871..7d3ea8bc132d1 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/SearchResults.java
+++ b/apex/appsearch/framework/java/android/app/appsearch/SearchResults.java
@@ -77,7 +77,7 @@ public class SearchResults implements Closeable {
* Re-call this method to get next page of {@link SearchResult}, until it returns an
* empty list.
*
- * The page size is set by {@link SearchSpec.Builder#setNumPerPage}.
+ * The page size is set by {@link SearchSpec.Builder#setResultCountPerPage}.
*
* @param callback Callback to receive the pending result of performing this operation.
*/
diff --git a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java
index 551347c5c202e..15128253b7651 100644
--- a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java
+++ b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java
@@ -89,6 +89,32 @@ public class AppSearchManagerService extends SystemService {
}
}
+ @Override
+ public void getSchema(
+ @NonNull String databaseName,
+ @NonNull IAppSearchResultCallback callback) {
+ Preconditions.checkNotNull(databaseName);
+ Preconditions.checkNotNull(callback);
+ int callingUid = Binder.getCallingUidOrThrow();
+ int callingUserId = UserHandle.getUserId(callingUid);
+ final long callingIdentity = Binder.clearCallingIdentity();
+ try {
+ AppSearchImpl impl = ImplInstanceManager.getInstance(getContext(), callingUserId);
+ databaseName = rewriteDatabaseNameWithUid(databaseName, callingUid);
+ List