From 1e5cf8f1ff12975fbf6ebbd44a39e886dbf80bd0 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Thu, 29 Apr 2021 16:17:58 -0700 Subject: [PATCH] Customer API feedback. Use two separate interfaces for flags and single value. This produces correct API documentation. Bug: 160605420 Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest PackageManagerServiceTest ChecksumsTest Change-Id: I9a7eaf86af558d8dcfd1636a4baf6a28e2ee79b1 --- .../app/ApplicationPackageManager.java | 2 +- core/java/android/content/pm/ApkChecksum.java | 6 +++--- core/java/android/content/pm/Checksum.java | 21 +++++++++++++++---- .../android/content/pm/PackageManager.java | 2 +- .../content/pm/PackageManagerInternal.java | 2 +- .../com/android/server/pm/ApkChecksums.java | 16 +++++++------- .../server/pm/PackageManagerService.java | 8 +++---- 7 files changed, 35 insertions(+), 22 deletions(-) diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java index dba62b9d3b63d..5a70f925fc02f 100644 --- a/core/java/android/app/ApplicationPackageManager.java +++ b/core/java/android/app/ApplicationPackageManager.java @@ -881,7 +881,7 @@ public class ApplicationPackageManager extends PackageManager { @Override public void requestChecksums(@NonNull String packageName, boolean includeSplits, - @Checksum.Type int required, @NonNull List trustedInstallers, + @Checksum.TypeMask int required, @NonNull List trustedInstallers, @NonNull OnChecksumsReadyListener onChecksumsReadyListener) throws CertificateEncodingException, NameNotFoundException { Objects.requireNonNull(packageName); diff --git a/core/java/android/content/pm/ApkChecksum.java b/core/java/android/content/pm/ApkChecksum.java index eca48eca9e4be..d550f411f6f7c 100644 --- a/core/java/android/content/pm/ApkChecksum.java +++ b/core/java/android/content/pm/ApkChecksum.java @@ -118,7 +118,7 @@ public final class ApkChecksum implements Parcelable { - // Code below generated by codegen v1.0.15. + // Code below generated by codegen v1.0.23. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code @@ -235,8 +235,8 @@ public final class ApkChecksum implements Parcelable { }; @DataClass.Generated( - time = 1601589269293L, - codegenVersion = "1.0.15", + time = 1619810171079L, + codegenVersion = "1.0.23", sourceFile = "frameworks/base/core/java/android/content/pm/ApkChecksum.java", inputSignatures = "private final @android.annotation.Nullable java.lang.String mSplitName\nprivate final @android.annotation.NonNull android.content.pm.Checksum mChecksum\nprivate final @android.annotation.Nullable java.lang.String mInstallerPackageName\nprivate final @android.annotation.Nullable byte[] mInstallerCertificate\npublic @android.content.pm.Checksum.Type int getType()\npublic @android.annotation.NonNull byte[] getValue()\npublic @android.annotation.Nullable byte[] getInstallerCertificateBytes()\npublic @android.annotation.Nullable java.security.cert.Certificate getInstallerCertificate()\nclass ApkChecksum extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genHiddenConstructor=true)") @Deprecated diff --git a/core/java/android/content/pm/Checksum.java b/core/java/android/content/pm/Checksum.java index 4f4898af278b1..ff17496c74579 100644 --- a/core/java/android/content/pm/Checksum.java +++ b/core/java/android/content/pm/Checksum.java @@ -113,7 +113,7 @@ public final class Checksum implements Parcelable { public static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512 = 0x00000040; /** @hide */ - @IntDef(flag = true, prefix = {"TYPE_"}, value = { + @IntDef(prefix = {"TYPE_"}, value = { TYPE_WHOLE_MERKLE_ROOT_4K_SHA256, TYPE_WHOLE_MD5, TYPE_WHOLE_SHA1, @@ -125,6 +125,19 @@ public final class Checksum implements Parcelable { @Retention(RetentionPolicy.SOURCE) public @interface Type {} + /** @hide */ + @IntDef(flag = true, prefix = {"TYPE_"}, value = { + TYPE_WHOLE_MERKLE_ROOT_4K_SHA256, + TYPE_WHOLE_MD5, + TYPE_WHOLE_SHA1, + TYPE_WHOLE_SHA256, + TYPE_WHOLE_SHA512, + TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256, + TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface TypeMask {} + /** * Serialize checksum to the stream in binary format. * @hide @@ -163,7 +176,7 @@ public final class Checksum implements Parcelable { - // Code below generated by codegen v1.0.22. + // Code below generated by codegen v1.0.23. // // DO NOT MODIFY! // CHECKSTYLE:OFF Generated code @@ -263,8 +276,8 @@ public final class Checksum implements Parcelable { }; @DataClass.Generated( - time = 1611601571576L, - codegenVersion = "1.0.22", + time = 1619810358402L, + codegenVersion = "1.0.23", sourceFile = "frameworks/base/core/java/android/content/pm/Checksum.java", inputSignatures = "public static final int TYPE_WHOLE_MERKLE_ROOT_4K_SHA256\npublic static final @java.lang.Deprecated int TYPE_WHOLE_MD5\npublic static final @java.lang.Deprecated int TYPE_WHOLE_SHA1\npublic static final @java.lang.Deprecated int TYPE_WHOLE_SHA256\npublic static final @java.lang.Deprecated int TYPE_WHOLE_SHA512\npublic static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA256\npublic static final int TYPE_PARTIAL_MERKLE_ROOT_1M_SHA512\nprivate final @android.content.pm.Checksum.Type int mType\nprivate final @android.annotation.NonNull byte[] mValue\npublic static void writeToStream(java.io.DataOutputStream,android.content.pm.Checksum)\npublic static @android.annotation.NonNull android.content.pm.Checksum readFromStream(java.io.DataInputStream)\nclass Checksum extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genConstDefs=false)") @Deprecated diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 07d8478da553e..a1d419e821746 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -8711,7 +8711,7 @@ public abstract class PackageManager { * @throws NameNotFoundException if a package with the given name cannot be found on the system. */ public void requestChecksums(@NonNull String packageName, boolean includeSplits, - @Checksum.Type int required, @NonNull List trustedInstallers, + @Checksum.TypeMask int required, @NonNull List trustedInstallers, @NonNull OnChecksumsReadyListener onChecksumsReadyListener) throws CertificateEncodingException, NameNotFoundException { throw new UnsupportedOperationException("requestChecksums not implemented in subclass"); diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index 816c50dde2a80..76a6c0eecd3e6 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -1133,7 +1133,7 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP * @param handler to use for postponed calculations. */ public abstract void requestChecksums(@NonNull String packageName, boolean includeSplits, - @Checksum.Type int optional, @Checksum.Type int required, + @Checksum.TypeMask int optional, @Checksum.TypeMask int required, @Nullable List trustedInstallers, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, int userId, @NonNull Executor executor, @NonNull Handler handler); diff --git a/services/core/java/com/android/server/pm/ApkChecksums.java b/services/core/java/com/android/server/pm/ApkChecksums.java index afce23fe76478..28511070fc8e5 100644 --- a/services/core/java/com/android/server/pm/ApkChecksums.java +++ b/services/core/java/com/android/server/pm/ApkChecksums.java @@ -303,8 +303,8 @@ public class ApkChecksums { * @param onChecksumsReadyListener to receive the resulting checksums */ public static void getChecksums(List> filesToChecksum, - @Checksum.Type int optional, - @Checksum.Type int required, + @Checksum.TypeMask int optional, + @Checksum.TypeMask int required, @Nullable String installerPackageName, @Nullable Certificate[] trustedInstallers, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, @@ -331,7 +331,7 @@ public class ApkChecksums { private static void processRequiredChecksums(List> filesToChecksum, List> result, - @Checksum.Type int required, + @Checksum.TypeMask int required, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, @NonNull Injector injector, long startTime) { @@ -382,7 +382,7 @@ public class ApkChecksums { * @param checksums resulting checksums */ private static void getAvailableApkChecksums(String split, File file, - @Checksum.Type int types, + @Checksum.TypeMask int types, @Nullable String installerPackageName, @Nullable Certificate[] trustedInstallers, Map checksums, @@ -415,7 +415,7 @@ public class ApkChecksums { } private static void getInstallerChecksums(String split, File file, - @Checksum.Type int types, + @Checksum.TypeMask int types, @Nullable String installerPackageName, @Nullable Certificate[] trustedInstallers, Map checksums, @@ -523,7 +523,7 @@ public class ApkChecksums { * Whether the file is available for checksumming or we need to wait. */ private static boolean needToWait(File file, - @Checksum.Type int types, + @Checksum.TypeMask int types, Map checksums, @NonNull Injector injector) throws IOException { if (!isRequired(TYPE_WHOLE_MERKLE_ROOT_4K_SHA256, types, checksums) @@ -564,7 +564,7 @@ public class ApkChecksums { * @param checksums resulting checksums */ private static void getRequiredApkChecksums(String split, File file, - @Checksum.Type int types, + @Checksum.TypeMask int types, Map checksums) { final String filePath = file.getAbsolutePath(); @@ -596,7 +596,7 @@ public class ApkChecksums { } private static boolean isRequired(@Checksum.Type int type, - @Checksum.Type int types, Map checksums) { + @Checksum.TypeMask int types, Map checksums) { if ((types & type) == 0) { return false; } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 51288de09c0df..263a8f826a4bb 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -5707,8 +5707,8 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void requestChecksums(@NonNull String packageName, boolean includeSplits, - @Checksum.Type int optional, - @Checksum.Type int required, @Nullable List trustedInstallers, + @Checksum.TypeMask int optional, + @Checksum.TypeMask int required, @Nullable List trustedInstallers, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, int userId) { requestChecksumsInternal(packageName, includeSplits, optional, required, trustedInstallers, onChecksumsReadyListener, userId, mInjector.getBackgroundExecutor(), @@ -5716,7 +5716,7 @@ public class PackageManagerService extends IPackageManager.Stub } private void requestChecksumsInternal(@NonNull String packageName, boolean includeSplits, - @Checksum.Type int optional, @Checksum.Type int required, + @Checksum.TypeMask int optional, @Checksum.TypeMask int required, @Nullable List trustedInstallers, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, int userId, @NonNull Executor executor, @NonNull Handler handler) { @@ -27239,7 +27239,7 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void requestChecksums(@NonNull String packageName, boolean includeSplits, - @Checksum.Type int optional, @Checksum.Type int required, + @Checksum.TypeMask int optional, @Checksum.TypeMask int required, @Nullable List trustedInstallers, @NonNull IOnChecksumsReadyListener onChecksumsReadyListener, int userId, @NonNull Executor executor, @NonNull Handler handler) {