Conversation
|
|
|
@mountiny could you ran adhoc here and ask QA to do full regression testing in landscape mode? |
|
🚧 @mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
|
Here are a few issues I noticed during testing: Bug 1: [Android] Unable to scroll the popover menu The popover menu cannot be scrolled on Android. Screen.Recording.2026-03-14.at.15.29.46.movBug 2: [Android] Input field layout issue when focusing When the input field receives focus and the keyboard opens, the layout looks incorrect. Screen.Recording.2026-03-14.at.15.34.29.movBug 3: [Android] Digit input partially hidden in landscape mode The digit input is partially hidden. In landscape mode, it might be better to display it on the left or right side instead of at the bottom. Screen.Recording.2026-03-14.at.15.37.55.movBug 4: Camera view too narrow in request scan flow The camera preview in the request scan flow appears too narrow. We may want to adjust the layout for landscape mode to improve the view. Screen.Recording.2026-03-14.at.15.39.17.movBug 5: [Android] The report action's context menu looks weird Screen.Recording.2026-03-14.at.15.50.25.mov |
|
@GCyganek Besides the issues above, I noticed that there are quite a few UI problems in landscape mode that still need improvement. However, I’m not sure we should try to address all of them in this PR, since deciding on the appropriate UI changes and implementing them will likely take additional time. Perhaps we could focus on a few important flows to review, test, and fix in this PR, and leave the remaining issues to be addressed in follow-up PRs. |
|
Yeah I think we should mainly focus on making it work and usable now, anything minor can be handled later |
|
@mountiny I think most of these issues will require input from the design team as well. |
I guess that anything that comes to mind can be reported here/on the issue and then we can decide if we want to have it fixed. |
Yeah, @dubielzyk-expensify I see that you're the main designer on this issue, right? Do you have any thoughts on the issues reported above by @truph01? Do you have any requests for the main UI components like the header or bottom menu? |
Fixed by making it scrollable and limiting max height to 75% of the screen height in landscape mode so that there is an area that user can tap to close the menu: Screen.Recording.2026-03-16.at.13.22.51.mov |
|
I think that we:
|
The landscape mode was not locked in JS, but in the config (Info.plist, .xml, AndroidManifext.xml files), so to enable it only for selected group of users we would probably need:
That's how I see it |
I don't know if we should treat it as a bug, not sure what if there is a better alternative to this. This is a global behaviour in the landscape mode - whenever user taps a text input it shows a fullscreen keyboard: Screen.Recording.2026-03-16.at.13.46.54.movLet's see what @Expensify/design thinks about it |
|
hmm I am not sure if its worth that effort to gate it |
|
Agree with that too. |
It's painful, but usable I think: Screen.Recording.2026-03-16.at.13.51.28.movWould wait for @Expensify/design opinion on this. I'm not sure if there is a way to fit the keyboard entirely on the screen with the input field in view. Maybe just making sure that the input field is sticky so that it's always in view would be enough here if we even want to make some improvements here? |
If we were to split the bugs into groups:
I'd say it's in the second group where for example the first bug with FAB popover not being closable and scrollable is in the first group. So let's keep it high on the list and try to fix it before the deadline if we have enough time and not on this PR? |
|
That makes sense to me, I like breaking it down into those three buckets like that. cc @Expensify/design for viz too |
|
Oh yeah I like breaking it down that way too. Makes sense to me 👍 |
|
Adding this here to make sure it's not forgotten: clicking on scan multiple receipts button opens a modal in broken layout that can't be closed. Screen.Recording.2026-03-16.at.15.49.47.movEDIT: Fixed |
|
Deploy Blocker #87364 was identified to be related to this PR. |
|
Deploy Blocker #87366 was identified to be related to this PR. |
|
Deploy Blocker #87369 was identified to be related to this PR. |
|
Deploy Blocker ##87370 was identified to be related to this PR. |
|
Deploy Blocker #87372 was identified to be related to this PR. |
|
Deploy Blocker #87375 was identified to be related to this PR. |
|
Deploy Blocker ##87374 was identified to be related to this PR |
|
Deploy Blocker ##87377 was identified to be related to this PR |
|
Deploy Blocker #87401 was identified to be related to this PR. |
|
Deploy Blocker #87403 was identified to be related to this PR. |
|
Deploy Blocker ##87405 was identified to be related to this PR. |
|
Deploy Blocker ##87406 was identified to be related to this PR. |
|
Deploy Blocker ##87415 was identified to be related to this PR. |
|
Deploy Blocker ##87423 was identified to be related to this PR. |
|
🚀 Deployed to production by https://github.com/roryabraham in version: 9.3.54-7 🚀
|



Explanation of Change
Unlocks landscape mode for phones on iOS and Android. Removes portrait-only orientation locks, adds a new
useIsInLandscapeModehook andisInLandscapeModeutility, and applies layout fixes across modals, text inputs, pages, and popover menus. Auto-focus is suppressed in landscape via a Proxy-based ref wrapper, keyboards can be dismissed by tapping headers/safe area insets, and bottom-docked modals are height-constrained and optionally wrapped in ScrollView.Fixed Issues
$ #77280
PROPOSAL: #77280 (comment)
MOBILE-EXPENSIFY: https://github.com/Expensify/Mobile-Expensify/pull/13889
Tests
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
Screen.Recording.2026-03-13.at.14.03.49.mov
iOS: Native
Screen.Recording.2026-03-13.at.14.00.33.mov