summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jiakai Zhang <jiakaiz@google.com> 2023-10-10 14:58:43 +0000
committer Jiakai Zhang <jiakaiz@google.com> 2023-10-12 19:55:28 +0100
commit7a6d38b3b27f662ce11b077082346f390814078b (patch)
tree74963417d2d51f4c2edb9d52ddb441ab9c93f7d8
parent1dde3e7f75aa7d82ead094517afaf4117b558dd3 (diff)
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)
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java27
1 files changed, 26 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 4157066f7e7f..3e72fe4f95b4 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();