Repository navigation
feat(android): prototype Frame-owned interactive back previews - #11558
Open
rafaelaugustos wants to merge 3 commits into
Open
rafaelaugustos wants to merge 3 commits into
rafaelaugustos wants to merge 3 commits into
Conversation
This was referenced Oct 20, 2026
|
View your CI Pipeline Execution ↗ for commit 00f367f
💡 Verify your cache is correct by running tasks in a sandbox. Read docs ↗ ☁️ Nx Cloud last updated this comment at |
commit: |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Checklist
What is the current behavior?
Frame exposes final Back but no presentation-only interactive preview. External routers currently reparent a retained Page during Android back progress. Frame's logical history is separate from FragmentManager's back stack, so enabling FragmentManager predictive pop is not a compatible one-line change.
Native acceptance also exposed a pre-existing recreation failure: the new root view can attach while its owning Activity is INITIALIZED. Frame ignores that attach, never marks itself attached after CREATED, and subsequent navigation remains queued. A plain NativeScript reproduction fails with published Core 9.1.3 on API 35.
What is the new behavior?
Experimental
Frame.beginBackPreview()creates a version-1 snapshot session on Android 14+. Progress/cancel/finish only change presentation; the caller retains gesture dispatch, guards and the final navigation decision. Frame automatically disposes the session when navigation, unload, detach or native disposal takes over. iOS returns undefined.The previous Page is software-drawn into a bounded, accessibility-hidden Android ImageView and stays detached/unloaded. Secure windows, SurfaceView/TextureView content, custom/shared transitions, unavailable geometry and failed capture decline the session. This is intentionally opt-in: capture costs time and memory, previews are static, and no performance improvement or universal content compatibility is claimed.
The first commit independently fixes early attachment by using the owning Activity and rechecking an already-attached native view when the Frame loads. It is separable from the prototype.
Implements the prototype proposed in #11557. Related consumer investigation: rafaelaugustos/vue-router-ns#62.
Native validation
Candidate built from upstream main
3224f1b, with stock Android runtime 9.1.1 / native Core resources; the demo aliases this compiled Core rather than modifying installed packages. API 34/35/36 ARM64 emulators passed:The router fixture records lifecycle traces, capture allocation/time, screenshots during native input, and process/Activity identities. The full automated Core device app was not run as a whole; the standalone native reproduction exercised the added regression behavior directly. Physical-device performance, arbitrary vendor SDK rendering, and TalkBack speech are not claimed.
See
tools/notes/FrameBackPreview.mdfor the API, native example and limitations. The consumer continues shipping its existing preview by default.