Skip to content

Commit 37c5fb8

Browse files
brettchabotcopybara-androidxtest
authored andcommitted
Use FLAG_IMMUTABLE instead of FLAG_MUTABLE for ActivityScenario pending implicit intents.
This fixes using ActivityScenario#launchActivityForResult with an implicit Intent when targetSdk = 34. Fixes #2193 PiperOrigin-RevId: 628490334
1 parent 10abebe commit 37c5fb8

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

core/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66

77
**Bug Fixes**
88

9-
* make ViewCapture use ControlledLooper API instead of hardcoding is Robolectric check
9+
* Make ViewCapture use ControlledLooper API instead of hardcoding is Robolectric check
10+
* Fix using ActivityScenario#launchActivityForResult with an implicit Intent
1011

1112
**New Features**
1213

core/java/androidx/test/core/app/InstrumentationActivityInvoker.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,12 @@ public void startActivityForResult(Intent intent, @Nullable Bundle activityOptio
445445

446446
activityOptionsBundle = optInToGrantBalPrivileges(activityOptionsBundle);
447447

448+
// make an immutable intent if its implicit
449+
int intentMutability =
450+
intent.getPackage() == null && intent.getComponent() == null
451+
? PendingIntent.FLAG_IMMUTABLE
452+
: PendingIntent.FLAG_MUTABLE;
453+
448454
// Note: Instrumentation.startActivitySync(Intent) cannot be used here because BootstrapActivity
449455
// may start in different process. Also, we use PendingIntent because the target activity may
450456
// set "exported" attribute to false so that it prohibits starting the activity outside of their
@@ -458,7 +464,7 @@ public void startActivityForResult(Intent intent, @Nullable Bundle activityOptio
458464
getApplicationContext(),
459465
/* requestCode= */ 0,
460466
intent,
461-
/* flags= */ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE))
467+
/* flags= */ PendingIntent.FLAG_UPDATE_CURRENT | intentMutability))
462468
.putExtra(TARGET_ACTIVITY_OPTIONS_BUNDLE_KEY, activityOptionsBundle);
463469

464470
getApplicationContext().startActivity(bootstrapIntent, activityOptionsBundle);

core/javatests/androidx/test/core/app/ActivityScenarioTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,15 @@ public void launch_intentWithPackageName() {
540540
assertThat(activityScenario).isNotNull();
541541
}
542542

543+
@Test
544+
public void launchActivityForResult_intentWithAction() {
545+
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("scenario://test"));
546+
547+
ActivityScenario<IntentActivity> activityScenario =
548+
ActivityScenario.launchActivityForResult(intent);
549+
assertThat(activityScenario).isNotNull();
550+
}
551+
543552
private static Stage lastLifeCycleTransition(Activity activity) {
544553
return ActivityLifecycleMonitorRegistry.getInstance().getLifecycleStageOf(activity);
545554
}

0 commit comments

Comments
 (0)