Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android - Chat - App is crashed after sent the message #12666

Closed
kbecciv opened this issue Nov 11, 2022 · 19 comments
Closed

Android - Chat - App is crashed after sent the message #12666

kbecciv opened this issue Nov 11, 2022 · 19 comments
Assignees
Labels
Awaiting Payment Auto-added when associated PR is deployed to production Bug Something is broken. Auto assigns a BugZero manager. Daily KSv2 Engineering

Comments

@kbecciv
Copy link

kbecciv commented Nov 11, 2022

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!


Action Performed:

  1. Launch the app
  2. Log in with any account
  3. Go to any chat and send the message

Expected Result:

Message should be send

Actual Result:

App is crashed after sent the message

Workaround:

Unknown

Platform:

Where is this issue occurring?

  • Android

Version Number: 1.2.27.0

Reproducible in staging?: Yes

Reproducible in production?: No

Email or phone of affected tester (no customers):

Logs: https://stackoverflow.com/c/expensify/questions/4856

Notes/Photos/Videos: Any additional supporting documentation

Screen_Recording_20221111-090024_One.UI.Home.mp4

Expensify/Expensify Issue URL:

Issue reported by: Applause - Internal Team

Slack conversation:

View all open jobs on GitHub

@kbecciv kbecciv added the DeployBlockerCash This issue or pull request should block deployment label Nov 11, 2022
@OSBotify
Copy link
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.

@melvin-bot
Copy link

melvin-bot bot commented Nov 11, 2022

Triggered auto assignment to @dangrous (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

@dangrous
Copy link
Contributor

Was able to reproduce locally when pointing to the staging server.

Interestingly, not when pointed to my local dev environment. Not sure if that's useful information or not, tbd.

Will start looking through the checklist to see what might be the culprit.

@dangrous
Copy link
Contributor

Looks like this is the error that's being thrown in the logs on the crash:

[OOPS!] API threw InvalidArgumentException - f862e02c8f5ff3962f0c8b69a4a8cbfc ~~ exceptionMessage: 'Invalid Push_Channel Parameters' exceptionFile: '/git/releases/expensify.com/76fb8d8/lib/Push/Channel.php' exceptionLine: '140' exceptionCode: '500'

@dangrous
Copy link
Contributor

Potential PRs (after removing the clearly unrelated ones):

#12157
#12604
#12606

@dangrous
Copy link
Contributor

Here's the error from the android side (finally got Flipper working!) tldr - java.lang.ArrayIndexOutOfBoundsException don't quite know where/why though

[
  {
    "tag": "AndroidRuntime",
    "pid": 30450,
    "tid": 30450,
    "message": "FATAL EXCEPTION: main\nProcess: com.expensify.chat, PID: 30450\njava.lang.ArrayIndexOutOfBoundsException: length=7; index=7\n\tat com.facebook.react.uimanager.ViewGroupDrawingOrderHelper.getChildDrawingOrder(ViewGroupDrawingOrderHelper.java:99)\n\tat com.facebook.react.views.view.ReactViewGroup.getChildDrawingOrder(ReactViewGroup.java:553)\n\tat android.view.ViewGroup.getAndVerifyPreorderedIndex(ViewGroup.java:2108)\n\tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4274)\n\tat com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:810)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21217)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.View.draw(View.java:22081)\n\tat android.view.ViewGroup.drawChild(ViewGroup.java:4516)\n\tat com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:838)\n\tat android.view.ViewGroup.dispatchDraw(ViewGroup.java:4277)\n\tat com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:810)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21217)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)",
    "date": "2022-11-11T15:57:47.871Z",
    "type": "error",
    "count": 1
  },
  {
    "tag": "AndroidRuntime",
    "pid": 30450,
    "tid": 30450,
    "message": "\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4500)\n\tat android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4473)\n\tat android.view.View.updateDisplayListIfDirty(View.java:21186)\n\tat android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:559)\n\tat android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:565)\n\tat android.view.ThreadedRenderer.draw(ThreadedRenderer.java:642)\n\tat android.view.ViewRootImpl.draw(ViewRootImpl.java:4101)\n\tat android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3828)\n\tat android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3099)\n\tat android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1952)\n\tat android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8171)\n\tat android.view.Choreographer$CallbackRecord.run(Choreographer.java:972)\n\tat android.view.Choreographer.doCallbacks(Choreographer.java:796)\n\tat android.view.Choreographer.doFrame(Choreographer.java:731)\n\tat android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:957)\n\tat android.os.Handler.handleCallback(Handler.java:938)",
    "date": "2022-11-11T15:57:47.871Z",
    "type": "error",
    "count": 1
  },
  {
    "tag": "AndroidRuntime",
    "pid": 30450,
    "tid": 30450,
    "message": "\tat android.os.Handler.dispatchMessage(Handler.java:99)\n\tat android.os.Looper.loop(Looper.java:223)\n\tat android.app.ActivityThread.main(ActivityThread.java:7656)\n\tat java.lang.reflect.Method.invoke(Native Method)\n\tat com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)\n\tat com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)\n",
    "date": "2022-11-11T15:57:47.872Z",
    "type": "error",
    "count": 1
  }
]

@dangrous
Copy link
Contributor

Not really making much progress here, have posted in #eng-chat to see if I can find some help!

@dangrous
Copy link
Contributor

It is indeed #12606 - something about changing the zindex of chats isn't playing nicely with Android.

Tried removing that line and the crash doesn't seem to happen. Obviously that's not a good solution, though, so have reached out to @roryabraham (PR author) and will continue to investigate on my end as well.

@roryabraham roryabraham assigned roryabraham and unassigned dangrous Nov 11, 2022
@roryabraham
Copy link
Contributor

@dangrous Great job triaging this, I'll start working on a fix now

@roryabraham
Copy link
Contributor

Keeping you assigned so you get your GH points 😉

@roryabraham
Copy link
Contributor

I'm pretty sure that this is a bug in React Native, but because this is an hourly we can't really afford to fix it upstream right now, so we need a temporary workaround. Here are the first things I would suggest that we try:

  1. Try just zIndex={index + 1}
  2. If that doesn't work, try passing removeClippedSubviews={false} to the FlatList

Then, with lower priority, I can try to make a minimal reproduction of this bug and work on a better upstream fix

@yuwenmemon yuwenmemon removed the DeployBlockerCash This issue or pull request should block deployment label Nov 11, 2022
@yuwenmemon
Copy link
Contributor

Removing DeployBlocker tag as this was fixed with #12688

@yuwenmemon yuwenmemon added Daily KSv2 and removed Hourly KSv2 labels Nov 11, 2022
@JmillsExpensify
Copy link

Yo yo! @roryabraham @dangrous don't forget to add BugZero so that @mananjadhav can be paid out for his review in the linked PR. Adding the Bug label now and re-opening.

@melvin-bot melvin-bot bot added the Overdue label Nov 28, 2022
@JmillsExpensify JmillsExpensify added the Bug Something is broken. Auto assigns a BugZero manager. label Nov 28, 2022
@melvin-bot
Copy link

melvin-bot bot commented Nov 28, 2022

Triggered auto assignment to @mateocole (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details.

@JmillsExpensify
Copy link

@mateocole Can we get @mananjadhav paid out today for his review of the linked internal PR? Thanks!

@roryabraham roryabraham added the Awaiting Payment Auto-added when associated PR is deployed to production label Nov 28, 2022
@roryabraham
Copy link
Contributor

Not overdue, awaiting payment

@melvin-bot melvin-bot bot removed the Overdue label Nov 28, 2022
@mananjadhav
Copy link
Collaborator

@mateocole quick bump, can you help with the payout here ?

@JmillsExpensify JmillsExpensify self-assigned this Nov 29, 2022
@JmillsExpensify
Copy link

@mananjadhav Can you please apply here and I'll handle: https://www.upwork.com/jobs/~0115fde2357c200b23

@JmillsExpensify
Copy link

Done. All paid out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Awaiting Payment Auto-added when associated PR is deployed to production Bug Something is broken. Auto assigns a BugZero manager. Daily KSv2 Engineering
Projects
None yet
Development

No branches or pull requests

8 participants