I'm using YoutubePlayer to play YouTube videos. I want to show a network error dialog when the internet is not available. I'm using the AbstractYouTubePlayerListener callback to listen for network errors, but the onError method is not getting called when the network is not available. I'm building this app for Android-Tv.
private fun initializePlayer() {
val customPlayerUi =
binding.youtubePlayerView.inflateCustomPlayerUi(R.layout.yt_custom_player_ui)
binding.youtubePlayerView.getYouTubePlayerWhenReady(object : YouTubePlayerCallback {
override fun onYouTubePlayer(youTubePlayer: YouTubePlayer) {
this@YoutubeVideoFragment.initializedYouTubePlayer = youTubePlayer
val customPlayerUiController = YtCustomPlayerController(
requireContext(),
customPlayerUi,
youTubePlayer
)
youTubePlayer.addListener(customPlayerUiController)
if (isEulaAccepted) {
youTubePlayer.loadVideo(
glance.peek.videoPeek.video.youtubeVideo.videoId,
videoStartTime.toFloat()
)
}
if (videoItemBinding.nudgeReaction.visibility == View.VISIBLE &&
videoItemBinding.textPre.text == getString(R.string.skipping_to_next_video)
) {
videoItemBinding.nudgeReaction.setGone()
}
}
})
binding.youtubePlayerView.addYouTubePlayerListener(object :
AbstractYouTubePlayerListener() {
override fun onStateChange(
youTubePlayer: YouTubePlayer,
state: PlayerConstants.PlayerState
) {
handleVideoStateChange(state)
}
override fun onCurrentSecond(youTubePlayer: YouTubePlayer, second: Float) {
if (seekRequestedTime == -1 || seekRequestedTime == second.toInt()) {
// when user starts seeking,running time is getting updated parallely.So,to avoid jerk,will update running time after user seek time is reached
// else if user is not seeking by default seekRequestedTime will be -1
updateVideoRunningTime(second)
seekRequestedTime = -1
}
}
override fun onVideoDuration(youTubePlayer: YouTubePlayer, duration: Float) {
currentSeekBar.max = duration.toInt()
updateUIDuration(duration)
}
override fun onError(
youTubePlayer: YouTubePlayer,
error: PlayerConstants.PlayerError
) {
super.onError(youTubePlayer, error)
Timber.i("onError: $error")
setErrorCodes("Youtube error:${error.name}")
}
})
}