Skip to content

Android- Connections - Inconsistent column when rotating to landscape & reopened in landscape #105148

Open

Description

@applause-bot

If you haven’t already, check out our contributing guidelines for onboarding. To join our Slack channel, fill out this form.


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.
  1. Launch Expensify app.
  2. Go to workspace settings > Connections.
  3. Rotate device to landscape.
    → Connections page shows 2 columns after rotating to landscape.
  4. Tap app back button.
  5. 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.

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome Safari

Screenshots/Videos

Bug7298064_1793112590907.Screen_Recording_20261027_224432_Expensify.mp4

View all open jobs on GitHub

Applause Internal Information
Exported by: Chandana Kiran
Bug ID: 7298064

Activity

  1. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Oct 27, 2026
  2. applause-bot commented on Oct 27, 2026

    @applause-bot
    Author

    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

  3. melvin-bot commented on Oct 27, 2026

    @melvin-bot

    @lakchote recently merged #104402, but they are OOO right now, so I'll auto-assign someone else.

  4. github-actions commented on Oct 27, 2026

    @github-actions
    Contributor

    👋 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:

    1. Identify the pull request that introduced this issue and revert it.
    2. Find someone who can quickly fix the issue.
    3. Fix the issue yourself.
  5. melvin-bot commented on Oct 27, 2026

    @melvin-bot

    Triggered auto assignment to @francoisl (DeployBlockerCash), see https://stackoverflowteams.com/c/expensify/questions/9980/ for more details.

  6. melvin-bot commented on Oct 27, 2026

    @melvin-bot

    @Beamanator @lakchote @situchan you have been assigned to this deploy blocker because you reviewed the offending PR: #104402

  7. 2 remaining items

  8. MelvinBot commented on Oct 27, 2026

    @MelvinBot
    Contributor

    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.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.
    • Both PRs were written by Krishna2323. lakchote and situchan reviewed Consolidate integration to one Connection screen #102265.

    Next Steps: Reply with @MelvinBot implement this to create a draft PR, or @MelvinBot <your feedback> to refine this analysis.


    view run

  9. situchan commented on Oct 27, 2026

    @situchan
    Contributor

    This is production bug happening on other pages.

    1. On Android, open Workspace settings > More features in portrait.
    2. Rotate the device to landscape.
    3. Tap Back, then reopen More features while still in landscape.
    android.mov

    @MelvinBot confirm

  10. MelvinBot commented on Oct 27, 2026

    @MelvinBot
    Contributor

    ⚠️ A setup step failed before I could start. This is usually a temporary issue — try again in a few minutes, and if it persists post in #melvinbot-ai.

    Run details

  11. situchan commented on Oct 27, 2026

    @situchan
    Contributor

    We can demote this as per #105148 (comment).
    Also, this feature is still in beta

  12. Beamanator commented on Oct 27, 2026

    @Beamanator
    Contributor

    so many reasons to demote 🤣 i'm down!

  13. added and removed
    DeployBlockerCashThis issue or pull request should block deployment
    on Oct 27, 2026
  14. Beamanator commented on Oct 27, 2026

    @Beamanator
    Contributor

    @francoisl @lakchote do one of y'all wanna take this? we obviously don't need 3 of us assigned here hehe

  15. francoisl commented on Oct 27, 2026

    @francoisl
    Contributor

    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.

  16. removed their assignment
    on Oct 27, 2026
  17. Beamanator commented on Oct 27, 2026

    @Beamanator
    Contributor

    @lakchote is the main internal reviewer from #102265 so i may also unassign :D but happy to help look if ya need @lakchote !

  18. removed their assignment
    on Oct 27, 2026
  19. MelvinBot commented on Oct 27, 2026

    @MelvinBot
    Contributor

    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.
    • Connections: the cards copy that pattern (ConnectionCard.tsx:80-83), so they inherit the bug.
    • 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.


    view run

  20. lakchote commented on Oct 29, 2026

    @lakchote
    Contributor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugSomething is broken. Auto assigns a BugZero manager.DailyKSv2Engineering

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions