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