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
Android - Expense - Report auto scrolls to bottom after opening report field #101799
Version Number: 9.4.91-0 Reproducible in staging?: Yes Reproducible in production?: No If this was caught during regression testing, add the test name, ID and link from BrowserStack: github.com//pull/100735 Email or phone of affected tester (no customers):sjodjoijsonjoinj@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:
Create text report field.
Launch Expensify app.
Go to workspace chat.
Create an expense.
Open the expense.
Tap on the text report field.
Expected Result:
Report will not auto scroll down after tapping on the report field.
Actual Result:
Report auto scrolls down after tapping on the report field.
It also scrolls down when typing on text report field.
👋 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.
Classification: Frontend bug Causing PR: Show up to three report fields per row and edit them inline (Expensify/App#100735) by @MelvinBot (High confidence) Related Issues: None found — no other PR in 9.4.91-0 touches report field rendering, report list scrolling or keyboard handling.
Recommendation: REVERT
The PR turned report fields from rows that navigate to the report field editor page into focusable inputs rendered inside the report feed itself, which is what makes tapping a field open the keyboard and move the list; the revert is clean because every commit touching the new files belongs to this branch, so nothing merged after it depends on the change.
Assigned: @Gonals and @daledah (approving reviewers of the causing PR) — already assigned by melvin-bot. The PR author is a bot, so no author assignment was added. Labels: No changes. DeployBlockerCash stays (App-side fix), DeployBlocker was never applied.
Before the PR, tapping a report field could not scroll the report at all: the field was a MenuItemWithTopDescription whose onPress ran Navigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EDIT_REPORT_FIELD...)), i.e. it pushed the editor page. That code was deleted in this PR in both call sites (MoneyRequestViewReportFields.tsx and MoneyReportView.tsx) and replaced with the new ReportFieldInlineInput, which renders a real TextInput for text/formula fields.
The reported repro is a one-expense report. shouldDisplayReportTableView returns false for a single-transaction report, so that report renders the chat-style feed — an InvertedFlashList — and the report fields are drawn inside it by MoneyReportView as part of the CREATED action content.
So after this PR the report feed contains a keyboard-opening input for the first time in this flow. On Android (android:windowSoftInputMode="adjustResize") focusing it resizes the window and the list viewport while the list is inverted and bottom-anchored, which is exactly the "jumps to the newest message" symptom, and it repeats as the content re-lays out on each keystroke.
Verification
Files that own the reported behavior, and their presence in the PR:
Every commit that has ever touched ReportFieldInlineInput.tsx and every commit touching MoneyRequestViewReportFields.tsx since 2026-09-09 belongs to this PR's branch, so no later PR builds on the change — the revert should not conflict.
Report fields used to be navigation rows, so editing one left the report screen entirely. This PR made them inline inputs and reused the same component for the one-expense report, where the surrounding list is the inverted, bottom-anchored report action feed (ReportActionsList). Focusing an input inside that list makes the Android soft keyboard resize the viewport, and the inverted list resolves the resize by ending up at its newest-message end; subsequent layout changes while typing re-trigger it. Note the PR's own checklist has the Android native test boxes unchecked and its description states browser verification could not be completed, so this path was never exercised before merge.
Targeted alternative (if a revert is not wanted): keep the inline grid only where it was designed for — the multi-expense report table view — and restore the navigate-to-editor MenuItemWithTopDescription in MoneyReportView.tsx so nothing focusable lives inside the inverted feed. That is a much smaller diff than the revert, but it leaves the same inline inputs inside the non-inverted MoneyRequestReportUnifiedList header on Android, which should be re-tested on device before shipping.
💡 Suggested AI code review rule
This looks like a recurring, mechanically detectable pattern, so it may be worth a coding-standards rule so the AI reviewer catches the next one. Proposed for Expensify/App:
Rule:UI-4 — Don't put focusable inputs inside the report action feed
Condition: Flag a change that renders a TextInput, DatePicker, FormProvider or any other keyboard-opening control inside a component that is drawn by the report action feed (anything under src/components/ReportActionItem/**, src/pages/inbox/report/*ContentCreated*, or a ListHeaderComponent of the report lists). Edit those values on a page, in the RHP, or in a popover instead.
Why: That feed is an inverted, bottom-anchored virtualized list; opening the soft keyboard resizes the viewport under adjustResize and the list resolves the resize at its newest-message end, so the report jumps away from the field the user is editing — the mechanism behind this deploy blocker.
Search pattern:grep -rln "TextInput\|DatePicker\|FormProvider" src/components/ReportActionItem src/pages/inbox/report, plus any component passed as ListHeaderComponent to InvertedFlashList / MoneyRequestReportFlashList.
The full rule file, with the ❌/✅ code inline in the App app-coding-standards format, would go in Expensify/App itself. If it's worth adding, a maintainer can open it there as a draft PR.
Activity
applause-bot commentedon Sep 21, 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/09c43f2df8496b919cd80b6c0163331daae517b9526e0905dd9628d033cafcf2
melvin-bot commentedon Sep 21, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #100735
melvin-bot commentedon Sep 21, 2026
@Gonals @daledah you have been assigned to this deploy blocker because you reviewed the offending PR: #100735
github-actions commentedon Sep 21, 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 Sep 21, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Sep 21, 2026
🔍 Investigation Summary
Classification: Frontend bug
Causing PR: Show up to three report fields per row and edit them inline (
Expensify/App#100735) by @MelvinBot (High confidence)Related Issues: None found — no other PR in
9.4.91-0touches report field rendering, report list scrolling or keyboard handling.Recommendation: REVERT
The PR turned report fields from rows that navigate to the report field editor page into focusable inputs rendered inside the report feed itself, which is what makes tapping a field open the keyboard and move the list; the revert is clean because every commit touching the new files belongs to this branch, so nothing merged after it depends on the change.
Assigned: @Gonals and @daledah (approving reviewers of the causing PR) — already assigned by melvin-bot. The PR author is a bot, so no author assignment was added.
Labels: No changes.
DeployBlockerCashstays (App-side fix),DeployBlockerwas never applied.📋 Detailed Analysis
Evidence
9.4.91-0. PR Show up to three report fields per row and edit them inline #100735 merged2026-09-21T09:40:47Zand is item 14 in the checklist's chronological list for this release (Deploy Checklist: New Expensify 2026-09-21).MenuItemWithTopDescriptionwhoseonPressranNavigation.navigate(createDynamicRoute(DYNAMIC_ROUTES.EDIT_REPORT_FIELD...)), i.e. it pushed the editor page. That code was deleted in this PR in both call sites (MoneyRequestViewReportFields.tsxandMoneyReportView.tsx) and replaced with the newReportFieldInlineInput, which renders a realTextInputfor text/formula fields.shouldDisplayReportTableViewreturnsfalsefor a single-transaction report, so that report renders the chat-style feed — anInvertedFlashList— and the report fields are drawn inside it byMoneyReportViewas part of theCREATEDaction content.android:windowSoftInputMode="adjustResize") focusing it resizes the window and the list viewport while the list is inverted and bottom-anchored, which is exactly the "jumps to the newest message" symptom, and it repeats as the content re-lays out on each keystroke.Verification
Files that own the reported behavior, and their presence in the PR:
src/components/ReportActionItem/MoneyReportView.tsx+19 / -64src/components/MoneyRequestReportView/ReportFieldInlineInput.tsxTextInput/DatePicker/ dropdown field control+246src/components/MoneyRequestReportView/MoneyRequestViewReportFields.tsx+75 / -36Every commit that has ever touched
ReportFieldInlineInput.tsxand every commit touchingMoneyRequestViewReportFields.tsxsince2026-09-09belongs to this PR's branch, so no later PR builds on the change — the revert should not conflict.Ruled out: refactor: extract useMoneyRequestReportColumns and useMoneyRequestReportLayout (columns/layout only, no scroll or keyboard code) and Fix invoice fields collision, downgrade, and copy root causes (workspace-side report field utils only, nothing rendered in the report feed).
Root Cause
Report fields used to be navigation rows, so editing one left the report screen entirely. This PR made them inline inputs and reused the same component for the one-expense report, where the surrounding list is the inverted, bottom-anchored report action feed (
ReportActionsList). Focusing an input inside that list makes the Android soft keyboard resize the viewport, and the inverted list resolves the resize by ending up at its newest-message end; subsequent layout changes while typing re-trigger it. Note the PR's own checklist has the Android native test boxes unchecked and its description states browser verification could not be completed, so this path was never exercised before merge.Targeted alternative (if a revert is not wanted): keep the inline grid only where it was designed for — the multi-expense report table view — and restore the navigate-to-editor
MenuItemWithTopDescriptioninMoneyReportView.tsxso nothing focusable lives inside the inverted feed. That is a much smaller diff than the revert, but it leaves the same inline inputs inside the non-invertedMoneyRequestReportUnifiedListheader on Android, which should be re-tested on device before shipping.💡 Suggested AI code review rule
This looks like a recurring, mechanically detectable pattern, so it may be worth a coding-standards rule so the AI reviewer catches the next one. Proposed for
Expensify/App:UI-4— Don't put focusable inputs inside the report action feedTextInput,DatePicker,FormProvideror any other keyboard-opening control inside a component that is drawn by the report action feed (anything undersrc/components/ReportActionItem/**,src/pages/inbox/report/*ContentCreated*, or aListHeaderComponentof the report lists). Edit those values on a page, in the RHP, or in a popover instead.adjustResizeand the list resolves the resize at its newest-message end, so the report jumps away from the field the user is editing — the mechanism behind this deploy blocker.grep -rln "TextInput\|DatePicker\|FormProvider" src/components/ReportActionItem src/pages/inbox/report, plus any component passed asListHeaderComponenttoInvertedFlashList/MoneyRequestReportFlashList.App/src/components/ReportActionItem/MoneyReportView.tsx
Lines 164 to 176 in 8a36aa2
MenuItemWithTopDescriptionthat navigates to the editor page, as it was before Show up to three report fields per row and edit them inline #100735The full rule file, with the ❌/✅ code inline in the App
app-coding-standardsformat, would go inExpensify/Appitself. If it's worth adding, a maintainer can open it there as a draft PR.melvin-bot commentedon Sep 21, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
melvin-bot commentedon Sep 21, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
melvin-bot commentedon Sep 21, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
melvin-bot commentedon Sep 22, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
Gonals commentedon Sep 22, 2026
PR Reverted
IuliiaHerets commentedon Sep 22, 2026
Xiaomi Redmi Note 10 / Android 12
9.4.91-1
Not repro
Screenrecorder-2026-09-22-14-19-11-993.mp4
melvin-bot commentedon Oct 13, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.