[video_player] Android: Dispose video players when app is closed (#3245)
diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md
index 080a6c0..90082d8 100644
--- a/packages/video_player/video_player/CHANGELOG.md
+++ b/packages/video_player/video_player/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.1
+
+* Android: Dispose video players when app is closed.
+
## 1.0.0
* Announce 1.0.0.
diff --git a/packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java b/packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
index b17509d..0c5854f 100644
--- a/packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
+++ b/packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
@@ -6,9 +6,9 @@
import android.content.Context;
import android.os.Build;
-import android.util.Log;
import android.util.LongSparseArray;
import io.flutter.FlutterInjector;
+import io.flutter.Log;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.EventChannel;
@@ -92,6 +92,7 @@
}
flutterState.stopListening(binding.getBinaryMessenger());
flutterState = null;
+ initialize();
}
private void disposeAllPlayers() {
diff --git a/packages/video_player/video_player/example/android/app/build.gradle b/packages/video_player/video_player/example/android/app/build.gradle
index 13fabc7..fc0673a 100644
--- a/packages/video_player/video_player/example/android/app/build.gradle
+++ b/packages/video_player/video_player/example/android/app/build.gradle
@@ -64,4 +64,6 @@
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
+ testImplementation 'org.robolectric:robolectric:3.8'
+ testImplementation 'org.mockito:mockito-core:3.5.13'
}
diff --git a/packages/video_player/video_player/example/android/app/src/test/java/io/flutter/plugins/videoplayerexample/FlutterActivityTest.java b/packages/video_player/video_player/example/android/app/src/test/java/io/flutter/plugins/videoplayerexample/FlutterActivityTest.java
new file mode 100644
index 0000000..0286237
--- /dev/null
+++ b/packages/video_player/video_player/example/android/app/src/test/java/io/flutter/plugins/videoplayerexample/FlutterActivityTest.java
@@ -0,0 +1,46 @@
+package io.flutter.plugins.videoplayerexample;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import io.flutter.embedding.engine.FlutterEngine;
+import io.flutter.embedding.engine.FlutterEngineCache;
+import io.flutter.embedding.engine.FlutterJNI;
+import io.flutter.embedding.engine.loader.FlutterLoader;
+import io.flutter.embedding.engine.plugins.FlutterPlugin;
+import io.flutter.plugins.videoplayer.VideoPlayerPlugin;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
+public class FlutterActivityTest {
+
+ @Test
+ public void disposeAllPlayers() {
+ VideoPlayerPlugin videoPlayerPlugin = spy(new VideoPlayerPlugin());
+ FlutterLoader flutterLoader = mock(FlutterLoader.class);
+ FlutterJNI flutterJNI = mock(FlutterJNI.class);
+ ArgumentCaptor<FlutterPlugin.FlutterPluginBinding> pluginBindingCaptor =
+ ArgumentCaptor.forClass(FlutterPlugin.FlutterPluginBinding.class);
+
+ when(flutterJNI.isAttached()).thenReturn(true);
+ FlutterEngine engine =
+ spy(new FlutterEngine(RuntimeEnvironment.application, flutterLoader, flutterJNI));
+ FlutterEngineCache.getInstance().put("my_flutter_engine", engine);
+
+ engine.getPlugins().add(videoPlayerPlugin);
+ verify(videoPlayerPlugin, times(1)).onAttachedToEngine(pluginBindingCaptor.capture());
+
+ engine.destroy();
+ verify(videoPlayerPlugin, times(1)).onDetachedFromEngine(pluginBindingCaptor.capture());
+ verify(videoPlayerPlugin, times(1)).initialize();
+ }
+}
diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml
index 72fbedc..69be8b2 100644
--- a/packages/video_player/video_player/pubspec.yaml
+++ b/packages/video_player/video_player/pubspec.yaml
@@ -1,7 +1,7 @@
name: video_player
description: Flutter plugin for displaying inline video with other Flutter
widgets on Android, iOS, and web.
-version: 1.0.0
+version: 1.0.1
homepage: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player
flutter: