Revert "Implement getDocuments() support in AppSearchImpl."

Revert "Add CTS tests for AppSearch.getDocuments APIs."

Revert submission 10081469-060-get-impl

Reason for revert: Breaks build due to collision with ag/10111175
Reverted Changes:
I013ac2f01: Implement getDocuments() support in AppSearchImpl....
Ia518a91fe: Add CTS tests for AppSearch.getDocuments APIs.

Change-Id: Ib6437eb41c53f7bf00aac7951b427455982f2247
diff --git a/apex/appsearch/framework/java/android/app/appsearch/AppSearchManager.java b/apex/appsearch/framework/java/android/app/appsearch/AppSearchManager.java
index be59b82..15c3368 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/AppSearchManager.java
+++ b/apex/appsearch/framework/java/android/app/appsearch/AppSearchManager.java
@@ -24,7 +24,6 @@
 
 import com.android.internal.infra.AndroidFuture;
 
-import com.google.android.icing.proto.DocumentProto;
 import com.google.android.icing.proto.SchemaProto;
 import com.google.android.icing.proto.SearchResultProto;
 import com.google.android.icing.proto.SearchSpecProto;
@@ -182,53 +181,6 @@
     }
 
     /**
-     * Retrieves {@link android.app.appsearch.AppSearch.Document}s by URI.
-     *
-     * <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.
-     * @param executor Executor on which to invoke the callback.
-     * @param callback Callback to receive the documents or error.
-     */
-    public void getDocuments(
-            @NonNull List<String> uris,
-            @NonNull @CallbackExecutor Executor executor,
-            @NonNull BiConsumer<List<AppSearch.Document>, ? super Throwable> callback) {
-        AndroidFuture<List<byte[]>> future = new AndroidFuture<>();
-        future.whenCompleteAsync((documentProtos, err) -> {
-            if (err != null) {
-                callback.accept(null, err);
-                return;
-            }
-            if (documentProtos != null) {
-                List<AppSearch.Document> results = new ArrayList<>(documentProtos.size());
-                for (int i = 0; i < documentProtos.size(); i++) {
-                    DocumentProto documentProto;
-                    try {
-                        documentProto = DocumentProto.parseFrom(documentProtos.get(i));
-                    } catch (InvalidProtocolBufferException e) {
-                        callback.accept(null, e);
-                        return;
-                    }
-                    results.add(new AppSearch.Document(documentProto));
-                }
-                callback.accept(results, null);
-                return;
-            }
-            // Nothing was supplied in the future at all
-            callback.accept(null, new IllegalStateException(
-                    "Unknown failure occurred while retrieving documents"));
-        }, executor);
-        // TODO(b/146386470) stream uris?
-        try {
-            mService.getDocuments(uris.toArray(new String[uris.size()]), future);
-        } catch (RemoteException e) {
-            future.completeExceptionally(e);
-        }
-    }
-
-    /**
      * This method searches for documents based on a given query string. It also accepts
      * specifications regarding how to search and format the results.
      *
@@ -285,6 +237,7 @@
                 callback.accept(null, err);
                 return;
             }
+
             if (searchResultBytes != null) {
                 SearchResultProto searchResultProto;
                 try {
@@ -304,10 +257,12 @@
                 callback.accept(searchResults, null);
                 return;
             }
+
             // Nothing was supplied in the future at all
             callback.accept(
                     null, new IllegalStateException("Unknown failure occurred while querying"));
         }, executor);
+
         try {
             SearchSpecProto searchSpecProto = searchSpec.getSearchSpecProto();
             searchSpecProto = searchSpecProto.toBuilder().setQuery(queryExpression).build();
diff --git a/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl b/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl
index b800825..eef41ed 100644
--- a/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl
+++ b/apex/appsearch/framework/java/android/app/appsearch/IAppSearchManager.aidl
@@ -47,16 +47,6 @@
     void putDocuments(in List documentsBytes, in AndroidFuture<AppSearchBatchResult> callback);
 
     /**
-     * Retrieves documents from the index.
-     *
-     * @param uris The URIs of the documents to retrieve
-     * @param callback {@link AndroidFuture}&lt;{@link List}&lt;byte[]&gt;&gt;. Will be completed
-     *     with a {@link List} containing serialized DocumentProtos, or completed exceptionally if
-     *     get fails.
-     */
-    void getDocuments(in String[] uris, in AndroidFuture callback);
-
-    /**
      * Searches a document based on a given specifications.
      *
      * @param searchSpecBytes Serialized SearchSpecProto.
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 2608e84..6293ee7 100644
--- a/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java
+++ b/apex/appsearch/service/java/com/android/server/appsearch/AppSearchManagerService.java
@@ -35,7 +35,6 @@
 import com.google.android.icing.proto.SearchSpecProto;
 import com.google.android.icing.protobuf.InvalidProtocolBufferException;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -104,30 +103,6 @@
                 Binder.restoreCallingIdentity(callingIdentity);
             }
         }
-
-        @Override
-        public void getDocuments(String[] uris, AndroidFuture callback) {
-            Preconditions.checkNotNull(uris);
-            Preconditions.checkNotNull(callback);
-            int callingUid = Binder.getCallingUidOrThrow();
-            int callingUserId = UserHandle.getUserId(callingUid);
-            long callingIdentity = Binder.clearCallingIdentity();
-            try {
-                AppSearchImpl impl = ImplInstanceManager.getInstance(getContext(), callingUserId);
-                // Contains serialized DocumentProto. byte[][] is not transmissible via Binder.
-                List<byte[]> results = new ArrayList<>(uris.length);
-                for (String uri : uris) {
-                    DocumentProto result = impl.getDocument(callingUid, uri);
-                    results.add(result.toByteArray());
-                }
-                callback.complete(results);
-            } catch (Throwable t) {
-                callback.completeExceptionally(t);
-            } finally {
-                Binder.restoreCallingIdentity(callingIdentity);
-            }
-        }
-
         // TODO(sidchhabra):Init FakeIcing properly.
         // TODO(sidchhabra): Do this in a threadpool.
         @Override
diff --git a/apex/appsearch/service/java/com/android/server/appsearch/impl/AppSearchImpl.java b/apex/appsearch/service/java/com/android/server/appsearch/impl/AppSearchImpl.java
index 7442d06..04b4b14 100644
--- a/apex/appsearch/service/java/com/android/server/appsearch/impl/AppSearchImpl.java
+++ b/apex/appsearch/service/java/com/android/server/appsearch/impl/AppSearchImpl.java
@@ -17,7 +17,6 @@
 package com.android.server.appsearch.impl;
 
 import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.annotation.UserIdInt;
 import android.content.Context;
 
@@ -107,65 +106,30 @@
         // Rewrite the type names to include the app's prefix
         String typePrefix = getTypePrefix(callingUid);
         DocumentProto.Builder documentBuilder = origDocument.toBuilder();
-        rewriteDocumentTypes(typePrefix, documentBuilder, /*add=*/ true);
+        rewriteDocumentTypes(typePrefix, documentBuilder);
         mFakeIcing.put(documentBuilder.build());
     }
 
     /**
-     * Retrieves a document from the AppSearch index by URI.
-     *
-     * @param callingUid The uid of the app calling AppSearch.
-     * @param uri The URI of the document to get.
-     * @return The Document contents, or {@code null} if no such URI exists in the system.
-     */
-    @Nullable
-    public DocumentProto getDocument(int callingUid, @NonNull String uri) {
-        String typePrefix = getTypePrefix(callingUid);
-        DocumentProto document = mFakeIcing.get(uri);
-        // Rewrite the type names to remove the app's prefix
-        DocumentProto.Builder documentBuilder = document.toBuilder();
-        rewriteDocumentTypes(typePrefix, documentBuilder, /*add=*/ false);
-        return documentBuilder.build();
-    }
-
-    /**
-     * Rewrites all types mentioned anywhere in {@code documentBuilder} to prepend or remove
+     * Rewrites all types mentioned anywhere in {@code documentBuilder} to prepend
      * {@code typePrefix}.
      *
-     * @param typePrefix The prefix to add or remove
+     * @param typePrefix The prefix to add
      * @param documentBuilder The document to mutate
-     * @param add Whether to add typePrefix to the types. If {@code false}, typePrefix will be
-     *     removed from the types.
-     * @throws IllegalArgumentException If {@code add=false} and the document has a type that
-     *     doesn't start with {@code typePrefix}.
      */
     @VisibleForTesting
     void rewriteDocumentTypes(
             @NonNull String typePrefix,
-            @NonNull DocumentProto.Builder documentBuilder,
-            boolean add) {
-        // Rewrite the type name to include/remove the app's prefix
-        String newSchema;
-        if (add) {
-            newSchema = typePrefix + documentBuilder.getSchema();
-        } else {
-            newSchema = removePrefix(typePrefix, documentBuilder.getSchema());
-        }
+            @NonNull DocumentProto.Builder documentBuilder) {
+        // Rewrite the type name to include the app's prefix
+        String newSchema = typePrefix + documentBuilder.getSchema();
         documentBuilder.setSchema(newSchema);
 
-        // Add/remove namespace. If we ever allow users to set their own namespaces, this will have
+        // Add namespace. If we ever allow users to set their own namespaces, this will have
         // to change to prepend the prefix instead of setting the whole namespace. We will also have
         // to store the namespaces in a map similar to the type map so we can rewrite queries with
         // empty namespaces.
-        if (add) {
-            documentBuilder.setNamespace(typePrefix);
-        } else if (!documentBuilder.getNamespace().equals(typePrefix)) {
-            throw new IllegalStateException(
-                    "Unexpected namespace \"" + documentBuilder.getNamespace()
-                            + "\" (expected \"" + typePrefix + "\")");
-        } else {
-            documentBuilder.clearNamespace();
-        }
+        documentBuilder.setNamespace(typePrefix);
 
         // Recurse into derived documents
         for (int propertyIdx = 0;
@@ -178,7 +142,7 @@
                 for (int documentIdx = 0; documentIdx < documentCount; documentIdx++) {
                     DocumentProto.Builder derivedDocumentBuilder =
                             propertyBuilder.getDocumentValues(documentIdx).toBuilder();
-                    rewriteDocumentTypes(typePrefix, derivedDocumentBuilder, add);
+                    rewriteDocumentTypes(typePrefix, derivedDocumentBuilder);
                     propertyBuilder.setDocumentValues(documentIdx, derivedDocumentBuilder);
                 }
                 documentBuilder.setProperties(propertyIdx, propertyBuilder);
@@ -201,13 +165,4 @@
         }
         return callingUidName + "@" + mUserId + "/";
     }
-
-    @NonNull
-    private static String removePrefix(@NonNull String prefix, @NonNull String input) {
-        if (!input.startsWith(prefix)) {
-            throw new IllegalArgumentException(
-                    "Input \"" + input + "\" does not start with \"" + prefix + "\"");
-        }
-        return input.substring(prefix.length());
-    }
 }