android / android/android-test

ActivityScenario changes behavior of Navigation Component and breaks backstack

Open
#759 3 comments 4 reactions 0 assignees View on GitHub
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:
![running-from-launcher](https://user-images.githubusercontent.com/3951580/95485496-1d840a80-0992-11eb-8f07-30fe2885028c.gif)

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):
![running-test](https://user-images.githubusercontent.com/3951580/95485579-3db3c980-0992-11eb-8c06-776b24e985b9.gif)

fragmentA is never shown again

Contributor guide

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.