From 8f5109dd4bb33912160e3d74c69f2f7b781392a9 Mon Sep 17 00:00:00 2001 From: Gavin Corkery Date: Mon, 11 Nov 2019 12:35:14 +0000 Subject: [PATCH] Don't send session committed broadcast for dry runs For staged installs, pre-reboot verification performs a dry run install. Since this dry run install is non-staged, the session committed broadcast will be sent, in some cases causing app icons to erroneously appear. Add check for this case. Test: Inspect SESSION_COMMITTED broadcasts sent for a staged install with and without this patch Bug: 139663018 Change-Id: Ib0ba29a4506cda8da1865926ae62b137e1dce8ff --- .../java/com/android/server/pm/PackageInstallerSession.java | 4 +++- 1 file changed, 3 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 6f9a918d105c9..b661a8553698c 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2186,8 +2186,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { final boolean success = (returnCode == PackageManager.INSTALL_SUCCEEDED); // Send broadcast to default launcher only if it's a new install + // TODO(b/144270665): Secure the usage of this broadcast. final boolean isNewInstall = extras == null || !extras.getBoolean(Intent.EXTRA_REPLACING); - if (success && isNewInstall && mPm.mInstallerService.okToSendBroadcasts()) { + if (success && isNewInstall && mPm.mInstallerService.okToSendBroadcasts() + && (params.installFlags & PackageManager.INSTALL_DRY_RUN) == 0) { mPm.sendSessionCommitBroadcast(generateInfo(), userId); }