Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2cb02380 authored by Terry Wang's avatar Terry Wang Committed by Android (Google) Code Review
Browse files

Merge "Support Multi-User AppSearch within SystemServer"

parents aac39ed5 bcb007a9
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -51,9 +51,11 @@ public class AppSearchManager {
    public static final String DEFAULT_DATABASE_NAME = "";

    private final IAppSearchManager mService;
    private final Context mContext;

    /** @hide */
    public AppSearchManager(@NonNull IAppSearchManager service) {
    public AppSearchManager(@NonNull Context context, @NonNull IAppSearchManager service) {
        mContext = Objects.requireNonNull(context);
        mService = Objects.requireNonNull(service);
    }

@@ -137,7 +139,8 @@ public class AppSearchManager {
        Objects.requireNonNull(searchContext);
        Objects.requireNonNull(executor);
        Objects.requireNonNull(callback);
        AppSearchSession.createSearchSession(searchContext, mService, executor, callback);
        AppSearchSession.createSearchSession(
                searchContext, mService, mContext.getUserId(), executor, callback);
    }

    /**
@@ -158,7 +161,8 @@ public class AppSearchManager {
            @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) {
        Objects.requireNonNull(executor);
        Objects.requireNonNull(callback);
        GlobalSearchSession.createGlobalSearchSession(mService, executor, callback);
        GlobalSearchSession.createGlobalSearchSession(
                mService, mContext.getUserId(), executor, callback);
    }

    /**
@@ -231,6 +235,7 @@ public class AppSearchManager {
                    schemaBundles,
                    new ArrayList<>(request.getSchemasNotPlatformSurfaceable()),
                    request.isForceOverride(),
                    mContext.getUserId(),
                    new IAppSearchResultCallback.Stub() {
                        public void onResult(AppSearchResult result) {
                            future.complete(result);
@@ -271,7 +276,7 @@ public class AppSearchManager {
        }
        AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>();
        try {
            mService.putDocuments(DEFAULT_DATABASE_NAME, documentBundles,
            mService.putDocuments(DEFAULT_DATABASE_NAME, documentBundles, mContext.getUserId(),
                    new IAppSearchBatchResultCallback.Stub() {
                        public void onResult(AppSearchBatchResult result) {
                            future.complete(result);
@@ -312,6 +317,7 @@ public class AppSearchManager {
        AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>();
        try {
            mService.getDocuments(DEFAULT_DATABASE_NAME, request.getNamespace(), uris,
                    mContext.getUserId(),
                    new IAppSearchBatchResultCallback.Stub() {
                        public void onResult(AppSearchBatchResult result) {
                            future.complete(result);
@@ -412,6 +418,7 @@ public class AppSearchManager {
        AndroidFuture<AppSearchResult> future = new AndroidFuture<>();
        try {
            mService.query(DEFAULT_DATABASE_NAME, queryExpression, searchSpec.getBundle(),
                    mContext.getUserId(),
                    new IAppSearchResultCallback.Stub() {
                        public void onResult(AppSearchResult result) {
                            future.complete(result);
@@ -453,6 +460,7 @@ public class AppSearchManager {
        AndroidFuture<AppSearchBatchResult> future = new AndroidFuture<>();
        try {
            mService.removeByUri(DEFAULT_DATABASE_NAME, request.getNamespace(), uris,
                    mContext.getUserId(),
                    new IAppSearchBatchResultCallback.Stub() {
                        public void onResult(AppSearchBatchResult result) {
                            future.complete(result);
+3 −2
Original line number Diff line number Diff line
@@ -36,8 +36,9 @@ public class AppSearchManagerFrameworkInitializer {
     *     {@link SystemServiceRegistry}
     */
    public static void initialize() {
        SystemServiceRegistry.registerStaticService(
        SystemServiceRegistry.registerContextAwareService(
                Context.APP_SEARCH_SERVICE, AppSearchManager.class,
                (service) -> new AppSearchManager(IAppSearchManager.Stub.asInterface(service)));
                (context, service) ->
                        new AppSearchManager(context, IAppSearchManager.Stub.asInterface(service)));
    }
}
+17 −8
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.app.appsearch;

import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.os.Bundle;
import android.os.ParcelableException;
import android.os.RemoteException;
@@ -39,15 +40,18 @@ import java.util.function.Consumer;
 */
public final class AppSearchSession {
    private final String mDatabaseName;
    @UserIdInt
    private final int mUserId;
    private final IAppSearchManager mService;

    static void createSearchSession(
            @NonNull AppSearchManager.SearchContext searchContext,
            @NonNull IAppSearchManager service,
            @UserIdInt int userId,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<AppSearchSession>> callback) {
        AppSearchSession searchSession =
                new AppSearchSession(searchContext.mDatabaseName, service);
                new AppSearchSession(service, userId, searchContext.mDatabaseName);
        searchSession.initialize(executor, callback);
    }

@@ -57,7 +61,7 @@ public final class AppSearchSession {
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<AppSearchSession>> callback) {
        try {
            mService.initialize(new IAppSearchResultCallback.Stub() {
            mService.initialize(mUserId, new IAppSearchResultCallback.Stub() {
                public void onResult(AppSearchResult result) {
                    executor.execute(() -> {
                        if (result.isSuccess()) {
@@ -74,9 +78,11 @@ public final class AppSearchSession {
        }
    }

    private AppSearchSession(@NonNull String databaseName, @NonNull IAppSearchManager service) {
    private AppSearchSession(@NonNull IAppSearchManager service, @UserIdInt int userId,
            @NonNull String databaseName) {
        mDatabaseName = databaseName;
        mService = service;
        mUserId = userId;
    }

    /**
@@ -154,6 +160,7 @@ public final class AppSearchSession {
                    schemaBundles,
                    new ArrayList<>(request.getSchemasNotPlatformSurfaceable()),
                    request.isForceOverride(),
                    mUserId,
                    new IAppSearchResultCallback.Stub() {
                        public void onResult(AppSearchResult result) {
                            executor.execute(() -> callback.accept(result));
@@ -178,6 +185,7 @@ public final class AppSearchSession {
        try {
            mService.getSchema(
                    mDatabaseName,
                    mUserId,
                    new IAppSearchResultCallback.Stub() {
                        public void onResult(AppSearchResult result) {
                            executor.execute(() -> {
@@ -230,7 +238,7 @@ public final class AppSearchSession {
            documentBundles.add(documents.get(i).getBundle());
        }
        try {
            mService.putDocuments(mDatabaseName, documentBundles,
            mService.putDocuments(mDatabaseName, documentBundles, mUserId,
                    new IAppSearchBatchResultCallback.Stub() {
                        public void onResult(AppSearchBatchResult result) {
                            executor.execute(() -> callback.onResult(result));
@@ -269,7 +277,7 @@ public final class AppSearchSession {
        Objects.requireNonNull(callback);
        try {
            mService.getDocuments(mDatabaseName, request.getNamespace(),
                    new ArrayList<>(request.getUris()),
                    new ArrayList<>(request.getUris()), mUserId,
                    new IAppSearchBatchResultCallback.Stub() {
                        public void onResult(AppSearchBatchResult result) {
                            executor.execute(() -> {
@@ -371,7 +379,8 @@ public final class AppSearchSession {
        Objects.requireNonNull(queryExpression);
        Objects.requireNonNull(searchSpec);
        Objects.requireNonNull(executor);
        return new SearchResults(mService, mDatabaseName, queryExpression, searchSpec, executor);
        return new SearchResults(mService, mDatabaseName, queryExpression, searchSpec, mUserId,
                executor);
    }

    /**
@@ -397,7 +406,7 @@ public final class AppSearchSession {
        Objects.requireNonNull(callback);
        try {
            mService.removeByUri(mDatabaseName, request.getNamespace(),
                    new ArrayList<>(request.getUris()),
                    new ArrayList<>(request.getUris()), mUserId,
                    new IAppSearchBatchResultCallback.Stub() {
                        public void onResult(AppSearchBatchResult result) {
                            executor.execute(() -> callback.onResult(result));
@@ -440,7 +449,7 @@ public final class AppSearchSession {
        Objects.requireNonNull(executor);
        Objects.requireNonNull(callback);
        try {
            mService.removeByQuery(mDatabaseName, queryExpression, searchSpec.getBundle(),
            mService.removeByQuery(mDatabaseName, queryExpression, searchSpec.getBundle(), mUserId,
                    new IAppSearchResultCallback.Stub() {
                        public void onResult(AppSearchResult result) {
                            executor.execute(() -> callback.accept(result));
+9 −4
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ package android.app.appsearch;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.annotation.UserIdInt;
import android.os.RemoteException;

import java.util.Objects;
@@ -36,12 +37,15 @@ import java.util.function.Consumer;
public class GlobalSearchSession {

    private final IAppSearchManager mService;
    @UserIdInt
    private final int mUserId;

    static void createGlobalSearchSession(
            @NonNull IAppSearchManager service,
            @UserIdInt int userId,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) {
        GlobalSearchSession globalSearchSession = new GlobalSearchSession(service);
        GlobalSearchSession globalSearchSession = new GlobalSearchSession(service, userId);
        globalSearchSession.initialize(executor, callback);
    }

@@ -51,7 +55,7 @@ public class GlobalSearchSession {
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) {
        try {
            mService.initialize(new IAppSearchResultCallback.Stub() {
            mService.initialize(mUserId, new IAppSearchResultCallback.Stub() {
                public void onResult(AppSearchResult result) {
                    executor.execute(() -> {
                        if (result.isSuccess()) {
@@ -68,8 +72,9 @@ public class GlobalSearchSession {
        }
    }

    private GlobalSearchSession(@NonNull IAppSearchManager service) {
    private GlobalSearchSession(@NonNull IAppSearchManager service, @UserIdInt int userId) {
        mService = service;
        mUserId = userId;
    }

    /**
@@ -125,6 +130,6 @@ public class GlobalSearchSession {
        Objects.requireNonNull(searchSpec);
        Objects.requireNonNull(executor);
        return new SearchResults(mService, /*databaseName=*/null, queryExpression,
                searchSpec, executor);
                searchSpec, mUserId, executor);
    }
}
+22 −4
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ interface IAppSearchManager {
     *     surfaces.
     * @param forceOverride Whether to apply the new schema even if it is incompatible. All
     *     incompatible documents will be deleted.
     * @param userId Id of the calling user
     * @param callback {@link IAppSearchResultCallback#onResult} will be called with an
     *     {@link AppSearchResult}&lt;{@link Void}&gt;.
     */
@@ -44,6 +45,7 @@ interface IAppSearchManager {
        in List<Bundle> schemaBundles,
        in List<String> schemasNotPlatformSurfaceable,
        boolean forceOverride,
        in int userId,
        in IAppSearchResultCallback callback);


@@ -51,17 +53,19 @@ interface IAppSearchManager {
     * Retrieves the AppSearch schema for this database.
     *
     * @param databaseName  The name of the database to retrieve.
     * @param userId Id of the calling user
     * @param callback {@link IAppSearchResultCallback#onResult} will be called with an
     *     {@link AppSearchResult}&lt;{@link List}&lt;{@link Bundle}&gt;&gt;, where the value are
     *     AppSearchSchema bundle.
     */
    void getSchema(in String databaseName, in IAppSearchResultCallback callback);
    void getSchema(in String databaseName, in int userId, in IAppSearchResultCallback callback);

    /**
     * Inserts documents into the index.
     *
     * @param databaseName  The name of the database where this document lives.
     * @param documentBundes List of GenericDocument bundles.
     * @param userId Id of the calling user
     * @param callback
     *     If the call fails to start, {@link IAppSearchBatchResultCallback#onSystemError}
     *     will be called with the cause throwable. Otherwise,
@@ -72,6 +76,7 @@ interface IAppSearchManager {
    void putDocuments(
        in String databaseName,
        in List<Bundle> documentBundles,
        in int userId,
        in IAppSearchBatchResultCallback callback);

    /**
@@ -80,6 +85,7 @@ interface IAppSearchManager {
     * @param databaseName  The databaseName this document resides in.
     * @param namespace    The namespace this document resides in.
     * @param uris The URIs of the documents to retrieve
     * @param userId Id of the calling user
     * @param callback
     *     If the call fails to start, {@link IAppSearchBatchResultCallback#onSystemError}
     *     will be called with the cause throwable. Otherwise,
@@ -91,6 +97,7 @@ interface IAppSearchManager {
        in String databaseName,
        in String namespace,
        in List<String> uris,
        in int userId,
        in IAppSearchBatchResultCallback callback);

    /**
@@ -99,6 +106,7 @@ interface IAppSearchManager {
     * @param databaseName The databaseName this query for.
     * @param queryExpression String to search for
     * @param searchSpecBundle SearchSpec bundle
     * @param userId Id of the calling user
     * @param callback {@link AppSearchResult}&lt;{@link Bundle}&gt; of performing this
     *         operation.
     */
@@ -106,6 +114,7 @@ interface IAppSearchManager {
        in String databaseName,
        in String queryExpression,
        in Bundle searchSpecBundle,
        in int userId,
        in IAppSearchResultCallback callback);

    /**
@@ -114,12 +123,14 @@ interface IAppSearchManager {
     *
     * @param queryExpression String to search for
     * @param searchSpecBundle SearchSpec bundle
     * @param userId Id of the calling user
     * @param callback {@link AppSearchResult}&lt;{@link Bundle}&gt; of performing this
     *         operation.
     */
    void globalQuery(
        in String queryExpression,
        in Bundle searchSpecBundle,
        in int userId,
        in IAppSearchResultCallback callback);

    /**
@@ -127,18 +138,20 @@ interface IAppSearchManager {
     * next-page token is invalid or all pages have been returned.
     *
     * @param nextPageToken The token of pre-loaded results of previously executed query.
     * @param userId Id of the calling user
     * @param callback {@link AppSearchResult}&lt;{@link Bundle}&gt; of performing this
     *                  operation.
     */
    void getNextPage(in long nextPageToken, in IAppSearchResultCallback callback);
    void getNextPage(in long nextPageToken, in int userId, in IAppSearchResultCallback callback);

    /**
     * Invalidates the next-page token so that no more results of the related query can be returned.
     *
     * @param nextPageToken The token of pre-loaded results of previously executed query to be
     *                      Invalidated.
     * @param userId Id of the calling user
     */
    void invalidateNextPageToken(in long nextPageToken);
    void invalidateNextPageToken(in long nextPageToken, in int userId);

    /**
     * Removes documents by URI.
@@ -146,6 +159,7 @@ interface IAppSearchManager {
     * @param databaseName The databaseName the document is in.
     * @param namespace    Namespace of the document to remove.
     * @param uris The URIs of the documents to delete
     * @param userId Id of the calling user
     * @param callback
     *     If the call fails to start, {@link IAppSearchBatchResultCallback#onSystemError}
     *     will be called with the cause throwable. Otherwise,
@@ -158,6 +172,7 @@ interface IAppSearchManager {
        in String databaseName,
        in String namespace,
        in List<String> uris,
        in int userId,
        in IAppSearchBatchResultCallback callback);

    /**
@@ -166,6 +181,7 @@ interface IAppSearchManager {
     * @param databaseName The databaseName this query for.
     * @param queryExpression String to search for
     * @param searchSpecBundle SearchSpec bundle
     * @param userId Id of the calling user
     * @param callback {@link IAppSearchResultCallback#onResult} will be called with an
     *     {@link AppSearchResult}&lt;{@link Void}&gt;.
     */
@@ -173,13 +189,15 @@ interface IAppSearchManager {
        in String databaseName,
        in String queryExpression,
        in Bundle searchSpecBundle,
        in int userId,
        in IAppSearchResultCallback callback);

    /**
     * Creates and initializes AppSearchImpl for the calling app.
     *
     * @param userId Id of the calling user
     * @param callback {@link IAppSearchResultCallback#onResult} will be called with an
     *     {@link AppSearchResult}&lt;{@link Void}&gt;.
     */
    void initialize(in IAppSearchResultCallback callback);
    void initialize(in int userId, in IAppSearchResultCallback callback);
}
Loading