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

Commit 747a1e67 authored by Alexander Dorokhine's avatar Alexander Dorokhine
Browse files

Update Framework from Jetpack.

Included changes:
* b5a5eb: Make Projection APIs functional.
* 7ce5da: Persist package accessible visibility settings.
* b69a9b: Add package name filters to SearchSpec.
* e723de: Unhide SearchResult.getPackageName.
* 67a584: More verbose AppSearchResult error messages.
* c1b9db: Update builder methods to accept subclasses
* 1c5ae0: Unhide package name filters on SearchSpec.
* 8aa2b8: Make PackageIdentifier bundle-based.

Bug: 175039682
Bug: 169883602
Bug: 175747439
Bug: 174876269
Bug: 171914169
Bug: 175794710
Test: Presubmit
Change-Id: Ia54d51156774e09ed1f0694bd61bc8c25fb63810
parent 9b8f383d
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ package android.app.appsearch {
  public static final class PutDocumentsRequest.Builder {
    ctor public PutDocumentsRequest.Builder();
    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocument(@NonNull android.app.appsearch.GenericDocument...);
    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocument(@NonNull java.util.Collection<android.app.appsearch.GenericDocument>);
    method @NonNull public android.app.appsearch.PutDocumentsRequest.Builder addGenericDocument(@NonNull java.util.Collection<? extends android.app.appsearch.GenericDocument>);
    method @NonNull public android.app.appsearch.PutDocumentsRequest build();
  }

@@ -182,6 +182,7 @@ package android.app.appsearch {
  public final class SearchResult {
    method @NonNull public android.app.appsearch.GenericDocument getDocument();
    method @NonNull public java.util.List<android.app.appsearch.SearchResult.MatchInfo> getMatches();
    method @NonNull public String getPackageName();
  }

  public static final class SearchResult.MatchInfo {
@@ -204,9 +205,11 @@ package android.app.appsearch {
  }

  public final class SearchSpec {
    method @NonNull public java.util.List<java.lang.String> getFilterPackageNames();
    method public int getMaxSnippetSize();
    method @NonNull public java.util.List<java.lang.String> getNamespaces();
    method public int getOrder();
    method @NonNull public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getProjections();
    method public int getRankingStrategy();
    method public int getResultCountPerPage();
    method @NonNull public java.util.List<java.lang.String> getSchemaTypes();
@@ -215,17 +218,23 @@ package android.app.appsearch {
    method public int getTermMatch();
    field public static final int ORDER_ASCENDING = 1; // 0x1
    field public static final int ORDER_DESCENDING = 0; // 0x0
    field public static final String PROJECTION_SCHEMA_TYPE_WILDCARD = "*";
    field public static final int RANKING_STRATEGY_CREATION_TIMESTAMP = 2; // 0x2
    field public static final int RANKING_STRATEGY_DOCUMENT_SCORE = 1; // 0x1
    field public static final int RANKING_STRATEGY_NONE = 0; // 0x0
    field public static final int RANKING_STRATEGY_RELEVANCE_SCORE = 3; // 0x3
    field public static final int TERM_MATCH_EXACT_ONLY = 1; // 0x1
    field public static final int TERM_MATCH_PREFIX = 2; // 0x2
  }

  public static final class SearchSpec.Builder {
    ctor public SearchSpec.Builder();
    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterPackageNames(@NonNull java.lang.String...);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addFilterPackageNames(@NonNull java.util.Collection<java.lang.String>);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addNamespace(@NonNull java.lang.String...);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addNamespace(@NonNull java.util.Collection<java.lang.String>);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addProjection(@NonNull String, @NonNull java.lang.String...);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addProjection(@NonNull String, @NonNull java.util.Collection<java.lang.String>);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addSchemaType(@NonNull java.lang.String...);
    method @NonNull public android.app.appsearch.SearchSpec.Builder addSchemaType(@NonNull java.util.Collection<java.lang.String>);
    method @NonNull public android.app.appsearch.SearchSpec build();
+2 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.internal.infra.AndroidFuture;
import com.android.internal.util.Preconditions;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -234,6 +235,7 @@ public class AppSearchManager {
                    DEFAULT_DATABASE_NAME,
                    schemaBundles,
                    new ArrayList<>(request.getSchemasNotVisibleToSystemUi()),
                    /*schemasPackageAccessible=*/ Collections.emptyMap(),
                    request.isForceOverride(),
                    mContext.getUserId(),
                    new IAppSearchResultCallback.Stub() {
+12 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.annotation.UserIdInt;
import android.os.Bundle;
import android.os.ParcelableException;
import android.os.RemoteException;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;

@@ -161,11 +162,22 @@ public final class AppSearchSession {
        for (AppSearchSchema schema : request.getSchemas()) {
            schemaBundles.add(schema.getBundle());
        }
        Map<String, List<Bundle>> schemasPackageAccessibleBundles =
                new ArrayMap<>(request.getSchemasVisibleToPackagesInternal().size());
        for (Map.Entry<String, Set<PackageIdentifier>> entry :
                request.getSchemasVisibleToPackagesInternal().entrySet()) {
            List<Bundle> packageIdentifierBundles = new ArrayList<>(entry.getValue().size());
            for (PackageIdentifier packageIdentifier : entry.getValue()) {
                packageIdentifierBundles.add(packageIdentifier.getBundle());
            }
            schemasPackageAccessibleBundles.put(entry.getKey(), packageIdentifierBundles);
        }
        try {
            mService.setSchema(
                    mDatabaseName,
                    schemaBundles,
                    new ArrayList<>(request.getSchemasNotVisibleToSystemUi()),
                    schemasPackageAccessibleBundles,
                    request.isForceOverride(),
                    mUserId,
                    new IAppSearchResultCallback.Stub() {
+3 −1
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ interface IAppSearchManager {
     * @param schemaBundles List of {@link AppSearchSchema} bundles.
     * @param schemasNotPlatformSurfaceable Schema types that should not be surfaced on platform
     *     surfaces.
     * @param schemasPackageAccessibleBundles Schema types that are visible to the specified
     *     packages. The value List contains PackageIdentifier Bundles.
     * @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
@@ -44,11 +46,11 @@ interface IAppSearchManager {
        in String databaseName,
        in List<Bundle> schemaBundles,
        in List<String> schemasNotPlatformSurfaceable,
        in Map<String, List<Bundle>> schemasPackageAccessibleBundles,
        boolean forceOverride,
        in int userId,
        in IAppSearchResultCallback callback);


    /**
     * Retrieves the AppSearch schema for this database.
     *
+24 −12
Original line number Diff line number Diff line
@@ -17,16 +17,17 @@
package android.app.appsearch;

import android.annotation.NonNull;
import android.app.appsearch.util.BundleUtil;
import android.os.Bundle;

import com.android.internal.util.Preconditions;

import java.util.Arrays;
import java.util.Objects;

/** This class represents a uniquely identifiable package. */
public class PackageIdentifier {
    private final String mPackageName;
    private final byte[] mSha256Certificate;
    private static final String PACKAGE_NAME_FIELD = "packageName";
    private static final String SHA256_CERTIFICATE_FIELD = "sha256Certificate";

    private final Bundle mBundle;

    /**
     * Creates a unique identifier for a package.
@@ -35,18 +36,30 @@ public class PackageIdentifier {
     * @param sha256Certificate SHA256 certificate digest of the package.
     */
    public PackageIdentifier(@NonNull String packageName, @NonNull byte[] sha256Certificate) {
        mPackageName = Preconditions.checkNotNull(packageName);
        mSha256Certificate = Preconditions.checkNotNull(sha256Certificate);
        mBundle = new Bundle();
        mBundle.putString(PACKAGE_NAME_FIELD, packageName);
        mBundle.putByteArray(SHA256_CERTIFICATE_FIELD, sha256Certificate);
    }

    /** @hide */
    public PackageIdentifier(@NonNull Bundle bundle) {
        mBundle = Preconditions.checkNotNull(bundle);
    }

    /** @hide */
    @NonNull
    public Bundle getBundle() {
        return mBundle;
    }

    @NonNull
    public String getPackageName() {
        return mPackageName;
        return Preconditions.checkNotNull(mBundle.getString(PACKAGE_NAME_FIELD));
    }

    @NonNull
    public byte[] getSha256Certificate() {
        return mSha256Certificate;
        return Preconditions.checkNotNull(mBundle.getByteArray(SHA256_CERTIFICATE_FIELD));
    }

    @Override
@@ -58,12 +71,11 @@ public class PackageIdentifier {
            return false;
        }
        final PackageIdentifier other = (PackageIdentifier) obj;
        return this.mPackageName.equals(other.mPackageName)
                && Arrays.equals(this.mSha256Certificate, other.mSha256Certificate);
        return BundleUtil.deepEquals(mBundle, other.mBundle);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mPackageName, Arrays.hashCode(mSha256Certificate));
        return BundleUtil.deepHashCode(mBundle);
    }
}
Loading