You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix Android snapshot handling when Gboard/IME overlays are present during Maestro-compatible React Native flows.
This moves IME overlay classification into shared Android/core snapshot handling, bounds Android Maestro verification retries after native wait succeeds, and avoids pathological occlusion scans by treating large IME subtrees as one overlay root.
Validation
pnpm exec vitest run src/daemon/handlers/tests/snapshot-capture.test.ts src/compat/maestro/tests/runtime-assertions.test.ts src/compat/maestro/tests/runtime-interactions.test.ts src/platforms/android/tests/snapshot-content-recovery.test.ts
pnpm format
pnpm build
pnpm check:quick
pnpm build:android-snapshot-helper
pnpm package:android-snapshot-helper:npm
Manual Android: React Navigation focused 4-flow Maestro set passed on Pixel_9_Pro_XL with Metro on port 8082: stack-prevent-remove, drawer-master-detail, showcase-material-top-tabs, native-stack-prevent-remove.
The reason will be displayed to describe this comment to others. Learn more.
Detection is gated on the English title string 'Try out your stylus' — both hasAndroidGboardHandwritingTutorial and findAndroidGboardHandwritingTutorialCancel bail unless a node's label/value matches it exactly.
On any non-English device locale the Gboard tutorial title is localized, so the whole fix silently no-ops: hasAndroidGboardHandwritingTutorial returns false → no preflight dismissal, no occlusion handling, and the flow falls back to spending the full native-wait budget behind the keyboard again.
The cancel node is already found by the locale-stable android:id/closeButton id (with 'Cancel' only as a fallback). Consider keying tutorial detection off that same id (a Gboard-owned closeButton in the IME subtree) rather than the translated title, so the dismissal works regardless of locale.
Reviewed current head 6799fa7 against the Android IME/Maestro snapshot changes. The implementation moves IME ownership into shared Android snapshot handling, bounds the post-native Maestro visible retry, and treats large IME subtrees as one overlay root so occlusion scans stay bounded. Focused tests cover helper recovery, overlay occlusion, and Maestro assertion retry behavior; CI is green across 21/21 checks. The PR also includes manual Pixel_9_Pro_XL React Navigation flow evidence for the device-facing path. No actionable blockers found.
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
ready-for-humanValid work that needs human implementation, judgment, or maintainer merge
1 participant
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.
Summary
Fix Android snapshot handling when Gboard/IME overlays are present during Maestro-compatible React Native flows.
This moves IME overlay classification into shared Android/core snapshot handling, bounds Android Maestro verification retries after native wait succeeds, and avoids pathological occlusion scans by treating large IME subtrees as one overlay root.
Validation
pnpm exec vitest run src/daemon/handlers/tests/snapshot-capture.test.ts src/compat/maestro/tests/runtime-assertions.test.ts src/compat/maestro/tests/runtime-interactions.test.ts src/platforms/android/tests/snapshot-content-recovery.test.ts
pnpm format
pnpm build
pnpm check:quick
pnpm build:android-snapshot-helper
pnpm package:android-snapshot-helper:npm
Manual Android: React Navigation focused 4-flow Maestro set passed on Pixel_9_Pro_XL with Metro on port 8082: stack-prevent-remove, drawer-master-detail, showcase-material-top-tabs, native-stack-prevent-remove.