From d8505029e890415d2b894d1600112389216e0c20 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Sun, 5 Dec 2021 21:22:18 -0800 Subject: [PATCH] Add executor for the callback. This addresses the API review feedback. Bug: 208423416 Fixes: 208423416 Test: atest ChecksumsTest Change-Id: Ib10997ce29cacc6baf1158ce422f15201b36a8e8 --- core/api/current.txt | 2 +- core/java/android/content/pm/PackageInstaller.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index d3a897a98a23d..dd7c66f394ddc 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -12598,7 +12598,7 @@ package android.content.pm { method @NonNull public java.io.OutputStream openWrite(@NonNull String, long, long) throws java.io.IOException; method public void removeChildSessionId(int); method public void removeSplit(@NonNull String) throws java.io.IOException; - method public void requestChecksums(@NonNull String, int, @NonNull java.util.List, @NonNull android.content.pm.PackageManager.OnChecksumsReadyListener) throws java.security.cert.CertificateEncodingException, java.io.FileNotFoundException; + method public void requestChecksums(@NonNull String, int, @NonNull java.util.List, @NonNull java.util.concurrent.Executor, @NonNull android.content.pm.PackageManager.OnChecksumsReadyListener) throws java.security.cert.CertificateEncodingException, java.io.FileNotFoundException; method @Deprecated public void setChecksums(@NonNull String, @NonNull java.util.List, @Nullable byte[]) throws java.io.IOException; method public void setStagingProgress(float); method public void transfer(@NonNull String) throws android.content.pm.PackageManager.NameNotFoundException; diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java index 80584d161226f..9310ac5b85836 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -28,6 +28,7 @@ import static android.content.pm.Checksum.TYPE_WHOLE_SHA256; import static android.content.pm.Checksum.TYPE_WHOLE_SHA512; import android.Manifest; +import android.annotation.CallbackExecutor; import android.annotation.CurrentTimeMillisLong; import android.annotation.IntDef; import android.annotation.NonNull; @@ -1354,6 +1355,7 @@ public class PackageInstaller { * {@link PackageManager#TRUST_NONE} disables optimized * installer-enforced checksums, otherwise the list has to be * a non-empty list of certificates. + * @param executor the {@link Executor} on which to invoke the callback * @param onChecksumsReadyListener called once when the results are available. * @throws CertificateEncodingException if an encoding error occurs for trustedInstallers. * @throws FileNotFoundException if the file does not exist. @@ -1361,11 +1363,13 @@ public class PackageInstaller { */ public void requestChecksums(@NonNull String name, @Checksum.TypeMask int required, @NonNull List trustedInstallers, + @NonNull @CallbackExecutor Executor executor, @NonNull PackageManager.OnChecksumsReadyListener onChecksumsReadyListener) throws CertificateEncodingException, FileNotFoundException { Objects.requireNonNull(name); - Objects.requireNonNull(onChecksumsReadyListener); Objects.requireNonNull(trustedInstallers); + Objects.requireNonNull(executor); + Objects.requireNonNull(onChecksumsReadyListener); if (trustedInstallers == PackageManager.TRUST_ALL) { trustedInstallers = null; } else if (trustedInstallers == PackageManager.TRUST_NONE) { @@ -1381,7 +1385,8 @@ public class PackageInstaller { @Override public void onChecksumsReady(List checksums) throws RemoteException { - onChecksumsReadyListener.onChecksumsReady(checksums); + executor.execute( + () -> onChecksumsReadyListener.onChecksumsReady(checksums)); } }; mSession.requestChecksums(name, DEFAULT_CHECKSUMS, required,