diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index bda736d6da40..e4282c70a958 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.8.6 + +* Fixes a [bug](https://github.com/flutter/flutter/issues/165149) where the `isBuffering` flag + always returns true after seeking to any position. + ## 2.8.5 * Replaces deprecated `onSurfaceDestroyed` with `onSurfaceCleanup`. diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/ExoPlayerEventListener.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/ExoPlayerEventListener.java index 0ca4f867f5fb..f6cb3b5fc9cd 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/ExoPlayerEventListener.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/ExoPlayerEventListener.java @@ -69,11 +69,10 @@ public void onPlaybackStateChanged(final int playbackState) { events.onBufferingUpdate(exoPlayer.getBufferedPosition()); break; case Player.STATE_READY: - if (isInitialized) { - return; + if (!isInitialized) { + isInitialized = true; + sendInitialized(); } - isInitialized = true; - sendInitialized(); break; case Player.STATE_ENDED: events.onCompleted(); diff --git a/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/ExoPlayerEventListenerTest.java b/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/ExoPlayerEventListenerTest.java index 891773c2c827..c837bb22b4a5 100644 --- a/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/ExoPlayerEventListenerTest.java +++ b/packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/ExoPlayerEventListenerTest.java @@ -94,6 +94,19 @@ public void onPlaybackStateChangedEndedAfterBufferingSendsBufferingEndAndOnCompl verifyNoMoreInteractions(mockCallbacks); } + @Test + public void onPlaybackStateChangedReadyAfterBufferingSendsBufferingEnd() { + when(mockExoPlayer.getBufferedPosition()).thenReturn(10L); + eventListener.onPlaybackStateChanged(Player.STATE_BUFFERING); + verify(mockCallbacks).onBufferingStart(); + verify(mockCallbacks).onBufferingUpdate(10L); + + eventListener.onPlaybackStateChanged(Player.STATE_READY); + verify(mockCallbacks).onBufferingEnd(); + + verifyNoMoreInteractions(mockCallbacks); + } + @Test public void onPlaybackStateChangedIdleDoNothing() { eventListener.onPlaybackStateChanged(Player.STATE_IDLE); diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml index a7d200897ac0..1950ce0587cc 100644 --- a/packages/video_player/video_player_android/pubspec.yaml +++ b/packages/video_player/video_player_android/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_android description: Android implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.8.5 +version: 2.8.6 environment: sdk: ^3.7.0