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

Commit c9429f43 authored by Alexander Dorokhine's avatar Alexander Dorokhine Committed by Android (Google) Code Review
Browse files

Merge "Remove PackageManagerInternal from AppSearchService." into sc-dev

parents 248d942b ad8a40a5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -205,7 +205,7 @@ public class AppSearchManager {
        AppSearchSession.createSearchSession(
                searchContext,
                mService,
                mContext.getUser().getIdentifier(),
                mContext.getUser(),
                getPackageName(),
                executor,
                callback);
@@ -228,7 +228,7 @@ public class AppSearchManager {
        Objects.requireNonNull(executor);
        Objects.requireNonNull(callback);
        GlobalSearchSession.createGlobalSearchSession(
                mService, mContext.getUser().getIdentifier(), getPackageName(), executor, callback);
                mService, mContext.getUser(), getPackageName(), executor, callback);
    }

    /** Returns the package name that should be used for uid verification. */
+6 −6
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import static android.os.ParcelFileDescriptor.MODE_READ_ONLY;
import static android.os.ParcelFileDescriptor.MODE_WRITE_ONLY;

import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.annotation.WorkerThread;
import android.app.appsearch.aidl.AppSearchResultParcel;
import android.app.appsearch.aidl.IAppSearchManager;
@@ -31,6 +30,7 @@ import android.os.Bundle;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.ArraySet;

import java.io.Closeable;
@@ -57,20 +57,20 @@ public class AppSearchMigrationHelper implements Closeable {
    private final IAppSearchManager mService;
    private final String mPackageName;
    private final String mDatabaseName;
    private final int mUserId;
    private final UserHandle mUserHandle;
    private final File mMigratedFile;
    private final Set<String> mDestinationTypes;
    private boolean mAreDocumentsMigrated = false;

    AppSearchMigrationHelper(@NonNull IAppSearchManager service,
            @UserIdInt int userId,
            @NonNull UserHandle userHandle,
            @NonNull String packageName,
            @NonNull String databaseName,
            @NonNull Set<AppSearchSchema> newSchemas) throws IOException {
        mService = Objects.requireNonNull(service);
        mUserHandle = Objects.requireNonNull(userHandle);
        mPackageName = Objects.requireNonNull(packageName);
        mDatabaseName = Objects.requireNonNull(databaseName);
        mUserId = userId;
        mMigratedFile = File.createTempFile(/*prefix=*/"appsearch", /*suffix=*/null);
        mDestinationTypes = new ArraySet<>(newSchemas.size());
        for (AppSearchSchema newSchema : newSchemas) {
@@ -105,7 +105,7 @@ public class AppSearchMigrationHelper implements Closeable {
                            .addFilterSchemas(schemaType)
                            .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
                            .build().getBundle(),
                    mUserId,
                    mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
@@ -145,7 +145,7 @@ public class AppSearchMigrationHelper implements Closeable {
        try (ParcelFileDescriptor fileDescriptor =
                     ParcelFileDescriptor.open(mMigratedFile, MODE_READ_ONLY)) {
            CompletableFuture<AppSearchResult<List<Bundle>>> future = new CompletableFuture<>();
            mService.putDocumentsFromFile(mPackageName, mDatabaseName, fileDescriptor, mUserId,
            mService.putDocumentsFromFile(mPackageName, mDatabaseName, fileDescriptor, mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
+34 −26
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package android.app.appsearch;

import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.app.appsearch.aidl.AppSearchBatchResultParcel;
import android.app.appsearch.aidl.AppSearchResultParcel;
import android.app.appsearch.aidl.IAppSearchBatchResultCallback;
@@ -30,6 +29,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
@@ -61,26 +61,25 @@ public final class AppSearchSession implements Closeable {

    private final String mPackageName;
    private final String mDatabaseName;
    @UserIdInt
    private final int mUserId;
    private final UserHandle mUserHandle;
    private final IAppSearchManager mService;

    private boolean mIsMutated = false;
    private boolean mIsClosed = false;

    /**
     * Creates a search session for the client, defined by the {@code userId} and
     * Creates a search session for the client, defined by the {@code userHandle} and
     * {@code packageName}.
     */
    static void createSearchSession(
            @NonNull AppSearchManager.SearchContext searchContext,
            @NonNull IAppSearchManager service,
            @UserIdInt int userId,
            @NonNull UserHandle userHandle,
            @NonNull String packageName,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<AppSearchSession>> callback) {
        AppSearchSession searchSession =
                new AppSearchSession(service, userId, packageName, searchContext.mDatabaseName);
                new AppSearchSession(service, userHandle, packageName, searchContext.mDatabaseName);
        searchSession.initialize(executor, callback);
    }

@@ -90,7 +89,8 @@ public final class AppSearchSession implements Closeable {
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<AppSearchSession>> callback) {
        try {
            mService.initialize(mUserId,
            mService.initialize(
                    mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchResultCallback.Stub() {
                        @Override
@@ -112,10 +112,10 @@ public final class AppSearchSession implements Closeable {
        }
    }

    private AppSearchSession(@NonNull IAppSearchManager service, @UserIdInt int userId,
    private AppSearchSession(@NonNull IAppSearchManager service, @NonNull UserHandle userHandle,
            @NonNull String packageName, @NonNull String databaseName) {
        mService = service;
        mUserId = userId;
        mUserHandle = userHandle;
        mPackageName = packageName;
        mDatabaseName = databaseName;
    }
@@ -199,7 +199,7 @@ public final class AppSearchSession implements Closeable {
            mService.getSchema(
                    mPackageName,
                    mDatabaseName,
                    mUserId,
                    mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
@@ -236,7 +236,7 @@ public final class AppSearchSession implements Closeable {
            mService.getNamespaces(
                    mPackageName,
                    mDatabaseName,
                    mUserId,
                    mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
@@ -289,7 +289,7 @@ public final class AppSearchSession implements Closeable {
            documentBundles.add(documents.get(i).getBundle());
        }
        try {
            mService.putDocuments(mPackageName, mDatabaseName, documentBundles, mUserId,
            mService.putDocuments(mPackageName, mDatabaseName, documentBundles, mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchBatchResultCallback.Stub() {
                        @Override
@@ -352,7 +352,7 @@ public final class AppSearchSession implements Closeable {
                    request.getNamespace(),
                    new ArrayList<>(request.getIds()),
                    request.getProjectionsInternal(),
                    mUserId,
                    mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchBatchResultCallback.Stub() {
                        @Override
@@ -472,7 +472,7 @@ public final class AppSearchSession implements Closeable {
        Objects.requireNonNull(searchSpec);
        Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
        return new SearchResults(mService, mPackageName, mDatabaseName, queryExpression,
                searchSpec, mUserId);
                searchSpec, mUserHandle);
    }

    /**
@@ -508,7 +508,7 @@ public final class AppSearchSession implements Closeable {
                    request.getDocumentId(),
                    request.getUsageTimestampMillis(),
                    /*systemUsage=*/ false,
                    mUserId,
                    mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
@@ -565,8 +565,12 @@ public final class AppSearchSession implements Closeable {
        Objects.requireNonNull(callback);
        Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
        try {
            mService.removeByDocumentId(mPackageName, mDatabaseName, request.getNamespace(),
                    new ArrayList<>(request.getIds()), mUserId,
            mService.removeByDocumentId(
                    mPackageName,
                    mDatabaseName,
                    request.getNamespace(),
                    new ArrayList<>(request.getIds()),
                    mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchBatchResultCallback.Stub() {
                        @Override
@@ -616,8 +620,12 @@ public final class AppSearchSession implements Closeable {
        Objects.requireNonNull(callback);
        Preconditions.checkState(!mIsClosed, "AppSearchSession has already been closed");
        try {
            mService.removeByQuery(mPackageName, mDatabaseName, queryExpression,
                    searchSpec.getBundle(), mUserId,
            mService.removeByQuery(
                    mPackageName,
                    mDatabaseName,
                    queryExpression,
                    searchSpec.getBundle(),
                    mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchResultCallback.Stub() {
                        @Override
@@ -650,7 +658,7 @@ public final class AppSearchSession implements Closeable {
            mService.getStorageInfo(
                    mPackageName,
                    mDatabaseName,
                    mUserId,
                    mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
@@ -678,8 +686,8 @@ public final class AppSearchSession implements Closeable {
    public void close() {
        if (mIsMutated && !mIsClosed) {
            try {
                mService.persistToDisk(mUserId,
                        /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime());
                mService.persistToDisk(
                        mUserHandle, /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime());
                mIsClosed = true;
            } catch (RemoteException e) {
                Log.e(TAG, "Unable to close the AppSearchSession", e);
@@ -708,7 +716,7 @@ public final class AppSearchSession implements Closeable {
                    schemasPackageAccessibleBundles,
                    request.isForceOverride(),
                    request.getVersion(),
                    mUserId,
                    mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchResultCallback.Stub() {
                        @Override
@@ -796,7 +804,7 @@ public final class AppSearchSession implements Closeable {
                        schemasPackageAccessibleBundles,
                        /*forceOverride=*/ false,
                        request.getVersion(),
                        mUserId,
                        mUserHandle,
                        /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                        new IAppSearchResultCallback.Stub() {
                            @Override
@@ -822,7 +830,7 @@ public final class AppSearchSession implements Closeable {
                }

                try (AppSearchMigrationHelper migrationHelper = new AppSearchMigrationHelper(
                        mService, mUserId, mPackageName, mDatabaseName, request.getSchemas())) {
                        mService, mUserHandle, mPackageName, mDatabaseName, request.getSchemas())) {

                    // 4. Trigger migration for all migrators.
                    // TODO(b/177266929) trigger migration for all types together rather than
@@ -848,7 +856,7 @@ public final class AppSearchSession implements Closeable {
                                schemasPackageAccessibleBundles,
                                /*forceOverride=*/ true,
                                request.getVersion(),
                                mUserId,
                                mUserHandle,
                                /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                                new IAppSearchResultCallback.Stub() {
                                    @Override
+13 −13
Original line number Diff line number Diff line
@@ -18,12 +18,12 @@ package android.app.appsearch;

import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.app.appsearch.aidl.AppSearchResultParcel;
import android.app.appsearch.aidl.IAppSearchManager;
import android.app.appsearch.aidl.IAppSearchResultCallback;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
import android.util.Log;

import com.android.internal.util.Preconditions;
@@ -45,24 +45,23 @@ public class GlobalSearchSession implements Closeable {
    private static final String TAG = "AppSearchGlobalSearchSe";

    private final String mPackageName;
    @UserIdInt
    private final int mUserId;
    private final UserHandle mUserHandle;
    private final IAppSearchManager mService;

    private boolean mIsMutated = false;
    private boolean mIsClosed = false;

    /**
     * Creates a search session for the client, defined by the {@code userId} and
     * Creates a search session for the client, defined by the {@code userHandle} and
     * {@code packageName}.
     */
    static void createGlobalSearchSession(
            @NonNull IAppSearchManager service,
            @UserIdInt int userId,
            @NonNull UserHandle userHandle,
            @NonNull String packageName,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) {
        GlobalSearchSession globalSearchSession = new GlobalSearchSession(service, userId,
        GlobalSearchSession globalSearchSession = new GlobalSearchSession(service, userHandle,
                packageName);
        globalSearchSession.initialize(executor, callback);
    }
@@ -73,7 +72,8 @@ public class GlobalSearchSession implements Closeable {
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Consumer<AppSearchResult<GlobalSearchSession>> callback) {
        try {
            mService.initialize(mUserId,
            mService.initialize(
                    mUserHandle,
                    /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime(),
                    new IAppSearchResultCallback.Stub() {
                        @Override
@@ -95,10 +95,10 @@ public class GlobalSearchSession implements Closeable {
        }
    }

    private GlobalSearchSession(@NonNull IAppSearchManager service, @UserIdInt int userId,
    private GlobalSearchSession(@NonNull IAppSearchManager service, @NonNull UserHandle userHandle,
            @NonNull String packageName) {
        mService = service;
        mUserId = userId;
        mUserHandle = userHandle;
        mPackageName = packageName;
    }

@@ -127,7 +127,7 @@ public class GlobalSearchSession implements Closeable {
        Objects.requireNonNull(searchSpec);
        Preconditions.checkState(!mIsClosed, "GlobalSearchSession has already been closed");
        return new SearchResults(mService, mPackageName, /*databaseName=*/null, queryExpression,
                searchSpec, mUserId);
                searchSpec, mUserHandle);
    }

    /**
@@ -165,7 +165,7 @@ public class GlobalSearchSession implements Closeable {
                    request.getDocumentId(),
                    request.getUsageTimestampMillis(),
                    /*systemUsage=*/ true,
                    mUserId,
                    mUserHandle,
                    new IAppSearchResultCallback.Stub() {
                        @Override
                        public void onResult(AppSearchResultParcel resultParcel) {
@@ -186,8 +186,8 @@ public class GlobalSearchSession implements Closeable {
    public void close() {
        if (mIsMutated && !mIsClosed) {
            try {
                mService.persistToDisk(mUserId,
                        /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime());
                mService.persistToDisk(
                        mUserHandle, /*binderCallStartTimeMillis=*/ SystemClock.elapsedRealtime());
                mIsClosed = true;
            } catch (RemoteException e) {
                Log.e(TAG, "Unable to close the GlobalSearchSession", e);
+8 −9
Original line number Diff line number Diff line
@@ -19,13 +19,13 @@ package android.app.appsearch;
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.appsearch.aidl.AppSearchResultParcel;
import android.app.appsearch.aidl.IAppSearchManager;
import android.app.appsearch.aidl.IAppSearchResultCallback;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
import android.util.Log;

import com.android.internal.util.Preconditions;
@@ -66,8 +66,7 @@ public class SearchResults implements Closeable {

    private final SearchSpec mSearchSpec;

    @UserIdInt
    private final int mUserId;
    private final UserHandle mUserHandle;

    private long mNextPageToken;

@@ -81,13 +80,13 @@ public class SearchResults implements Closeable {
            @Nullable String databaseName,
            @NonNull String queryExpression,
            @NonNull SearchSpec searchSpec,
            @UserIdInt int userId) {
            @NonNull UserHandle userHandle) {
        mService = Objects.requireNonNull(service);
        mPackageName = packageName;
        mDatabaseName = databaseName;
        mQueryExpression = Objects.requireNonNull(queryExpression);
        mSearchSpec = Objects.requireNonNull(searchSpec);
        mUserId = userId;
        mUserHandle = Objects.requireNonNull(userHandle);
    }

    /**
@@ -114,18 +113,18 @@ public class SearchResults implements Closeable {
                if (mDatabaseName == null) {
                    // Global query, there's no one package-database combination to check.
                    mService.globalQuery(mPackageName, mQueryExpression,
                            mSearchSpec.getBundle(), mUserId,
                            mSearchSpec.getBundle(), mUserHandle,
                            binderCallStartTimeMillis,
                            wrapCallback(executor, callback));
                } else {
                    // Normal local query, pass in specified database.
                    mService.query(mPackageName, mDatabaseName, mQueryExpression,
                            mSearchSpec.getBundle(), mUserId,
                            mSearchSpec.getBundle(), mUserHandle,
                            binderCallStartTimeMillis,
                            wrapCallback(executor, callback));
                }
            } else {
                mService.getNextPage(mNextPageToken, mUserId, wrapCallback(executor, callback));
                mService.getNextPage(mNextPageToken, mUserHandle, wrapCallback(executor, callback));
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -136,7 +135,7 @@ public class SearchResults implements Closeable {
    public void close() {
        if (!mIsClosed) {
            try {
                mService.invalidateNextPageToken(mNextPageToken, mUserId);
                mService.invalidateNextPageToken(mNextPageToken, mUserHandle);
                mIsClosed = true;
            } catch (RemoteException e) {
                Log.e(TAG, "Unable to close the SearchResults", e);
Loading