Skip to content

fix: exit pager animation - #1180

Draft
troZee wants to merge 3 commits into
mainfrom
fix/exit-pager-animation
Draft

troZee wants to merge 3 commits into
mainfrom
fix/exit-pager-animation

Conversation

@troZee

@troZee troZee commented Oct 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

Test Plan

What's required for testing (prerequisites)?

What are the steps to reproduce (after prerequisites)?

Compatibility

OS Implemented
iOS ✅❌
Android ✅❌

Checklist

  • I have tested this on a device and a simulator
  • I added the documentation in README.md
  • I updated the typed files (TS and Flow)

Copilot AI balanced review requested due to automatic review settings October 14, 2026 07:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Child pages are still removed before deferred lifecycle destruction, and the regression lacks automated coverage.

1 open finding
What changed in this PR

Defers Android Compose pager disposal during native-stack exit animations and adds a reproduction example.

Changes:

  • Defers lifecycle destruction until window detachment.
  • Adds an exit-animation example and navigation routes.
  • Provides test IDs for regression testing.
File Description
ComposePagerView.kt Implements deferred disposal.
ExitAnimationExample.tsx Adds the reproduction flow.
App.tsx Registers the example routes.

🧠 Review effort: Balanced


💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +135 to +137
if (isDisposePending) {
isDisposePending = false
composeLifecycleOwner.destroy()
@troZee

troZee commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator Author

After:

Screen.Recording.2026-10-14.at.09.34.59.mov

@github-actions

Copy link
Copy Markdown

🟢 e2e: 14 passed

All 14 tests in 10 files
Test Time
🟢 tests/basic-pager.e2e.ts · 3 passed 1m 43s
🟢 basic pager › in LTR › pages horizontally 37.0s
🟢 basic pager › in LTR › pages vertically 23.3s
🟢 basic pager › in RTL › pages horizontally with the reversed gesture 42.4s
🟢 tests/issues/issue-1083-modal-set-page.e2e.ts · 1 passed 14.9s
🟢 setPage called behind a native-stack modal lands on the requested page 14.9s
🟢 tests/issues/issue-1098-nested-pager.e2e.ts · 1 passed 13.9s
🟢 outer pager stays responsive after its page count changes around a nested pager 13.9s
🟢 tests/issues/issue-1154-page-change-focus.e2e.ts · 3 passed 44.4s
🟢 leaving a page with setPage blurs its input 13.8s
🟢 leaving a page with a swipe blurs its input 11.1s
🟢 an input focused on the new page keeps focus 19.5s
🟢 tests/material-top-bar.e2e.ts · 1 passed 11.8s
🟢 material top tabs survive a native-stack push and pop 11.8s
🟢 tests/nested-pager-view.e2e.ts · 1 passed 11.4s
🟢 nested horizontal and vertical pagers scroll independently 11.4s
🟢 tests/on-page-selected.e2e.ts · 1 passed 13.4s
🟢 onPageSelected fires an alert for every page change 13.4s
🟢 tests/scrollable-pager-view.e2e.ts · 1 passed 17.3s
🟢 pager inside a ScrollView keeps its page across vertical scrolls 17.3s
🟢 tests/smoke.e2e.ts · 1 passed 9.2s
🟢 horizontal pager pages with the panel buttons 9.2s
🟢 tests/tab-view-inside-scroll-view.e2e.ts · 1 passed 14.2s
🟢 TabView inside a ScrollView swipes tabs and scrolls the page 14.2s

e2e 0.18.0 · 4m 14s · android · run artifacts

@github-actions

Copy link
Copy Markdown

🔴 e2e: 1 failed, 12 passed

🔴 basic pager › in LTR › pages horizontally
tests/support/app.ts:33

ENGINE_FAILURE at step 5 of 5: locator.tap getByTestId("example-basic-horizontal"), after 4.5s

perform tap failed: the iOS automation runner is still finishing a command that overran its watchdog (session e2e-ios-0 on 4E3A6BB3-F417-4829-8DF5-0EA652541F40): The iOS runner is still finishing a previous command that exceeded its execution watchdog (usually an accessibility capture on a heavy or animating screen). The app is fine. Wait a few seconds and rerun. If the next run meets it again, stop the daemon (`npx agent-device daemon stop`) and reboot the simulator (`xcrun simctl shutdown <udid>`, then `boot`).

  • Failed on both attempts: ACTION_FAILED at step 1, then ENGINE_FAILURE at step 5.
  • Screen: com.pagerviewexample / PagerView

Evidence: log

All 13 tests in 11 files
Test Time
🔴 tests/basic-pager.e2e.ts · 1 failed, 2 passed 2m 18s
🔴 basic pager › in LTR › pages horizontally 36.4s
🟢 basic pager › in LTR › pages vertically 39.3s
🟢 basic pager › in RTL › pages horizontally with the reversed gesture 1m 2s
🟢 tests/issues/issue-1083-modal-set-page.e2e.ts · 1 passed 19.2s
🟢 setPage called behind a native-stack modal lands on the requested page 19.2s
🟢 tests/issues/issue-1096-keyboard-shrink.e2e.ts · 1 passed 26.5s
🟢 keyboard avoidance does not shrink the page under the keyboard 26.5s
🟢 tests/issues/issue-1098-nested-pager.e2e.ts · 1 passed 18.9s
🟢 outer pager stays responsive after its page count changes around a nested pager 18.9s
🟢 tests/issues/issue-1142-search-bar-inset.e2e.ts · 1 passed 19.1s
🟢 FlatList inside the pager gets the search bar safe-area insets 19.1s
🟢 tests/material-top-bar.e2e.ts · 1 passed 21.2s
🟢 material top tabs survive a native-stack push and pop 21.2s
🟢 tests/nested-pager-view.e2e.ts · 1 passed 15.7s
🟢 nested horizontal and vertical pagers scroll independently 15.7s
🟢 tests/on-page-selected.e2e.ts · 1 passed 17.3s
🟢 onPageSelected fires an alert for every page change 17.3s
🟢 tests/scrollable-pager-view.e2e.ts · 1 passed 25.7s
🟢 pager inside a ScrollView keeps its page across vertical scrolls 25.7s
🟢 tests/smoke.e2e.ts · 1 passed 9.4s
🟢 horizontal pager pages with the panel buttons 9.4s
🟢 tests/tab-view-inside-scroll-view.e2e.ts · 1 passed 18.8s
🟢 TabView inside a ScrollView swipes tabs and scrolls the page 18.8s

e2e 0.18.0 · 6m 11s · ios · run artifacts

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants