Skip to content

Commit 31e1e66

Browse files
authored
Fix an if statement with resumed video players on Android. (#7641)
So embarrassing! Closes flutter/flutter#154559.
1 parent 8e59d93 commit 31e1e66

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

packages/video_player/video_player_android/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 2.7.4
2+
3+
* Fixes a [bug](https://github.com/flutter/flutter/issues/154559) where
4+
resuming (or using a plugin like `share_plus` that implicitly resumes the
5+
activity where) a video player would cause a `DecoderInitializationException`.
6+
17
## 2.7.3
28

39
* Updates Media3-ExoPlayer to 1.4.1.

packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ interface ExoPlayerProvider {
8686

8787
@RestrictTo(RestrictTo.Scope.LIBRARY)
8888
public void onSurfaceCreated() {
89-
exoPlayer = createVideoPlayer();
9089
if (savedStateDuring != null) {
90+
exoPlayer = createVideoPlayer();
9191
savedStateDuring.restore(exoPlayer);
9292
savedStateDuring = null;
9393
}

packages/video_player/video_player_android/android/src/test/java/io/flutter/plugins/videoplayer/VideoPlayerTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,23 @@ public void onSurfaceProducerDestroyedAndRecreatedReleasesAndThenRecreatesAndRes
197197
videoPlayer.dispose();
198198
}
199199

200+
@Test
201+
public void onSurfaceCreatedWithoutDestroyDoesNotRecreate() {
202+
// Initially create the video player, which creates the initial surface.
203+
VideoPlayer videoPlayer = createVideoPlayer();
204+
verify(mockProducer).getSurface();
205+
206+
// Capture the lifecycle events so we can simulate onSurfaceCreated/Destroyed.
207+
verify(mockProducer).setCallback(callbackCaptor.capture());
208+
TextureRegistry.SurfaceProducer.Callback producerLifecycle = callbackCaptor.getValue();
209+
210+
// Calling onSurfaceCreated does not do anything, since the surface was never destroyed.
211+
producerLifecycle.onSurfaceCreated();
212+
verifyNoMoreInteractions(mockProducer);
213+
214+
videoPlayer.dispose();
215+
}
216+
200217
@Test
201218
public void disposeReleasesTextureAndPlayer() {
202219
VideoPlayer videoPlayer = createVideoPlayer();

packages/video_player/video_player_android/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: video_player_android
22
description: Android implementation of the video_player plugin.
33
repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22
5-
version: 2.7.3
5+
version: 2.7.4
66

77
environment:
88
sdk: ^3.5.0

0 commit comments

Comments
 (0)