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
{{ message }}
Repository navigation
[Due for payment 2026-10-21] Android - Expense - Last category is hidden by device navigation bar #103131
Version Number: 9.5.3-0 Reproducible in staging?: Yes Reproducible in production?: N/A - new feature, doesn't exist in prod If this was caught during regression testing, add the test name, ID and link from BrowserStack:#102665 Email or phone of affected tester (no customers):jsoidjndoiniodnsjojd@gmail.com Issue reported by: Applause Internal Team Bug source: Exploratory - Significant User Experience Deterioration Device used: Samsung Galaxy S25 FE / Android 16 App Component: Money Requests
Action Performed:
Precondition:
Enable anchoredFieldDropdowns
Set device navigation to navigation bar instead of gestures.
Launch Expensify app.
Open FAB > Create expense > Manual.
Rotate device to landscape mode.
Tap Category.
Scroll to the bottom of the list.
Expected Result:
The last category will not be hidden by device navigation bar.
Actual Result:
The last category is hidden by device navigation bar.
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
Identify the pull request that introduced this issue and revert it.
Recommendation: roll forward. The fix is a few lines in CategoryPickerModal. A revert would undo 17 files, including the shared useUpdateTransactionCategory hook. The feature sits behind the anchoredFieldDropdowns beta and isn't in production, so you could also demote this if nobody can fix it quickly.
Root cause: On native, the new dropdown always opens as a bottom sheet with a fixed list height of 416dp (ExpenseFieldDropdown.tsx#L176). In landscape, BaseModal limits the sheet to 75% of the window height, about 308dp on this device (BaseModal.tsx#L411). The list's last row and its bottom padding end up behind the navigation bar.
On small screens, cap resolvedHeight at windowHeight * (isInLandscapeMode ? CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO_LANDSCAPE_MODE : CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO).
Pass shouldWrapModalChildrenInScrollViewIfBottomDockedInLandscapeMode={false} to PopoverWithMeasuredContent, as FilterPopupButton.tsx#L156 does.
On small screens, CategoryPickerModal skips its content-height estimate and puts the list in a View fixed at that height (L113). The modal runs edge to edge, so only the list's addBottomSafeAreaPadding keeps rows above the nav bar (L119). That padding gets cut off along with the last row.
In landscape, BaseModal also wraps the content in an outer ScrollView (BaseModal.tsx#L314-L316), which nests one scroll view inside another.
Portrait isn't affected because 416dp is less than 90% of the window height.
Other pickers cap their height with getSelectionListPopoverHeight or getPopoverMaxHeight (styles/index.ts#L7227-L7239).
Nobody has checked this on a device yet; this run's tester is web-only. To verify the fix, open the category list on Android in landscape with 3-button navigation, scroll to the end, and confirm the last category sits fully above the nav bar.
Next Steps: Reply with @MelvinBot implement this to create a draft PR, or @MelvinBot <your feedback> to refine this analysis.
changed the title [-]Android - Expense - Last category is hidden by device navigation bar[/-][+][Due for payment 2026-10-21] Android - Expense - Last category is hidden by device navigation bar[/+]on Oct 14, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.8-5 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-10-21. 🎊
The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]
Activity
applause-bot commentedon Oct 6, 2026
While Applause doesn't embed attachments for this bug, here are the links for quick view:
https://platform.applause.com/services/links/v1/external/2c02851d5076f22cb1348fd58e296942ae7ff5bc2d4ce963d891fb3c5c45726f
melvin-bot commentedon Oct 6, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #102665
github-actions commentedon Oct 6, 2026
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
melvin-bot commentedon Oct 6, 2026
@puneetlath @ikevin127 you have been assigned to this deploy blocker because you reviewed the offending PR: #102665
melvin-bot commentedon Oct 6, 2026
@DylanDylann you have been assigned to this deploy blocker because you authored the offending PR: #102665
melvin-bot commentedon Oct 6, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 6, 2026
Deploy Blocker Investigation
Causing PR: [CFI] Open the Category list in a container anchored to its row (high confidence)
Recommendation: roll forward. The fix is a few lines in
CategoryPickerModal. A revert would undo 17 files, including the shareduseUpdateTransactionCategoryhook. The feature sits behind theanchoredFieldDropdownsbeta and isn't in production, so you could also demote this if nobody can fix it quickly.Root cause: On native, the new dropdown always opens as a bottom sheet with a fixed list height of 416dp (ExpenseFieldDropdown.tsx#L176). In landscape,
BaseModallimits the sheet to 75% of the window height, about 308dp on this device (BaseModal.tsx#L411). The list's last row and its bottom padding end up behind the navigation bar.Proposed fix in CategoryPickerModal.tsx#L83:
resolvedHeightatwindowHeight * (isInLandscapeMode ? CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO_LANDSCAPE_MODE : CONST.MODAL_MAX_HEIGHT_TO_WINDOW_HEIGHT_RATIO).shouldWrapModalChildrenInScrollViewIfBottomDockedInLandscapeMode={false}toPopoverWithMeasuredContent, as FilterPopupButton.tsx#L156 does.Investigation details
CategoryPickerModalwas only used by the SearchCategoryCell. That cell can only be edited on large screens (EditableCell.tsx#L70), so the picker never opened as a bottom sheet on native until now.isSmallScreenWidthis alwaystrue(useResponsiveLayout/index.native.ts#L37). The dropdown therefore takes the bottom-sheet branch (ExpenseFieldDropdown.tsx#L118-L122).CategoryPickerModalskips its content-height estimate and puts the list in aViewfixed at that height (L113). The modal runs edge to edge, so only the list'saddBottomSafeAreaPaddingkeeps rows above the nav bar (L119). That padding gets cut off along with the last row.BaseModalalso wraps the content in an outerScrollView(BaseModal.tsx#L314-L316), which nests one scroll view inside another.getSelectionListPopoverHeightorgetPopoverMaxHeight(styles/index.ts#L7227-L7239).Next Steps: Reply with
@MelvinBot implement thisto create a draft PR, or@MelvinBot <your feedback>to refine this analysis.view run
trjExpensify commentedon Oct 6, 2026
behind a beta, demoting.
melvin-bot commentedon Oct 13, 2026
@DylanDylann Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!
[-]Android - Expense - Last category is hidden by device navigation bar[/-][+][Due for payment 2026-10-21] Android - Expense - Last category is hidden by device navigation bar[/+]melvin-bot commentedon Oct 14, 2026
@ikevin127 / @DylanDylann
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.8-5 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-10-21. 🎊
The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]
melvin-bot commentedon Oct 15, 2026
@ikevin127 Now this issue is 8 days overdue. Are you sure this should be a Daily? Feel free to change it!
ikevin127 commentedon Oct 16, 2026
Note
This one can be closed, no payment needed here as it was a regression coming from this main issue's PR.