From 406a5a93310b1a5b90406538a4665f7b6dc748d1 Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Mon, 29 Jun 2020 17:49:20 -0400 Subject: Sharesheet - Fix crash when suspended app is selected After selecting a suspended app, the package monitor would be unregistered even though the app would never be launched. This would cause an IllegalStateException on the next selection of any target, and crash the sharesheet. Check for a suspended target before unregistering. Fixes: 160015744 Test: manual, follow BR steps and pause an app Change-Id: I1b0c79bad0fa75aea6a543b6f8a4848720faa0c8 --- core/java/com/android/internal/app/ResolverActivity.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index fba4675a8c9f..233231cfcfdf 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -1279,13 +1279,17 @@ public class ResolverActivity extends Activity implements } private void safelyStartActivityInternal(TargetInfo cti) { - if (mPersonalPackageMonitor != null) { - mPersonalPackageMonitor.unregister(); - } - if (mWorkPackageMonitor != null) { - mWorkPackageMonitor.unregister(); + // If the target is suspended, the activity will not be successfully launched. + // Do not unregister from package manager updates in this case + if (!cti.isSuspended()) { + if (mPersonalPackageMonitor != null) { + mPersonalPackageMonitor.unregister(); + } + if (mWorkPackageMonitor != null) { + mWorkPackageMonitor.unregister(); + } + mRegistered = false; } - mRegistered = false; // If needed, show that intent is forwarded // from managed profile to owner or other way around. if (mProfileSwitchMessageId != -1) { -- cgit v1.2.3-59-g8ed1b