Skip to content

Issue when clicking the Mesh notification that sends you to a crash screen. #40

@FireLordBruno

Description

@FireLordBruno

Background: Kevin has found another way to crash the messaging branch version of the mesh app. He states:

Here’s how to reproduce it:
when sending a file to another device, the receiver taps the notification and sees a “Missing address parameter” message. If the user then navigates to other screen, the app crashes with a “Sequence is empty” error.

Task:

  1. Reproduce, create a GitHub issue.
  2. Gain an early sense of what the fix might be

LogCat error of what caused the crash:

2025-06-21 20:25:06.001 18854-18854 box.projectmesh         com.greybox.projectmesh              E  hiddenapi: Accessing hidden method Ljava/lang/StackTraceElement;-><init>()V (runtime_flags=0, domain=core-platform, api=blocked) from Lcom/google/gson/internal/ConstructorConstructor; (domain=app) using reflection: denied
2025-06-21 20:25:06.002 18854-18854 Project Mesh Error      com.greybox.projectmesh              E  Error:  (Ask Gemini)
java.util.NoSuchElementException: Sequence is empty.
at kotlin.sequences.SequencesKt___SequencesKt.last(_Sequences.kt:244)
at androidx.navigation.NavGraph$Companion.findStartDestination(NavGraph.kt:417)
at com.greybox.projectmesh.navigation.BottomNavHostKt$BottomNavigationBar$1$1$1$1.invoke(BottomNavHost.kt:60)
at com.greybox.projectmesh.navigation.BottomNavHostKt$BottomNavigationBar$1$1$1$1.invoke(BottomNavHost.kt:58)
at androidx.navigation.NavOptionsBuilderKt.navOptions(NavOptionsBuilder.kt:30)
at androidx.navigation.NavController.navigate(NavController.kt:2205)
at com.greybox.projectmesh.navigation.BottomNavHostKt$BottomNavigationBar$1$1$1.invoke(BottomNavHost.kt:58)
at com.greybox.projectmesh.navigation.BottomNavHostKt$BottomNavigationBar$1$1$1.invoke(BottomNavHost.kt:44)
at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke-k-4lQ0M(Clickable.kt:987)
at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke(Clickable.kt:981)
at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:179)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:168)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:474)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:508)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:497)
at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:368)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:665)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:544)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:566)
at androidx.compose.foundation.AbstractClickablePointerInputNode.onPointerEvent-H0pRuoY(Clickable.kt:947)
at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:795)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:317)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:185)
at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:104)
at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:113)
at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1576)
at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1527)
at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1466)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3344)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3014)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3344)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3014)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3344)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3014)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3344)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3014)
2025-06-21 20:25:06.002 18854-18854 Project Mesh Error      com.greybox.projectmesh              E  	at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:761) (Ask Gemini)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:2074)
at android.app.Activity.dispatchTouchEvent(Activity.java:4702)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:719)
at android.view.View.dispatchPointerEvent(View.java:17331)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:9564)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:9281)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8603)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:8660)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:8626)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:8826)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:8634)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:8883)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8607)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:8660)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:8626)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:8634)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:8607)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:12423)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:12321)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:12277)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:12573)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:385)
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:313)
at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:12522)
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:12670)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1751)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1760)
at android.view.Choreographer.doCallbacks(Choreographer.java:1216)
at android.view.Choreographer.doFrame(Choreographer.java:1127)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1707)
at android.os.Handler.handleCallback(Handler.java:959)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loopOnce(Looper.java:257)
at android.os.Looper.loop(Looper.java:342)
at android.app.ActivityThread.main(ActivityThread.java:9579)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@2abbdd9, androidx.compose.runtime.BroadcastFrameClock@5ce239e, StandaloneCoroutine{Cancelling}@1d37e7f, AndroidUiDispatcher@cd1be4c]

Is the sending and receiving function working?

The sending and receiving functions of the Mesh App are working correctly: pictures sent from one device are successfully received and downloadable on another device.

The crash occurs only when the user clicks on a notification for a newly received item. The error originates from BottomNavHost.kt. Recent extensive updates—such as changing the code and removing scaffolding—likely caused the bottom navigation bar to fail to load properly, resulting in the app being unable to find the destination route associated with the notification navigation.

How to fix?

The fix involves investigating BottomNavHost.kt to identify why the navigation graph or its start destination is not initialized or loaded in time when the notification is clicked. Ensuring that the navigation controller safely handles route lookups (e.g., by checking that the graph is ready before navigating) will prevent crashes and allow proper navigation from notifications.

Meaning that we will need to reintroduce scaffolding into the system again and see if that was the problem.

We can use "Git bisect" to figure out where the changes inside of BottomNavHost.kt.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions