ubipo / osmfocus

Open source tool for examining OpenStreetMap elements by moving around on a map.
Apache License 2.0
43 stars 5 forks source link

dispatchCancelPendingInputEvents() NPE #31

Closed ubipo closed 2 years ago

ubipo commented 2 years ago

Not immediately sure what went wrong here. Combination of the exception reporter activity and the element details taglist is pretty odd.

Stacktrace:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.dispatchCancelPendingInputEvents()' on a null object reference
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.ViewGroup.dispatchCancelPendingInputEvents(ViewGroup.java:4709)
    at android.view.View.cancelPendingInputEvents(View.java:20737)
    at android.app.Activity.cancelInputsAndStartExitTransition(Activity.java:5366)
    at android.app.Activity.startActivityForResult(Activity.java:5345)
    at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:2)
    at android.app.Activity.startActivityForResult(Activity.java:5284)
    at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:1)
    at android.app.Activity.startActivity(Activity.java:5670)
    at android.app.Activity.startActivity(Activity.java:5623)
    at net.pfiers.osmfocus.view.MainActivity.handleException(MainActivity.kt:10)
    at net.pfiers.osmfocus.view.fragments.ElementDetailsFragment$onCreateView$tagsListAdapter$1$1.invokeSuspend(ElementDetailsFragment.kt:68)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:3)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:18)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:1)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:10)
ubipo commented 2 years ago

We moved from using Activity to using Application as the context for stuff that doesn't need a UI context (see AppContextSingletonDelegate.getValue()).

As a result we're no longer using Activity.startActivity in the thread default exception handler. The Application context implementation (android.app.Instrumentation.execStartActivity()) doesn't ever call cancelInputsAndStartExitTransition so this bug can't occur anymore. Hooray.