Fix input hidden behind keyboard/header in landscape mode#88178
Fix input hidden behind keyboard/header in landscape mode#88178GCyganek wants to merge 8 commits intoExpensify:mainfrom
Conversation
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: de178e83bb
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 43f3c67668
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1035e04eb3
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| const isKeyboardOpening = isKeyboardAnimatingRef.current && isKeyboardActive; | ||
| if ((prevIsInLandscapeMode !== isInLandscapeMode || isKeyboardOpening) && isInLandscapeMode) { |
There was a problem hiding this comment.
Distinguish keyboard opening before forcing refocus
The new blur proxy now treats isKeyboardAnimatingRef.current && isKeyboardActive as “keyboard opening”, but that condition can also be true during keyboard-dismiss transitions on Android (depending on event timing), so a normal blur (e.g. tapping outside or dismissing the keyboard) can immediately schedule focus() again and reopen the keyboard. Because this hook wraps all RNTextInput/RNMarkdownTextInput blur handlers in landscape, the regression can make dismissing focus unreliable across many inputs; please gate refocus on an actual open transition rather than any active animation.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
According to https://github.com/Expensify/App/blob/main/src/components/withKeyboardState.tsx keyboardWillHide sets isKeyboardActive to false, I also tested both cases already and this doesn't happen. isKeyboardActive is false during close animation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1035e04eb3
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
JmillsExpensify
left a comment
There was a problem hiding this comment.
LGTM for product
Explanation of Change
CollapsibleHeaderOnKeyboardwrapper for fixed headers that take too much vertical space in the landscape mode so that the header can be moved upward to give needed vertical space for the input to be visible above the open keyboardisKeyboardAnimatingRefcheck touseLandscapeOnBlurProxyso that when the focused input gets hidden for a moment behind keyboard/header, until the header moves out of the screen, it gets re-focusedCollapsibleHeaderOnKeyboardand layout changesFixed Issues
$ #87308, partially (Search bar hidden bug) #87405, #87415, #87312, #87403, #87377
PROPOSAL: #77280 (comment)
Tests
#87415:
bug 1:
bug 2:
#87403:
Precondition:
#87405:
#87377:
#87312:
#87308:
Offline tests
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
#87415:
Screen.Recording.2026-04-17.at.10.30.36.mov
#87403:
Screen.Recording.2026-04-17.at.10.26.07.mov
#87405:
Screen.Recording.2026-04-17.at.10.35.16.mov
#87377:
Screen.Recording.2026-04-17.at.10.22.43.mov
Screen.Recording.2026-04-17.at.10.38.41.mov
#87312:
Screen.Recording.2026-04-17.at.10.41.34.mov
#87308:
Screen.Recording.2026-04-17.at.10.43.51.mov
iOS: Native
#87415:
Screen.Recording.2026-04-17.at.10.29.51.mov
#87403:
Screen.Recording.2026-04-17.at.10.27.39.mov
#87405:
Screen.Recording.2026-04-17.at.10.35.54.mov
#87377:
Screen.Recording.2026-04-17.at.10.38.03.mov
#87312:
Screen.Recording.2026-04-17.at.10.42.36.mov
#87308:
Screen.Recording.2026-04-17.at.10.44.18.mov