Merge "Don't return result when throwing with no lifecycle" into androidx-main
diff --git a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
index 3e7fefd..0cf6486 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/ComponentActivityResultTest.kt
@@ -90,7 +90,7 @@
     }
 
     @Test
-    fun noActivityAvailableTest() {
+    fun noActivityAvailableLifecycleTest() {
         ActivityScenario.launch(RegisterInInitActivity::class.java).use { scenario ->
             var exceptionThrown = false
             scenario.withActivity {
@@ -107,6 +107,25 @@
             }
         }
     }
+
+    @Test
+    fun noActivityAvailableNoLifecycleTest() {
+        ActivityScenario.launch(RegisterInInitActivity::class.java).use { scenario ->
+            var exceptionThrown = false
+            scenario.withActivity {
+                try {
+                    launcherNoLifecycle.launch(Intent("no action"))
+                } catch (e: ActivityNotFoundException) {
+                    exceptionThrown = true
+                }
+            }
+
+            scenario.withActivity {
+                assertThat(exceptionThrown).isTrue()
+                assertThat(launchCount).isEqualTo(0)
+            }
+        }
+    }
 }
 
 class PassThroughActivity : ComponentActivity() {
@@ -175,12 +194,16 @@
 
 class RegisterInInitActivity : ComponentActivity() {
     var launcher: ActivityResultLauncher<Intent>
+    val launcherNoLifecycle: ActivityResultLauncher<Intent>
     var launchCount = 0
 
     init {
         launcher = registerForActivityResult(StartActivityForResult()) {
             launchCount++
         }
+        launcherNoLifecycle = activityResultRegistry.register("test", StartActivityForResult()) {
+            launchCount++
+        }
     }
 }
 
diff --git a/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java b/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
index 1a15c7e..7333e3e 100644
--- a/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
+++ b/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
@@ -242,7 +242,12 @@
                             + "before calling launch().");
                 }
                 mLaunchedKeys.add(key);
-                onLaunch(innerCode, contract, input, options);
+                try {
+                    onLaunch(innerCode, contract, input, options);
+                } catch (Exception e) {
+                    mLaunchedKeys.remove(key);
+                    throw e;
+                }
             }
 
             @Override