Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit b597aba

Browse files
authored
[video_player] Android: Dispose video players when app is closed (#3245)
1 parent 27f5cba commit b597aba

File tree

5 files changed

+55
-2
lines changed

5 files changed

+55
-2
lines changed

packages/video_player/video_player/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.0.1
2+
3+
* Android: Dispose video players when app is closed.
4+
15
## 1.0.0
26

37
* Announce 1.0.0.

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
import android.content.Context;
88
import android.os.Build;
9-
import android.util.Log;
109
import android.util.LongSparseArray;
1110
import io.flutter.FlutterInjector;
11+
import io.flutter.Log;
1212
import io.flutter.embedding.engine.plugins.FlutterPlugin;
1313
import io.flutter.plugin.common.BinaryMessenger;
1414
import io.flutter.plugin.common.EventChannel;
@@ -92,6 +92,7 @@ public void onDetachedFromEngine(FlutterPluginBinding binding) {
9292
}
9393
flutterState.stopListening(binding.getBinaryMessenger());
9494
flutterState = null;
95+
initialize();
9596
}
9697

9798
private void disposeAllPlayers() {

packages/video_player/video_player/example/android/app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,6 @@ dependencies {
6464
testImplementation 'junit:junit:4.12'
6565
androidTestImplementation 'androidx.test:runner:1.1.1'
6666
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
67+
testImplementation 'org.robolectric:robolectric:3.8'
68+
testImplementation 'org.mockito:mockito-core:3.5.13'
6769
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.flutter.plugins.videoplayerexample;
2+
3+
import static org.mockito.Mockito.mock;
4+
import static org.mockito.Mockito.spy;
5+
import static org.mockito.Mockito.times;
6+
import static org.mockito.Mockito.verify;
7+
import static org.mockito.Mockito.when;
8+
9+
import io.flutter.embedding.engine.FlutterEngine;
10+
import io.flutter.embedding.engine.FlutterEngineCache;
11+
import io.flutter.embedding.engine.FlutterJNI;
12+
import io.flutter.embedding.engine.loader.FlutterLoader;
13+
import io.flutter.embedding.engine.plugins.FlutterPlugin;
14+
import io.flutter.plugins.videoplayer.VideoPlayerPlugin;
15+
import org.junit.Test;
16+
import org.junit.runner.RunWith;
17+
import org.mockito.ArgumentCaptor;
18+
import org.robolectric.RobolectricTestRunner;
19+
import org.robolectric.RuntimeEnvironment;
20+
import org.robolectric.annotation.Config;
21+
22+
@RunWith(RobolectricTestRunner.class)
23+
@Config(manifest = Config.NONE)
24+
public class FlutterActivityTest {
25+
26+
@Test
27+
public void disposeAllPlayers() {
28+
VideoPlayerPlugin videoPlayerPlugin = spy(new VideoPlayerPlugin());
29+
FlutterLoader flutterLoader = mock(FlutterLoader.class);
30+
FlutterJNI flutterJNI = mock(FlutterJNI.class);
31+
ArgumentCaptor<FlutterPlugin.FlutterPluginBinding> pluginBindingCaptor =
32+
ArgumentCaptor.forClass(FlutterPlugin.FlutterPluginBinding.class);
33+
34+
when(flutterJNI.isAttached()).thenReturn(true);
35+
FlutterEngine engine =
36+
spy(new FlutterEngine(RuntimeEnvironment.application, flutterLoader, flutterJNI));
37+
FlutterEngineCache.getInstance().put("my_flutter_engine", engine);
38+
39+
engine.getPlugins().add(videoPlayerPlugin);
40+
verify(videoPlayerPlugin, times(1)).onAttachedToEngine(pluginBindingCaptor.capture());
41+
42+
engine.destroy();
43+
verify(videoPlayerPlugin, times(1)).onDetachedFromEngine(pluginBindingCaptor.capture());
44+
verify(videoPlayerPlugin, times(1)).initialize();
45+
}
46+
}

packages/video_player/video_player/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: video_player
22
description: Flutter plugin for displaying inline video with other Flutter
33
widgets on Android, iOS, and web.
4-
version: 1.0.0
4+
version: 1.0.1
55
homepage: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player
66

77
flutter:

0 commit comments

Comments
 (0)