mikepenz / AboutLibraries

AboutLibraries automatically collects all dependencies and licenses of any gradle project (Kotlin MultiPlatform), and provides easy to integrate UI components for Android and Compose-jb environments
http://mikepenz.github.io/AboutLibraries/
Apache License 2.0
3.64k stars 420 forks source link

failure to handle missing Intent #938

Closed mbiebl closed 10 months ago

mbiebl commented 10 months ago

I have an app using AboutLibraries running in a restricted work profile without a web browser. Tapping on a license like GPL-3.0 in the app makes it crash:

FATAL EXCEPTION: main
Process: com.messageconcept.peoplesyncclient, PID: 7882
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=https://api.github.com/... }
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2239)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1878)
    at android.app.Activity.startActivityForResult(Activity.java:5589)
    at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:780)
    at android.app.Activity.startActivityForResult(Activity.java:5547)
    at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:761)
    at android.app.Activity.startActivity(Activity.java:6045)
    at android.app.Activity.startActivity(Activity.java:6012)
    at androidx.compose.ui.platform.AndroidUriHandler.openUri(AndroidUriHandler.android.kt:26)
    at com.mikepenz.aboutlibraries.ui.compose.SharedLibrariesKt$LibrariesContainer$1.invoke-OiyIbOE(SharedLibraries.kt:76)
    at com.mikepenz.aboutlibraries.ui.compose.SharedLibrariesKt$LibrariesContainer$1.invoke(SharedLibraries.kt:56)
    at com.mikepenz.aboutlibraries.ui.compose.SharedLibrariesKt$Libraries$1$invoke$$inlined$libraryItems$1$1.invoke(SharedLibraries.kt:410)
    at com.mikepenz.aboutlibraries.ui.compose.SharedLibrariesKt$Libraries$1$invoke$$inlined$libraryItems$1$1.invoke(SharedLibraries.kt:193)
    at com.mikepenz.aboutlibraries.ui.compose.SharedLibrariesKt$Library$1$1.invoke(SharedLibraries.kt:223)
    at com.mikepenz.aboutlibraries.ui.compose.SharedLibrariesKt$Library$1$1.invoke(SharedLibraries.kt:223)
    at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke-k-4lQ0M(Clickable.kt:895)
    at androidx.compose.foundation.ClickablePointerInputNode$pointerInput$3.invoke(Clickable.kt:889)
    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:855)
    at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:703)
    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.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.Node.dispatchMainEventPass(HitPathTracker.kt:303)
    at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:303)
mikepenz commented 10 months ago

@mbiebl thank you for the report. This is an interesting one. It seems like a very uncommon scenario that there is no web browser at all. 🤔

Will look to catch that crash so at least it won't take down the app

mbiebl commented 10 months ago

yeah, certainly uncommon. It was a restricted work profile with only a few select apps installed.

mikepenz commented 10 months ago

v10.10.0-rc01 fixes this :)