GoogleChrome / GoogleChrome/android-browser-helper
When using TwaLauncher.launch(URI uri) method it is possible to get Null Pointer Exception (due to no fallback strategy)
- Dominant language
- Java
- Stars
- 832
- Forks
- 370
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 6
Description
On one of my devices I've seen this NPE:
```
java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.androidbrowserhelper.trusted.TwaLauncher$FallbackStrategy.launch(android.content.Context, androidx.browser.trusted.TrustedWebActivityIntentBuilder, java.lang.String, java.lang.Runnable)' on a null object reference
at com.google.androidbrowserhelper.trusted.TwaLauncher.launch(TwaLauncher.java:182)
at com.google.androidbrowserhelper.trusted.TwaLauncher.launch(TwaLauncher.java:152)
at com.anz.services.buyownhome.BuyOwnHomeLauncher.launchBuyOwnHomeTrustedActivity(BuyOwnHomeLauncher.kt:19)
at com.anz.services.buyownhome.BuyOwnHomeLauncher.launchBuyOwnHomeTrustedActivity$default(BuyOwnHomeLauncher.kt:18)
at com.anz.services.buyownhome.BuyOwnHomeLauncherKt.launchBuyOwnHomeTrustedWebActivity(BuyOwnHomeLauncher.kt:31)
at com.anz.lotus.ui.money.everyday.EverydayController$1$2.invokeSuspend(EverydayController.kt:129)
at com.anz.lotus.ui.money.everyday.EverydayController$1$2.invoke(Unknown Source:8)
at com.anz.lotus.ui.money.everyday.EverydayController$1$2.invoke(Unknown Source:4)
at kotlinx.coroutines.flow.FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2.emit(Collect.kt:136)
at kotlinx.coroutines.flow.SharedFlowImpl.collect(SharedFlow.kt:351)
at kotlinx.coroutines.flow.SharedFlowImpl$collect$1.invokeSuspend(Unknown Source:15)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:234)
at kotlinx.coroutines.DispatchedTaskKt.resumeUnconfined(DispatchedTask.kt:190)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:161)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:398)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:432)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:421)
at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:329)
at kotlinx.coroutines.flow.SharedFlowImpl.tryEmit(SharedFlow.kt:368)
at com.anz.lotus.ui.money.everyday.carousel.MoneyTileAdapterKt$buildTileAdapter$1$1$1.invoke$lambda-1$lambda-0(MoneyTileAdapter.kt:31)
at com.anz.lotus.ui.money.everyday.carousel.MoneyTileAdapterKt$buildTileAdapter$1$1$1.$r8$lambda$f7fAcvrSLyIxHUk2_CeLCYCg1bE(Unknown Source:0)
at com.anz.lotus.ui.money.everyday.carousel.MoneyTileAdapterKt$buildTileAdapter$1$1$1$$ExternalSyntheticLambda0.onClick(Unknown Source:4)
at android.view.View.performClick(View.java:7448)
at android.view.View.performClickInternal(View.java:7425)
at android.view.View.access$3600(View.java:810)
at android.view.View$PerformClick.run(View.java:28305)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
```
I'm guessing that it's because the launch method:
```
public void launch(Uri url) {
launch(new TrustedWebActivityIntentBuilder(url), new QualityEnforcer(), null, null, null);
}
```
sets a null fallback strategy, and if there is nothing to handle TWA's on the device it will call launch() on a null reference.
Is this expected behaviour?
Contributor guide
Assessment
This issue has not been assessed yet.