-
Notifications
You must be signed in to change notification settings - Fork 5
Description
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:
- Reproduce, create a GitHub issue.
- 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.