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- Connections - Inconsistent column when rotating to landscape & reopened in landscape #105148
Version Number: 9.5.23-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:#104402 Email or phone of affected tester (no customers):[email protected] Issue reported by: Applause Internal Team Bug source: Exploratory - Significant User Experience Deterioration Device used: Samsung Galaxy S25 FE / Android 16 App Component: Workspace Settings
Action Performed:
Precondition:
Set device font size to minimum.
Enable unifiedConnections beta.
Launch Expensify app.
Go to workspace settings > Connections.
Rotate device to landscape.
→ Connections page shows 2 columns after rotating to landscape.
Tap app back button.
Reopen Connections.
→ Connections page shows 1 column when reopened.
Expected Result:
Connection page should show consistent column when rotating to landscape (Step 3) and page is opened in landscape mode (Step 5).
Actual Result:
In Step 3, after rotating to landscape, Connections page shows 2 columns.
In Step 5, when reopening Connections page in landscape mode, Connections page shows 1 column.
👋 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: demote. Do not revert Fix Connections regressions from #102265. That PR is in this checklist, but it doesn't touch the Connections layout. The bug comes from Consolidate integration to one Connection screen, merged 2026-10-13. That PR isn't in this deploy, so the bug likely already exists in production behind the unifiedConnections beta.
Root cause (medium confidence): On native, the cards should always stack in 1 column. Step 5 is correct, and step 3 is the glitch. Each card uses a percentage flexBasis: '100%' inside a wrapping row (ConnectionCard.tsx:83, ExactOnlineWaitlistCard.tsx:28). When you rotate, the cards don't re-render, and Yoga appears to keep the portrait width. Two narrow cards then fit side by side in landscape.
Recommended fix: In both files, replace styles.flexBasis100 with [styles.flexBasisAuto, styles.w100]. A percentage width gets recomputed on every layout.
Investigation details
Fix Connections regressions from #102265 only changes data fetching, back/disconnect behavior, and the Concierge link. It doesn't change ConnectionsGrid.tsx, ConnectionCard.tsx, ExactOnlineWaitlistCard.tsx, or the styles. It was likely flagged because the bug report linked it in the regression-test field.
On native, isSmallScreenWidth is hard-coded to true (index.native.ts:37). As a result, shouldStackCards is always true (ConnectionsGrid.tsx:29), and rotation never changes what React renders.
The grid is a wrapping flex row with a 12px gap (styles/index.ts:5183-5194). There is no numColumns, Dimensions.get, or onLayout.
The Yoga stale-flexBasis explanation is inferred from the code. I couldn't reproduce it, because this run tests on web only and the bug needs Android rotation. I also can't explain why it needs the minimum font size. Smaller text may simply let two portrait-width cards fit.
Add Exact Online waitlist, merged 2026-10-20 and also not in this deploy, copied the same pattern into ExactOnlineWaitlistCard.tsx.
Alternative fix: key the grid on isInLandscapeMode so the cards remount on rotation.
Whoever fixes it should test portrait, landscape, rotation in both directions, and the 3-column web layout.
I don't have context on this one since I wasn't assigned to the original issues nor PR so I'll unassign myself for now. Let me know if no one else is able to look though.
Confirmed from the code: More features uses the same card style in production (9.5.22-0). That fits your repro and supports demoting this blocker.
More features: on native, each card uses workspaceSectionMoreFeaturesItem plus flexBasis100 with a minimum width of 0, inside a wrapping row (MoreFeatureToggle.tsx:63-65). Those lines are the same in the 9.5.22-0 release.
Known cause: a comment in the styles already says native Yoga caches a percentage flexBasis across rotations. Those onboarding tiles use width to avoid it (styles/index.ts:6031-6033).
One fix covers both pages. Replace flexBasis100 with flexBasisAuto plus w100 in MoreFeatureToggle.tsx, ConnectionCard.tsx, and ExactOnlineWaitlistCard.tsx.
I confirmed this from the code only. This run tests on web, so I couldn't reproduce the rotation on Android.
Thanks @Beamanator, I'll take it. @Krishna2323 MelvinBot's fix above makes sense to me, can you raise a PR with it? It covers More features too, so it should fix @situchan's repro as well.
Activity
applause-bot commentedon Oct 27, 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/b37d4c1b5a1e5f3eb1d001d9f6819cbdea4237b879518716a620e045188d6e3a
melvin-bot commentedon Oct 27, 2026
@lakchote recently merged #104402, but they are OOO right now, so I'll auto-assign someone else.
github-actions commentedon Oct 27, 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 27, 2026
Triggered auto assignment to @francoisl (
DeployBlockerCash), see https://stackoverflowteams.com/c/expensify/questions/9980/ for more details.melvin-bot commentedon Oct 27, 2026
@Beamanator @lakchote @situchan you have been assigned to this deploy blocker because you reviewed the offending PR: #104402
2 remaining items
MelvinBot commentedon Oct 27, 2026
Deploy Blocker Analysis
Recommendation: demote. Do not revert Fix Connections regressions from #102265. That PR is in this checklist, but it doesn't touch the Connections layout. The bug comes from Consolidate integration to one Connection screen, merged 2026-10-13. That PR isn't in this deploy, so the bug likely already exists in production behind the unifiedConnections beta.
Root cause (medium confidence): On native, the cards should always stack in 1 column. Step 5 is correct, and step 3 is the glitch. Each card uses a percentage
flexBasis: '100%'inside a wrapping row (ConnectionCard.tsx:83, ExactOnlineWaitlistCard.tsx:28). When you rotate, the cards don't re-render, and Yoga appears to keep the portrait width. Two narrow cards then fit side by side in landscape.Recommended fix: In both files, replace
styles.flexBasis100with[styles.flexBasisAuto, styles.w100]. A percentage width gets recomputed on every layout.Investigation details
ConnectionsGrid.tsx,ConnectionCard.tsx,ExactOnlineWaitlistCard.tsx, or the styles. It was likely flagged because the bug report linked it in the regression-test field.isSmallScreenWidthis hard-coded totrue(index.native.ts:37). As a result,shouldStackCardsis always true (ConnectionsGrid.tsx:29), and rotation never changes what React renders.numColumns,Dimensions.get, oronLayout.flexBasisexplanation is inferred from the code. I couldn't reproduce it, because this run tests on web only and the bug needs Android rotation. I also can't explain why it needs the minimum font size. Smaller text may simply let two portrait-width cards fit.ExactOnlineWaitlistCard.tsx.isInLandscapeModeso the cards remount on rotation.Krishna2323.lakchoteandsituchanreviewed Consolidate integration to one Connection screen #102265.Next Steps: Reply with
@MelvinBot implement thisto create a draft PR, or@MelvinBot <your feedback>to refine this analysis.view run
situchan commentedon Oct 27, 2026
This is production bug happening on other pages.
android.mov
@MelvinBot confirm
MelvinBot commentedon Oct 27, 2026
Run details
situchan commentedon Oct 27, 2026
We can demote this as per #105148 (comment).
Also, this feature is still in beta
Beamanator commentedon Oct 27, 2026
so many reasons to demote 🤣 i'm down!
Beamanator commentedon Oct 27, 2026
@francoisl @lakchote do one of y'all wanna take this? we obviously don't need 3 of us assigned here hehe
francoisl commentedon Oct 27, 2026
I don't have context on this one since I wasn't assigned to the original issues nor PR so I'll unassign myself for now. Let me know if no one else is able to look though.
Beamanator commentedon Oct 27, 2026
@lakchote is the main internal reviewer from #102265 so i may also unassign :D but happy to help look if ya need @lakchote !
MelvinBot commentedon Oct 27, 2026
Confirmed from the code: More features uses the same card style in production (9.5.22-0). That fits your repro and supports demoting this blocker.
workspaceSectionMoreFeaturesItemplusflexBasis100with a minimum width of 0, inside a wrapping row (MoreFeatureToggle.tsx:63-65). Those lines are the same in the9.5.22-0release.flexBasisacross rotations. Those onboarding tiles usewidthto avoid it (styles/index.ts:6031-6033).One fix covers both pages. Replace
flexBasis100withflexBasisAutoplusw100inMoreFeatureToggle.tsx,ConnectionCard.tsx, andExactOnlineWaitlistCard.tsx.I confirmed this from the code only. This run tests on web, so I couldn't reproduce the rotation on Android.
view run
lakchote commentedon Oct 29, 2026
Thanks @Beamanator, I'll take it. @Krishna2323 MelvinBot's fix above makes sense to me, can you raise a PR with it? It covers More features too, so it should fix @situchan's repro as well.