From 7a6d38b3b27f662ce11b077082346f390814078b Mon Sep 17 00:00:00 2001 From: Jiakai Zhang <jiakaiz@google.com> Date: Tue, 10 Oct 2023 14:58:43 +0000 Subject: [PATCH] Revert^2 "Propagate external profile errors for `adb insta..." Revert submission 24993368-revert-24773688-dm-profile-validation-SONEGLGSYT Reason for revert: Relanding the changes with flags Reverted changes: /q/submissionid:24993368-revert-24773688-dm-profile-validation-SONEGLGSYT Bug: 278080573 Change-Id: I3e2a0f897bc9c2d9d1b7e52d9479c852ca4f5fe7 Merged-In: I3e2a0f897bc9c2d9d1b7e52d9479c852ca4f5fe7 (cherry picked from commit bd37d28b0d60a9f5838315c4d87681367fdebedd) --- .../server/pm/PackageInstallerSession.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 4157066f7e7f3..3e72fe4f95b41 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2714,15 +2714,40 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { * @return a future that will be completed when the whole process is completed. */ private CompletableFuture<Void> install() { + // `futures` either contains only one session (`this`) or contains one parent session + // (`this`) and n-1 child sessions. List<CompletableFuture<InstallResult>> futures = installNonStaged(); CompletableFuture<InstallResult>[] arr = new CompletableFuture[futures.size()]; return CompletableFuture.allOf(futures.toArray(arr)).whenComplete((r, t) -> { if (t == null) { setSessionApplied(); + var multiPackageWarnings = new ArrayList<String>(); + if (isMultiPackage()) { + // This is a parent session. Collect warnings from children. + for (CompletableFuture<InstallResult> f : futures) { + InstallResult result = f.join(); + if (result.session != this && result.extras != null) { + ArrayList<String> childWarnings = result.extras.getStringArrayList( + PackageInstaller.EXTRA_WARNINGS); + if (!ArrayUtils.isEmpty(childWarnings)) { + multiPackageWarnings.addAll(childWarnings); + } + } + } + } for (CompletableFuture<InstallResult> f : futures) { InstallResult result = f.join(); + Bundle extras = result.extras; + if (isMultiPackage() && result.session == this + && !multiPackageWarnings.isEmpty()) { + if (extras == null) { + extras = new Bundle(); + } + extras.putStringArrayList( + PackageInstaller.EXTRA_WARNINGS, multiPackageWarnings); + } result.session.dispatchSessionFinished( - INSTALL_SUCCEEDED, "Session installed", result.extras); + INSTALL_SUCCEEDED, "Session installed", extras); } } else { PackageManagerException e = (PackageManagerException) t.getCause(); -- GitLab