android / android/tv-samples

Previous and next video button for first and last video respectively on the Video Player results in crash

Open
#25 0 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Kotlin
Stars
1.3k
Forks
396
PR merge metrics
No merged PRs in 30d

Description

For reference the logs of the crash are as follows:

2020-04-10 11:24:00.174 8649-8649/com.example.android.tvleanback E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.tvleanback, PID: 8649
java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.example.android.tvleanback.model.Video.title' on a null object reference
at com.example.android.tvleanback.ui.PlaybackFragment.play(PlaybackFragment.java:174)
at com.example.android.tvleanback.ui.PlaybackFragment.access$400(PlaybackFragment.java:72)
at com.example.android.tvleanback.ui.PlaybackFragment$PlaylistActionListener.onPrevious(PlaybackFragment.java:345)
at com.example.android.tvleanback.player.VideoPlayerGlue.previous(VideoPlayerGlue.java:165)
at androidx.leanback.media.PlaybackTransportControlGlue.dispatchAction(PlaybackTransportControlGlue.java:263)
at androidx.leanback.media.PlaybackTransportControlGlue.onActionClicked(PlaybackTransportControlGlue.java:194)
at com.example.android.tvleanback.player.VideoPlayerGlue.onActionClicked(VideoPlayerGlue.java:119)
at androidx.leanback.app.PlaybackSupportFragmentGlueHost$1.onItemClicked(PlaybackSupportFragmentGlueHost.java:64)
at androidx.leanback.app.PlaybackSupportFragmentGlueHost$1.onItemClicked(PlaybackSupportFragmentGlueHost.java:59)
at androidx.leanback.app.PlaybackSupportFragment$1.onItemClicked(PlaybackSupportFragment.java:159)
at androidx.leanback.widget.PlaybackTransportRowPresenter$2.onControlClicked(PlaybackTransportRowPresenter.java:573)
at androidx.leanback.widget.ControlBarPresenter$ViewHolder$3.onClick(ControlBarPresenter.java:164)
at android.view.View.performClick(View.java:5609)
at android.view.View.onKeyUp(View.java:10580)
at android.view.KeyEvent.dispatch(KeyEvent.java:2699)
at android.view.View.dispatchKeyEvent(View.java:9879)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at androidx.leanback.widget.PlaybackTransportRowView.dispatchKeyEvent(PlaybackTransportRowView.java:71)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at androidx.leanback.widget.BaseGridView.dispatchKeyEvent(BaseGridView.java:1015)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1667)
at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:403)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1800)
at androidx.core.view.KeyEventDispatcher.activitySuperDispatchKeyEventPre28(KeyEventDispatcher.java:130)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:87)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:133)
at com.example.android.tvleanback.ui.LeanbackActivity.dispatchKeyEvent(LeanbackActivity.java:76)
at com.example.android.tvleanback.ui.PlaybackActivity.dispatchKeyEvent(PlaybackActivity.java:89)
at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:317)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4327)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4298)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3849)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3902)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3868)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3995)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3876)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4052)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3849)
2020-04-10 11:24:00.174 8649-8649/com.example.android.tvleanback E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3902)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3868)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3876)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3849)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3902)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3868)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4028)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4189)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2365)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1961)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1952)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2342)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

Contributor guide

Open the contributing guide

Research direction

Start in ui/PlaybackFragment.java at play() line 174 and trace the previous/next calls through player/VideoPlayerGlue.java, especially previous() around line 165. Reproduce the first-video previous and last-video next actions, then verify both boundary actions no longer crash and normal video navigation still works.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
mobile-dev
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.