Skip to content

[Due for payment 2026-09-02] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure" #98499

Closed

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.4.53-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: https://test-management.browserstack.com/projects/2219752/test-runs/68879286/folder/13176890/41237377/1653447401?sort=-identifier
Email or phone of affected tester (no customers): sdsiodjnosdjiodsj@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: Workspace Settings

Action Performed:

Precondition:

  • Device is Android 16.
  • Set device font size to minimum.
  • Create a USD workspace.
  • Enable Expensify Card, but do not set up with bank account.
  1. Launch Expensify app.
  2. Go to workspace settings > Expensify Card.
  3. Tap Issue new card.
  4. Tap app back button.
  5. Tap Issue new card.

Expected Result:

"Your data is secure" will be fully visible.

Actual Result:

"Your data is" is shown.

Workaround:

Unknown

Platforms:

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

Screenshots/Videos

Bug7232096_1786567768128.Screen_Recording_20260813_044551_Expensify.mp4

View all open jobs on GitHub

Applause Internal Information
Exported by: Mita Rachim
Bug ID: 7232096

Issue OwnerCurrent Issue Owner: @jakubstec

Activity

  1. applause-bot commented on Aug 12, 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/935ea7c77d36706eefa3a3d7f202181d86fd837562a5e0b446699eb9688284c8

  2. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Aug 12, 2026
  3. melvin-bot commented on Aug 12, 2026

    @melvin-bot

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

  4. melvin-bot commented on Aug 12, 2026

    @melvin-bot

    💬 A slack conversation has been started in #expensify-open-source

  5. github-actions commented on Aug 12, 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.
  6. NicolasBonet commented on Aug 12, 2026

    @NicolasBonet
    Contributor

    @MelvinBot propose a fix

  7. MelvinBot commented on Aug 12, 2026

    @MelvinBot
    Contributor

    🔍 Investigation Summary

    Classification: Frontend bug (fix lands in Expensify/App)
    Causing PR: #96372 - "upgrade react native to 0.86.0" by @jakubstec (Medium confidence)
    Related Issues: None found

    Recommendation: ROLL FORWARD

    The regression traces to the React Native 0.85.3 → 0.86.0 upgrade in this release, not to any change in the screen's own code. A major RN version bump cannot be cleanly reverted (dozens of dependent patches and follow-up PRs), so this should be fixed forward with a targeted layout tweak on the footer. Because the symptom is cosmetic and only reproduces on Android at the minimum device font size on a secondary informational link, demoting it from deploy-blocker status is also a reasonable call for the deployer.

    Assigned: @jakubstec (PR author), @mountiny and @roryabraham (approving reviewers) from the RN upgrade PR.
    Labels: No change. Kept DeployBlockerCash (App/frontend fix). DeployBlocker was not present, so nothing to remove.

    📋 Detailed Analysis

    Evidence

    • The truncated string is bankAccount.yourDataIsSecure (Your data is secure), rendered only in the "Add bank account" entry point shown when you try to issue an Expensify Card without a verified bank account.
    • Reproduces on staging only, Android only, at minimum font size, and specifically on the second entry into the flow (i.e. after the screen has been unmounted and remounted).
    • The screen's own code did not change in this release. VerifiedBankAccountFlowEntryPoint.tsx was last modified 2026-07-29 (commit 7a034fd), which is already in production (compare production...7a034fd → behind).
    • The shared components that render the text — TextLink.tsx and Text.tsx — also did not change in this release (last real edits months ago).
    • The one release-level change that plausibly alters native Android text layout is the RN upgrade: package.json shows react-native 0.85.3 → 0.86.0, with all react-native+0.85.3+* patches removed and a new react-native+0.86.0+* patch set added by #96372 (in the 9.4.53 checklist, chronological item Some initial fixes and code style updates #1).
    • Several of the newly-added 0.86.0 patches target Fabric view recycling / state on clone (003+disableTextInputRecycling, 008+copyStateOnClone, 012+fixScrollViewState, 013+fix-mask-persisting-recycling). Stale measurement/layout on a recycled view after remount is exactly the class of bug that fits the "only on the 2nd navigation" reproduction.

    Verification

    • Affected file: src/pages/ReimbursementAccount/VerifiedBankAccountFlowEntryPoint.tsx, footer at L344-L360:
      <View style={[styles.mv0, styles.mh5, styles.flexRow, styles.justifyContentBetween]}>
          <TextLink href={CONST.OLD_DOT_PUBLIC_URLS.PRIVACY_URL}>{translate('common.privacy')}</TextLink>
          <PressableWithoutFeedback ... style={[styles.flexRow, styles.alignItemsCenter]}>
              <TextLink ...>{translate('bankAccount.yourDataIsSecure')}</TextLink>
              <View style={styles.ml1}><Icon src={expensifyIcons.Lock} .../></View>
          </PressableWithoutFeedback>
      </View>
    • TextLink sets no numberOfLines, so the truncation is not a JS-level numberOfLines={1} ellipsis (which would render Your data is s...). Instead secure wraps to a clipped second line — a native measurement/height issue rather than a code change in this component.
    • Confirmed #96372 modifies package.json (the react-native dependency) and the entire patches/react-native/ set; git history for the screen and text components shows no in-release change.

    Root Cause

    The RN 0.86.0 upgrade changed Fabric text measurement / view-recycling behavior on Android. On the second visit to the entry point the footer row is laid out from a recycled/cloned view whose height is computed for a single line, so when Your data is secure wraps at minimum font size the second line (secure) is clipped, leaving only Your data is. The screen's own React code is unchanged, so no app-side UI PR introduced it — the trigger is the platform upgrade.

    Suggested targeted fix (roll forward)

    Make the footer resilient to the wrap instead of relying on native single-line height, e.g. allow the secure link/row to shrink and control wrapping explicitly (styles.flexShrink1 on the pressable, numberOfLines={1} + adjustsFontSizeToFit on the link, or flexWrap), or key the entry-point ScrollView/screen so it does not reuse a recycled layout. @jakubstec / @mountiny / @roryabraham can best judge whether this is better handled with an additional RN 0.86 recycling patch.

  8. 26 remaining items

  9. m-natarajan commented on Aug 19, 2026

    @m-natarajan

    The issue was reproduced by the original reporter on the same device after a fresh install. It was originally reproduced on two devices:
    Samsung Galaxy S25 FE / Android 16 (Reproduced after fresh install)
    Samsung A54 / Android 16 (Reproduced after fresh install)
    Issue repro in both Playstore build and GH apk build

    Screen_Recording_20260819_221622_Expensify.2.mp4
    2026-08-19.9.32.13.PM.2.mp4
  10. jakubstec commented on Aug 21, 2026

    @jakubstec
    Member

    PR with a fix is here: #99069, not reproducible (#99069 (comment))

  11. m-natarajan commented on Aug 25, 2026

    @m-natarajan

    Not repro, Samsung Galaxy S25 FE / Android 16 (Ad-hoc build)

    Screen_Recording_20260825_122753_Expensify.Adhoc.mp4
  12. jakubstec commented on Aug 25, 2026

    @jakubstec
    Member

    #99069 - PR with a fix has been merged!

  13. changed the title [-][Due for payment 2026-08-21] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure"[/-] [+][Due for payment 2026-09-02] Android - Expensify Card - "Your data is" is shown instead of "Your data is secure"[/+] on Aug 26, 2026
  14. melvin-bot commented on Aug 26, 2026

    @melvin-bot

    @NicolasBonet / @mountiny / @roryabraham @jakubstec

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.61-4 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-09-02. 🎊

    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]

  15. mountiny commented on Aug 30, 2026

    @mountiny
    Contributor

    No payment here it looks like

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