Skip to content

[Crash][v2.OssLicensesMenuActivity] Rapid double-tap on Up button leads to IllegalArgumentException #397

@gmikhail

Description

@gmikhail

Describe the bug
Rapid double-tap on Up button leads to IllegalArgumentException: NavDisplay backstack cannot be empty.

To Reproduce
Steps to reproduce the behavior:

  1. Navigate to v2.OssLicensesMenuActivity.
  2. Select any license to open details.
  3. Rapidly double-tap the "Up" button in the TopAppBar.

Actual Result
App crashes on the second tap.

Expected behavior
The second tap should be ignored. The app should return to the previous screen without crashing.

Screenshots
Image

Desktop (please complete the following information):

  • Gradle version: 9.1.0
  • Android Studio version: 2025.3.2
  • Plugin name and version: play-services-oss-licenses:17.4.0, oss-licenses-plugin:0.11.0

Additional context
Logcat

java.lang.IllegalArgumentException: NavDisplay backstack cannot be empty
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt.NavDisplay(NavDisplay.kt:287)
at androidx.navigation3.ui.NavDisplayKt.NavDisplay(Unknown Source:1)
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt.NavDisplay$lambda$4$NavDisplayKt__NavDisplayKt(Unknown Source:38)
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt.$r8$lambda$P9Mf3Do1t4N-_9P4T8PgpKaFFzE(Unknown Source:0)
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt$$ExternalSyntheticLambda3.invoke(D8$$SyntheticClass:0)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:201)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(ComposerImpl.kt:1690)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(ComposerImpl.kt:2026)
at androidx.compose.runtime.ComposerImpl.doCompose-aFTiNEg(ComposerImpl.kt:2659)
at androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(ComposerImpl.kt:2583)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:1080)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1406)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:159)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$2(Recomposer.kt:638)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:39)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:108)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1158)
at android.view.Choreographer.doCallbacks(Choreographer.java:950)
at android.view.Choreographer.doFrame(Choreographer.java:874)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1142)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8319)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)

java.lang.IllegalArgumentException: NavDisplay backstack cannot be empty
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt.NavDisplay(NavDisplay.kt:287)
at androidx.navigation3.ui.NavDisplayKt.NavDisplay(Unknown Source:1)
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt.NavDisplay$lambda$4$NavDisplayKt__NavDisplayKt(Unknown Source:38)
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt.$r8$lambda$P9Mf3Do1t4N-_9P4T8PgpKaFFzE(Unknown Source:0)
at androidx.navigation3.ui.NavDisplayKt__NavDisplayKt$$ExternalSyntheticLambda3.invoke(D8$$SyntheticClass:0)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:201)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(ComposerImpl.kt:1690)
at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(ComposerImpl.kt:2026)
at androidx.compose.runtime.ComposerImpl.doCompose-aFTiNEg(ComposerImpl.kt:2659)
at androidx.compose.runtime.ComposerImpl.recompose-aFTiNEg$runtime(ComposerImpl.kt:2583)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:1080)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1406)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:159)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2.invokeSuspend$lambda$2(Recomposer.kt:638)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:39)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:108)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1158)
at android.view.Choreographer.doCallbacks(Choreographer.java:950)
at android.view.Choreographer.doFrame(Choreographer.java:874)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1142)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8319)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1038)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@379dd10, androidx.compose.ui.platform.MotionDurationScaleImpl@69e3009, StandaloneCoroutine{Cancelling}@3f3620e, AndroidUiDispatcher@b55342f]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions