android / android/android-test
ActivityScenario changes behavior of Navigation Component and breaks backstack
- Dominant language
- Java
- Stars
- 1.2k
- Forks
- 342
- Avg merge
- 11h 29m
- Merged PRs (30d)
- 2
Description
### Description
When using `ActivityScenario`, backstack doesn't work as expected when launching deeplinks.
### Steps to Reproduce
Please see the repro project at https://github.com/lwasyl/activity-scenario-navigation-issue.
1. Navigation library is set up with navigation graph that defines deeplinks
2. Press the button to display a notification. The notification opens the app on FragmentB, with fragmentA in the backstack.
3. Press back button
### Expected Results
Fragment A is visible, as it's the previous one on the backstack.
### Actual Results
When starting main activity normally (via launcher), backstack works as expected: after clicking the notification, fragment B is visible. Then, after pressing back button, fragment A is visible.
When starting main activity via `ActivityScenario`, backstack doesn't work as expected: after clicking the notification, fragment B is visible, however after pressing back button, _app exits_.
Please note that the behavior was correct (that is, consistent with how the app behaves outside the tests) with `ActivityTestRule`, which is now deprecated. There's no clear migration path to test the now-failing case with `ActivityScenario`.
### AndroidX Test and Android OS Versions
`androidx.test.ext:junit-ktx:1.1.2`
Checked on various emulators and it doesn't seem to be related to OS version. Reproduced on API 26, 29, 30 (https://github.com/lwasyl/activity-scenario-navigation-issue/actions/runs/295793564)
### Link to a public git repo demonstrating the problem:
https://github.com/lwasyl/activity-scenario-navigation-issue
Here's how the app behaves normally:

When pressing back, app properly cycles through the backstack.
Here's UI tests that uses `ActivityScenario` and performs exactly the same steps as I did manually in the gif above (run the main activity, press button, press on notification, press back button):

fragmentA is never shown again
Contributor guide
Research direction
Start with the linked repro project and its UI test using ActivityScenario, then compare its lifecycle and backstack behavior with the normal launcher flow and the deprecated ActivityTestRule. Reproduce the notification deeplink on the listed API levels and trace why pressing back exits instead of showing FragmentA; done means the test flow matches the normal app behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, java
- Domain
- mobile-dev, testing
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100