[BUG] Crash in PreviewImageFragment (Play Console)
Actual behaviour
Crash with some appearances in Play Store. It's a NPE:
Exception java.lang.NullPointerException:
at com.owncloud.android.ui.preview.PreviewImageFragment.onPrepareOptionsMenu (PreviewImageFragment.kt:195)
at androidx.fragment.app.Fragment.performPrepareOptionsMenu (Fragment.java:3258)
at androidx.fragment.app.FragmentManager.dispatchPrepareOptionsMenu (FragmentManager.java:3099)
at androidx.fragment.app.FragmentManager$2.onPrepareMenu (FragmentManager.java:475)
at androidx.core.view.MenuHostHelper.onPrepareMenu (MenuHostHelper.java:80)
at androidx.activity.ComponentActivity.onPreparePanel (ComponentActivity.java:513)
at androidx.appcompat.view.WindowCallbackWrapper.onPreparePanel (WindowCallbackWrapper.java:100)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.onPreparePanel (AppCompatDelegateImpl.java:3477)
at androidx.appcompat.app.AppCompatDelegateImpl.preparePanel (AppCompatDelegateImpl.java:2054)
at androidx.appcompat.app.AppCompatDelegateImpl.doInvalidatePanelMenu (AppCompatDelegateImpl.java:2313)
at androidx.appcompat.app.AppCompatDelegateImpl$2.run (AppCompatDelegateImpl.java:278)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1689)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1698)
at android.view.Choreographer.doCallbacks (Choreographer.java:1153)
at android.view.Choreographer.doFrame (Choreographer.java:1069)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1646)
at android.os.Handler.handleCallback (Handler.java:958)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loopOnce (Looper.java:230)
at android.os.Looper.loop (Looper.java:319)
at android.app.ActivityThread.main (ActivityThread.java:8919)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1103)
Expected behaviour
No crash
Steps to reproduce
undefined.
The crash is not easy to reproduce (I haven't been able to) but, based on the logs it is located here:
override fun onPrepareOptionsMenu(menu: Menu) {
...
file = mContainerActivity.storageManager.getFileById(file.id ?: -1)
...
}
In this line, there are two different variables that can be nullable: storageManager and file. The nullability of the first one is handled on BaseActivity and the logs don't show anything related to that class such as previous crashes reported by Play Console like this one: https://github.com/owncloud/android/issues/4333. So... we can discard it. On the other hand, file variable can be null in some scenarios (probably related to device performance or hacky actions) 🤔 To prevent the crash a nullability check will be added before using file object.
Fixed starting from v4.6.0