Skip to content

[$175] Import contacts-Import contacts option is not displayed when tapping Start chat #103965

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.5.8-3
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught during regression testing, add the test name, ID and link from BrowserStack: #102928
Email or phone of affected tester (no customers): N/A
Issue reported by: Applause Internal Team
Bug source: Pull Request QA execution
Device used: iPhone 15 iOS 26.6.2
App Component: Other

Action Performed:

  1. Fresh install the app
  2. Sign in with a new gmail account
  3. Tap FAB - Start chat
  4. Look for an "Import contacts" option

Expected Result:

"Import contacts" option is shown when tapping "Start chat"

Actual Result:

"Import contacts" option does not appear when tapping "Start chat"

Workaround:

Unknown

Platforms:

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

Screenshots/Videos

Bug7285674_1791920176352.Start_chat_iOS.mp4

View all open jobs on GitHub

Applause Internal Information
Exported by: Rizky Gunawan
Bug ID: 7285674

Upwork Automation - Do Not Edit

Activity

  1. added
    BugSomething is broken. Auto assigns a BugZero manager.
    on Oct 14, 2026
  2. applause-bot commented on Oct 14, 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/e4473b3b0b34dab457efc91fe92e7b32cbab4e861c2c559245b471fae8d46a24

  3. MelvinBot commented on Oct 14, 2026

    @MelvinBot
    Contributor

    Issue Analysis

    Root Cause: This is expected behavior, not a bug. Migrate to Android Contact Picker and remove READ_CONTACTS added the "Import contacts" row in Start chat on Android only. Its test steps are Android-only. Its behavior table says the New chat row is "Not present" on iOS, and iOS is unchanged.

    The code matches that design:

    On iOS, the app still imports the whole address book after you grant the contacts permission. No row is needed.

    Recommended Fix: No code change. Close this issue. To retest the PR, use an Android device, following the PR's "Android 17+" and "Android 16 or lower" steps.


    Next Steps: Reply with @MelvinBot <your feedback> if iOS should get an "Import contacts" row too. That would be a new feature, not a regression.


    view run

  4. added
    ExternalAdded to denote the issue can be worked on by a contributor
    on Oct 14, 2026
  5. j3ffffff commented on Oct 14, 2026

    @j3ffffff
  6. melvin-bot commented on Oct 14, 2026

    @melvin-bot

    Triggered auto assignment to Contributor-plus team member for initial proposal review - @rojiphil (External)

  7. changed the title [-]Import contacts-Import contacts option is not displayed when tapping Start chat[/-] [+][$175] Import contacts-Import contacts option is not displayed when tapping Start chat[/+] on Oct 14, 2026
  8. melvin-bot commented on Oct 14, 2026

    @melvin-bot
  9. jloa-dev commented on Oct 19, 2026

    @jloa-dev

    Contributor details
    Your Expensify account email: jloa.dev@gmail.com
    Upwork Profile Link: https://www.upwork.com/freelancers/~01584ea0bc208b0a94

    Proposal

    Please re-state the problem that we are trying to solve in this issue.

    The "Import contacts" option does not appear when tapping "Start chat" from the Floating Action Button (FAB) on a fresh app installation.

    What is the root cause of that problem?

    In PR #102928, the "Import contacts" button on NewChatPage (src/pages/NewChatPage.tsx) was introduced with conditional rendering dependent on contactState?.pickContact and contact permission state. On a fresh installation, permissions have neither been requested nor initialized in Onyx state, causing contactState to be undefined/null on initial mount. As a result, the button condition evaluates to false and fails to render the "Import contacts" entry point.

    What changes do you think we should make in order to solve the problem?

    1. In src/pages/NewChatPage.tsx, update the condition for rendering the "Import contacts" item so that on supported native mobile platforms (iOS / Android), the button is rendered even if permissions have not yet been queried.
    2. Trigger the native contact permission flow (requestContactsPermission) upon tapping the "Import contacts" item rather than requiring pre-granted permissions to simply display the option.

    What alternative solutions did you explore? (Optional)

    Querying permissions synchronously on app start, which causes unwanted permission prompts before the user interacts with chat.

    Tests

    1. Perform a clean install of the New Expensify app on iOS or Android.
    2. Sign in with a new account.
    3. Tap FAB > "Start chat".
    4. Verify "Import contacts" is visibly displayed in the options list.
    5. Tap "Import contacts" and verify the OS contact permission dialog appears as expected.
  10. melvin-bot commented on Oct 19, 2026

    @melvin-bot

    ✅ Contributor details stored successfully. Thank you for contributing to Expensify!

  11. melvin-bot commented on Oct 19, 2026

    @melvin-bot

    @rojiphil Eep! 4 days overdue now. Issues have feelings too...

  12. melvin-bot commented on Oct 21, 2026

    @melvin-bot

    @rojiphil Still overdue 6 days?! Let's take care of this!

  13. rojiphil commented on Oct 23, 2026

    @rojiphil
    Contributor

    4. Root Cause: This is expected behavior, not a bug. Migrate to Android Contact Picker and remove READ_CONTACTS added the "Import contacts" row in Start chat on Android only. Its test steps are Android-only. Its behavior table says the New chat row is "Not present" on iOS, and iOS is unchanged.

    Closing the issue as this is expected behaviour.

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

Metadata

Metadata

Assignees

Labels

BugSomething is broken. Auto assigns a BugZero manager.DailyKSv2ExternalAdded to denote the issue can be worked on by a contributor

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions