Loading apex/appsearch/framework/java/android/app/appsearch/AppSearchManager.java +33 −49 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import android.os.Bundle; import android.os.RemoteException; import com.android.internal.infra.AndroidFuture; import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; Loading Loading @@ -96,46 +96,23 @@ public class AppSearchManager { * <p>It is a no-op to set the same schema as has been previously set; this is handled * efficiently. * * @param schemas The schema configs for the types used by the calling app. * @param request The schema update request. * @return the result of performing this operation. * * @hide */ @NonNull public AppSearchResult<Void> setSchema(@NonNull AppSearchSchema... schemas) { return setSchema(Arrays.asList(schemas), /*forceOverride=*/false); } /** * Sets the schema being used by documents provided to the {@link #putDocuments} method. * * <p>This method is similar to {@link #setSchema(AppSearchSchema...)}, except for the * {@code forceOverride} parameter. If a backwards-incompatible schema is specified but the * {@code forceOverride} parameter is set to {@code true}, instead of returning an * {@link AppSearchResult} with the {@link AppSearchResult#RESULT_INVALID_SCHEMA} code, all * documents which are not compatible with the new schema will be deleted and the incompatible * schema will be applied. * * @param schemas The schema configs for the types used by the calling app. * @param forceOverride Whether to force the new schema to be applied even if there are * incompatible changes versus the previously set schema. Documents which are incompatible * with the new schema will be deleted. * @return the result of performing this operation. * * @hide */ @NonNull public AppSearchResult<Void> setSchema( @NonNull List<AppSearchSchema> schemas, boolean forceOverride) { public AppSearchResult<Void> setSchema(@NonNull SetSchemaRequest request) { Preconditions.checkNotNull(request); // TODO: This should use com.android.internal.infra.RemoteStream or another mechanism to // avoid binder limits. List<Bundle> schemaBundles = new ArrayList<>(schemas.size()); for (AppSearchSchema schema : schemas) { List<Bundle> schemaBundles = new ArrayList<>(request.getSchemas().size()); for (AppSearchSchema schema : request.getSchemas()) { schemaBundles.add(schema.getBundle()); } AndroidFuture<AppSearchResult> future = new AndroidFuture<>(); try { mService.setSchema(schemaBundles, forceOverride, future); mService.setSchema(schemaBundles, request.isForceOverride(), future); } catch (RemoteException e) { future.completeExceptionally(e); } Loading @@ -151,19 +128,20 @@ public class AppSearchManager { * <p>Each {@link GenericDocument}'s {@code schemaType} field must be set to the name of a * schema type previously registered via the {@link #setSchema} method. * * @param documents {@link GenericDocument}s that need to be indexed. * @return An {@link AppSearchBatchResult} mapping the document URIs to {@link Void} if they * were successfully indexed, or a {@link Throwable} describing the failure if they could * not be indexed. * @param request {@link PutDocumentsRequest} containing documents to be indexed * @return The pending result of performing this operation. The keys of the returned * {@link AppSearchBatchResult} are the URIs of the input documents. The values are * {@code null} if they were successfully indexed, or a failed {@link AppSearchResult} * otherwise. * @hide */ public AppSearchBatchResult<String, Void> putDocuments( @NonNull List<GenericDocument> documents) { public AppSearchBatchResult<String, Void> putDocuments(@NonNull PutDocumentsRequest request) { // TODO(b/146386470): Transmit these documents as a RemoteStream instead of sending them in // one big list. List<GenericDocument> documents = request.getDocuments(); List<Bundle> documentBundles = new ArrayList<>(documents.size()); for (GenericDocument document : documents) { documentBundles.add(document.getBundle()); for (int i = 0; i < documents.size(); i++) { documentBundles.add(documents.get(i).getBundle()); } AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>(); try { Loading @@ -180,15 +158,18 @@ public class AppSearchManager { * <p>You should not call this method directly; instead, use the * {@code AppSearch#getDocuments()} API provided by JetPack. * * @param uris URIs of the documents to look up. * @return An {@link AppSearchBatchResult} mapping the document URIs to * {@link GenericDocument} values if they were successfully retrieved, a {@code null} * failure if they were not found, or a {@link Throwable} failure describing the problem if * an error occurred. * @param request {@link GetByUriRequest} containing URIs to be retrieved. * @return The pending result of performing this operation. The keys of the returned * {@link AppSearchBatchResult} are the input URIs. The values are the returned * {@link GenericDocument}s on success, or a failed {@link AppSearchResult} otherwise. * URIs that are not found will return a failed {@link AppSearchResult} with a result code * of {@link AppSearchResult#RESULT_NOT_FOUND}. */ public AppSearchBatchResult<String, GenericDocument> getDocuments(@NonNull List<String> uris) { public AppSearchBatchResult<String, GenericDocument> getByUri( @NonNull GetByUriRequest request) { // TODO(b/146386470): Transmit the result documents as a RemoteStream instead of sending // them in one big list. List<String> uris = new ArrayList<>(request.getUris()); AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>(); try { mService.getDocuments(uris, future); Loading Loading @@ -300,12 +281,15 @@ public class AppSearchManager { * <p>You should not call this method directly; instead, use the {@code AppSearch#delete()} API * provided by JetPack. * * @param uris URIs of the documents to delete * @return An {@link AppSearchBatchResult} mapping each URI to a {@code null} success if * deletion was successful, to a {@code null} failure if the document did not exist, or to a * {@code throwable} failure if deletion failed for another reason. * @param request Request containing URIs to be removed. * @return The pending result of performing this operation. The keys of the returned * {@link AppSearchBatchResult} are the input URIs. The values are {@code null} on success, * or a failed {@link AppSearchResult} otherwise. URIs that are not found will return a * failed {@link AppSearchResult} with a result code of * {@link AppSearchResult#RESULT_NOT_FOUND}. */ public AppSearchBatchResult<String, Void> delete(@NonNull List<String> uris) { public AppSearchBatchResult<String, Void> removeByUri(@NonNull RemoveByUriRequest request) { List<String> uris = new ArrayList<>(request.getUris()); AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>(); try { mService.delete(uris, future); Loading apex/appsearch/framework/java/android/app/appsearch/GetByUriRequest.java 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import android.util.ArraySet; import com.android.internal.util.Preconditions; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * Encapsulates a request to retrieve documents by namespace and URI. * * @see AppSearchManager#getByUri * @hide */ public final class GetByUriRequest { private final String mNamespace; private final Set<String> mUris; GetByUriRequest(@NonNull String namespace, @NonNull Set<String> uris) { mNamespace = namespace; mUris = uris; } /** @hide */ @NonNull public String getNamespace() { return mNamespace; } /** @hide */ @NonNull public Set<String> getUris() { return mUris; } /** Builder for {@link GetByUriRequest} objects. */ public static final class Builder { private String mNamespace = GenericDocument.DEFAULT_NAMESPACE; private final Set<String> mUris = new ArraySet<>(); private boolean mBuilt = false; /** * Sets which namespace these documents will be retrieved from. * * <p>If this is not set, it defaults to {@link GenericDocument#DEFAULT_NAMESPACE}. */ @NonNull public Builder setNamespace(@NonNull String namespace) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(namespace); mNamespace = namespace; return this; } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull String... uris) { Preconditions.checkNotNull(uris); return addUris(Arrays.asList(uris)); } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull Collection<String> uris) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(uris); mUris.addAll(uris); return this; } /** Builds a new {@link GetByUriRequest}. */ @NonNull public GetByUriRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new GetByUriRequest(mNamespace, mUris); } } } apex/appsearch/framework/java/android/app/appsearch/PutDocumentsRequest.java 0 → 100644 +77 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; /** * Encapsulates a request to index a document into an {@link AppSearchManager} database. * * @see AppSearchManager#putDocuments * @hide */ public final class PutDocumentsRequest { private final List<GenericDocument> mDocuments; PutDocumentsRequest(List<GenericDocument> documents) { mDocuments = documents; } /** @hide */ @NonNull public List<GenericDocument> getDocuments() { return mDocuments; } /** Builder for {@link PutDocumentsRequest} objects. */ public static final class Builder { private final List<GenericDocument> mDocuments = new ArrayList<>(); private boolean mBuilt = false; /** Adds one or more documents to the request. */ @NonNull public Builder addGenericDocument(@NonNull GenericDocument... documents) { Preconditions.checkNotNull(documents); return addGenericDocument(Arrays.asList(documents)); } /** Adds one or more documents to the request. */ @NonNull public Builder addGenericDocument(@NonNull Collection<GenericDocument> documents) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(documents); mDocuments.addAll(documents); return this; } /** Builds a new {@link PutDocumentsRequest}. */ @NonNull public PutDocumentsRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new PutDocumentsRequest(mDocuments); } } } apex/appsearch/framework/java/android/app/appsearch/RemoveByUriRequest.java 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import android.util.ArraySet; import com.android.internal.util.Preconditions; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * Encapsulates a request to remove documents by namespace and URI. * * @see AppSearchManager#removeByUri * @hide */ public final class RemoveByUriRequest { private final String mNamespace; private final Set<String> mUris; RemoveByUriRequest(String namespace, Set<String> uris) { mNamespace = namespace; mUris = uris; } /** @hide */ @NonNull public String getNamespace() { return mNamespace; } /** @hide */ @NonNull public Set<String> getUris() { return mUris; } /** Builder for {@link RemoveByUriRequest} objects. */ public static final class Builder { private String mNamespace = GenericDocument.DEFAULT_NAMESPACE; private final Set<String> mUris = new ArraySet<>(); private boolean mBuilt = false; /** * Sets which namespace these documents will be removed from. * * <p>If this is not set, it defaults to {@link GenericDocument#DEFAULT_NAMESPACE}. */ @NonNull public Builder setNamespace(@NonNull String namespace) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(namespace); mNamespace = namespace; return this; } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull String... uris) { Preconditions.checkNotNull(uris); return addUris(Arrays.asList(uris)); } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull Collection<String> uris) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(uris); mUris.addAll(uris); return this; } /** Builds a new {@link RemoveByUriRequest}. */ @NonNull public RemoveByUriRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new RemoveByUriRequest(mNamespace, mUris); } } } apex/appsearch/framework/java/android/app/appsearch/SetSchemaRequest.java 0 → 100644 +101 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import android.util.ArraySet; import com.android.internal.util.Preconditions; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * Encapsulates a request to update the schema of an {@link AppSearchManager} database. * * @see AppSearchManager#setSchema * @hide */ public final class SetSchemaRequest { private final Set<AppSearchSchema> mSchemas; private final boolean mForceOverride; SetSchemaRequest(Set<AppSearchSchema> schemas, boolean forceOverride) { mSchemas = schemas; mForceOverride = forceOverride; } /** @hide */ @NonNull public Set<AppSearchSchema> getSchemas() { return mSchemas; } /** @hide */ public boolean isForceOverride() { return mForceOverride; } /** Builder for {@link SetSchemaRequest} objects. */ public static final class Builder { private final Set<AppSearchSchema> mSchemas = new ArraySet<>(); private boolean mForceOverride = false; private boolean mBuilt = false; /** Adds one or more types to the schema. */ @NonNull public Builder addSchema(@NonNull AppSearchSchema... schemas) { Preconditions.checkNotNull(schemas); return addSchema(Arrays.asList(schemas)); } /** Adds one or more types to the schema. */ @NonNull public Builder addSchema(@NonNull Collection<AppSearchSchema> schemas) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(schemas); mSchemas.addAll(schemas); return this; } /** * Configures the {@link SetSchemaRequest} to delete any existing documents that don't * follow the new schema. * * <p>By default, this is {@code false} and schema incompatibility causes the * {@link AppSearchManager#setSchema} call to fail. * * @see AppSearchManager#setSchema */ @NonNull public Builder setForceOverride(boolean forceOverride) { mForceOverride = forceOverride; return this; } /** Builds a new {@link SetSchemaRequest}. */ @NonNull public SetSchemaRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new SetSchemaRequest(mSchemas, mForceOverride); } } } Loading
apex/appsearch/framework/java/android/app/appsearch/AppSearchManager.java +33 −49 Original line number Diff line number Diff line Loading @@ -22,9 +22,9 @@ import android.os.Bundle; import android.os.RemoteException; import com.android.internal.infra.AndroidFuture; import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; Loading Loading @@ -96,46 +96,23 @@ public class AppSearchManager { * <p>It is a no-op to set the same schema as has been previously set; this is handled * efficiently. * * @param schemas The schema configs for the types used by the calling app. * @param request The schema update request. * @return the result of performing this operation. * * @hide */ @NonNull public AppSearchResult<Void> setSchema(@NonNull AppSearchSchema... schemas) { return setSchema(Arrays.asList(schemas), /*forceOverride=*/false); } /** * Sets the schema being used by documents provided to the {@link #putDocuments} method. * * <p>This method is similar to {@link #setSchema(AppSearchSchema...)}, except for the * {@code forceOverride} parameter. If a backwards-incompatible schema is specified but the * {@code forceOverride} parameter is set to {@code true}, instead of returning an * {@link AppSearchResult} with the {@link AppSearchResult#RESULT_INVALID_SCHEMA} code, all * documents which are not compatible with the new schema will be deleted and the incompatible * schema will be applied. * * @param schemas The schema configs for the types used by the calling app. * @param forceOverride Whether to force the new schema to be applied even if there are * incompatible changes versus the previously set schema. Documents which are incompatible * with the new schema will be deleted. * @return the result of performing this operation. * * @hide */ @NonNull public AppSearchResult<Void> setSchema( @NonNull List<AppSearchSchema> schemas, boolean forceOverride) { public AppSearchResult<Void> setSchema(@NonNull SetSchemaRequest request) { Preconditions.checkNotNull(request); // TODO: This should use com.android.internal.infra.RemoteStream or another mechanism to // avoid binder limits. List<Bundle> schemaBundles = new ArrayList<>(schemas.size()); for (AppSearchSchema schema : schemas) { List<Bundle> schemaBundles = new ArrayList<>(request.getSchemas().size()); for (AppSearchSchema schema : request.getSchemas()) { schemaBundles.add(schema.getBundle()); } AndroidFuture<AppSearchResult> future = new AndroidFuture<>(); try { mService.setSchema(schemaBundles, forceOverride, future); mService.setSchema(schemaBundles, request.isForceOverride(), future); } catch (RemoteException e) { future.completeExceptionally(e); } Loading @@ -151,19 +128,20 @@ public class AppSearchManager { * <p>Each {@link GenericDocument}'s {@code schemaType} field must be set to the name of a * schema type previously registered via the {@link #setSchema} method. * * @param documents {@link GenericDocument}s that need to be indexed. * @return An {@link AppSearchBatchResult} mapping the document URIs to {@link Void} if they * were successfully indexed, or a {@link Throwable} describing the failure if they could * not be indexed. * @param request {@link PutDocumentsRequest} containing documents to be indexed * @return The pending result of performing this operation. The keys of the returned * {@link AppSearchBatchResult} are the URIs of the input documents. The values are * {@code null} if they were successfully indexed, or a failed {@link AppSearchResult} * otherwise. * @hide */ public AppSearchBatchResult<String, Void> putDocuments( @NonNull List<GenericDocument> documents) { public AppSearchBatchResult<String, Void> putDocuments(@NonNull PutDocumentsRequest request) { // TODO(b/146386470): Transmit these documents as a RemoteStream instead of sending them in // one big list. List<GenericDocument> documents = request.getDocuments(); List<Bundle> documentBundles = new ArrayList<>(documents.size()); for (GenericDocument document : documents) { documentBundles.add(document.getBundle()); for (int i = 0; i < documents.size(); i++) { documentBundles.add(documents.get(i).getBundle()); } AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>(); try { Loading @@ -180,15 +158,18 @@ public class AppSearchManager { * <p>You should not call this method directly; instead, use the * {@code AppSearch#getDocuments()} API provided by JetPack. * * @param uris URIs of the documents to look up. * @return An {@link AppSearchBatchResult} mapping the document URIs to * {@link GenericDocument} values if they were successfully retrieved, a {@code null} * failure if they were not found, or a {@link Throwable} failure describing the problem if * an error occurred. * @param request {@link GetByUriRequest} containing URIs to be retrieved. * @return The pending result of performing this operation. The keys of the returned * {@link AppSearchBatchResult} are the input URIs. The values are the returned * {@link GenericDocument}s on success, or a failed {@link AppSearchResult} otherwise. * URIs that are not found will return a failed {@link AppSearchResult} with a result code * of {@link AppSearchResult#RESULT_NOT_FOUND}. */ public AppSearchBatchResult<String, GenericDocument> getDocuments(@NonNull List<String> uris) { public AppSearchBatchResult<String, GenericDocument> getByUri( @NonNull GetByUriRequest request) { // TODO(b/146386470): Transmit the result documents as a RemoteStream instead of sending // them in one big list. List<String> uris = new ArrayList<>(request.getUris()); AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>(); try { mService.getDocuments(uris, future); Loading Loading @@ -300,12 +281,15 @@ public class AppSearchManager { * <p>You should not call this method directly; instead, use the {@code AppSearch#delete()} API * provided by JetPack. * * @param uris URIs of the documents to delete * @return An {@link AppSearchBatchResult} mapping each URI to a {@code null} success if * deletion was successful, to a {@code null} failure if the document did not exist, or to a * {@code throwable} failure if deletion failed for another reason. * @param request Request containing URIs to be removed. * @return The pending result of performing this operation. The keys of the returned * {@link AppSearchBatchResult} are the input URIs. The values are {@code null} on success, * or a failed {@link AppSearchResult} otherwise. URIs that are not found will return a * failed {@link AppSearchResult} with a result code of * {@link AppSearchResult#RESULT_NOT_FOUND}. */ public AppSearchBatchResult<String, Void> delete(@NonNull List<String> uris) { public AppSearchBatchResult<String, Void> removeByUri(@NonNull RemoveByUriRequest request) { List<String> uris = new ArrayList<>(request.getUris()); AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>(); try { mService.delete(uris, future); Loading
apex/appsearch/framework/java/android/app/appsearch/GetByUriRequest.java 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import android.util.ArraySet; import com.android.internal.util.Preconditions; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * Encapsulates a request to retrieve documents by namespace and URI. * * @see AppSearchManager#getByUri * @hide */ public final class GetByUriRequest { private final String mNamespace; private final Set<String> mUris; GetByUriRequest(@NonNull String namespace, @NonNull Set<String> uris) { mNamespace = namespace; mUris = uris; } /** @hide */ @NonNull public String getNamespace() { return mNamespace; } /** @hide */ @NonNull public Set<String> getUris() { return mUris; } /** Builder for {@link GetByUriRequest} objects. */ public static final class Builder { private String mNamespace = GenericDocument.DEFAULT_NAMESPACE; private final Set<String> mUris = new ArraySet<>(); private boolean mBuilt = false; /** * Sets which namespace these documents will be retrieved from. * * <p>If this is not set, it defaults to {@link GenericDocument#DEFAULT_NAMESPACE}. */ @NonNull public Builder setNamespace(@NonNull String namespace) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(namespace); mNamespace = namespace; return this; } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull String... uris) { Preconditions.checkNotNull(uris); return addUris(Arrays.asList(uris)); } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull Collection<String> uris) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(uris); mUris.addAll(uris); return this; } /** Builds a new {@link GetByUriRequest}. */ @NonNull public GetByUriRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new GetByUriRequest(mNamespace, mUris); } } }
apex/appsearch/framework/java/android/app/appsearch/PutDocumentsRequest.java 0 → 100644 +77 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import com.android.internal.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; /** * Encapsulates a request to index a document into an {@link AppSearchManager} database. * * @see AppSearchManager#putDocuments * @hide */ public final class PutDocumentsRequest { private final List<GenericDocument> mDocuments; PutDocumentsRequest(List<GenericDocument> documents) { mDocuments = documents; } /** @hide */ @NonNull public List<GenericDocument> getDocuments() { return mDocuments; } /** Builder for {@link PutDocumentsRequest} objects. */ public static final class Builder { private final List<GenericDocument> mDocuments = new ArrayList<>(); private boolean mBuilt = false; /** Adds one or more documents to the request. */ @NonNull public Builder addGenericDocument(@NonNull GenericDocument... documents) { Preconditions.checkNotNull(documents); return addGenericDocument(Arrays.asList(documents)); } /** Adds one or more documents to the request. */ @NonNull public Builder addGenericDocument(@NonNull Collection<GenericDocument> documents) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(documents); mDocuments.addAll(documents); return this; } /** Builds a new {@link PutDocumentsRequest}. */ @NonNull public PutDocumentsRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new PutDocumentsRequest(mDocuments); } } }
apex/appsearch/framework/java/android/app/appsearch/RemoveByUriRequest.java 0 → 100644 +100 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import android.util.ArraySet; import com.android.internal.util.Preconditions; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * Encapsulates a request to remove documents by namespace and URI. * * @see AppSearchManager#removeByUri * @hide */ public final class RemoveByUriRequest { private final String mNamespace; private final Set<String> mUris; RemoveByUriRequest(String namespace, Set<String> uris) { mNamespace = namespace; mUris = uris; } /** @hide */ @NonNull public String getNamespace() { return mNamespace; } /** @hide */ @NonNull public Set<String> getUris() { return mUris; } /** Builder for {@link RemoveByUriRequest} objects. */ public static final class Builder { private String mNamespace = GenericDocument.DEFAULT_NAMESPACE; private final Set<String> mUris = new ArraySet<>(); private boolean mBuilt = false; /** * Sets which namespace these documents will be removed from. * * <p>If this is not set, it defaults to {@link GenericDocument#DEFAULT_NAMESPACE}. */ @NonNull public Builder setNamespace(@NonNull String namespace) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(namespace); mNamespace = namespace; return this; } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull String... uris) { Preconditions.checkNotNull(uris); return addUris(Arrays.asList(uris)); } /** Adds one or more URIs to the request. */ @NonNull public Builder addUris(@NonNull Collection<String> uris) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(uris); mUris.addAll(uris); return this; } /** Builds a new {@link RemoveByUriRequest}. */ @NonNull public RemoveByUriRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new RemoveByUriRequest(mNamespace, mUris); } } }
apex/appsearch/framework/java/android/app/appsearch/SetSchemaRequest.java 0 → 100644 +101 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.app.appsearch; import android.annotation.NonNull; import android.util.ArraySet; import com.android.internal.util.Preconditions; import java.util.Arrays; import java.util.Collection; import java.util.Set; /** * Encapsulates a request to update the schema of an {@link AppSearchManager} database. * * @see AppSearchManager#setSchema * @hide */ public final class SetSchemaRequest { private final Set<AppSearchSchema> mSchemas; private final boolean mForceOverride; SetSchemaRequest(Set<AppSearchSchema> schemas, boolean forceOverride) { mSchemas = schemas; mForceOverride = forceOverride; } /** @hide */ @NonNull public Set<AppSearchSchema> getSchemas() { return mSchemas; } /** @hide */ public boolean isForceOverride() { return mForceOverride; } /** Builder for {@link SetSchemaRequest} objects. */ public static final class Builder { private final Set<AppSearchSchema> mSchemas = new ArraySet<>(); private boolean mForceOverride = false; private boolean mBuilt = false; /** Adds one or more types to the schema. */ @NonNull public Builder addSchema(@NonNull AppSearchSchema... schemas) { Preconditions.checkNotNull(schemas); return addSchema(Arrays.asList(schemas)); } /** Adds one or more types to the schema. */ @NonNull public Builder addSchema(@NonNull Collection<AppSearchSchema> schemas) { Preconditions.checkState(!mBuilt, "Builder has already been used"); Preconditions.checkNotNull(schemas); mSchemas.addAll(schemas); return this; } /** * Configures the {@link SetSchemaRequest} to delete any existing documents that don't * follow the new schema. * * <p>By default, this is {@code false} and schema incompatibility causes the * {@link AppSearchManager#setSchema} call to fail. * * @see AppSearchManager#setSchema */ @NonNull public Builder setForceOverride(boolean forceOverride) { mForceOverride = forceOverride; return this; } /** Builds a new {@link SetSchemaRequest}. */ @NonNull public SetSchemaRequest build() { Preconditions.checkState(!mBuilt, "Builder has already been used"); mBuilt = true; return new SetSchemaRequest(mSchemas, mForceOverride); } } }