[video_player] Add platform interface (#2273)
* Move plugin to subdir
* Add video_player_platform_interface
* Make analyzer happy
* Improve documentation
* Bump version and update changelog
* Add stream of VideoEvent
* Ignore deprecated_member_use
* Improve changelog message and version
* Use DataSource class
* Add duration, size and buffering to VideoEvent
* Seek to Duration
* Fix buffering update
* Adapt docstring
* Add buildView
diff --git a/packages/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md
similarity index 98%
rename from packages/video_player/CHANGELOG.md
rename to packages/video_player/video_player/CHANGELOG.md
index fa84c90..1bac34f 100644
--- a/packages/video_player/CHANGELOG.md
+++ b/packages/video_player/video_player/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.10.3+2
+
+* Update the homepage to point to the new plugin location
+
## 0.10.3+1
* Dispose `FLTVideoPlayer` in `onTextureUnregistered` callback on iOS.
diff --git a/packages/video_player/LICENSE b/packages/video_player/video_player/LICENSE
similarity index 100%
rename from packages/video_player/LICENSE
rename to packages/video_player/video_player/LICENSE
diff --git a/packages/video_player/README.md b/packages/video_player/video_player/README.md
similarity index 97%
rename from packages/video_player/README.md
rename to packages/video_player/video_player/README.md
index 6b74206..eae8f6c 100644
--- a/packages/video_player/README.md
+++ b/packages/video_player/video_player/README.md
@@ -4,7 +4,7 @@
A Flutter plugin for iOS and Android for playing back video on a Widget surface.
-![The example app running in iOS](https://github.com/flutter/plugins/blob/master/packages/video_player/doc/demo_ipod.gif?raw=true)
+![The example app running in iOS](https://github.com/flutter/plugins/blob/master/packages/video_player/video_player/doc/demo_ipod.gif?raw=true)
*Note*: This plugin is still under development, and some APIs might not be available yet.
[Feedback welcome](https://github.com/flutter/flutter/issues) and
diff --git a/packages/video_player/android/build.gradle b/packages/video_player/video_player/android/build.gradle
similarity index 100%
rename from packages/video_player/android/build.gradle
rename to packages/video_player/video_player/android/build.gradle
diff --git a/packages/video_player/android/gradle.properties b/packages/video_player/video_player/android/gradle.properties
similarity index 100%
rename from packages/video_player/android/gradle.properties
rename to packages/video_player/video_player/android/gradle.properties
diff --git a/packages/video_player/android/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player/android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/video_player/android/gradle/wrapper/gradle-wrapper.properties
rename to packages/video_player/video_player/android/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/video_player/android/settings.gradle b/packages/video_player/video_player/android/settings.gradle
similarity index 100%
rename from packages/video_player/android/settings.gradle
rename to packages/video_player/video_player/android/settings.gradle
diff --git a/packages/video_player/android/src/main/AndroidManifest.xml b/packages/video_player/video_player/android/src/main/AndroidManifest.xml
similarity index 100%
rename from packages/video_player/android/src/main/AndroidManifest.xml
rename to packages/video_player/video_player/android/src/main/AndroidManifest.xml
diff --git a/packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/QueuingEventSink.java b/packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/QueuingEventSink.java
similarity index 100%
rename from packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/QueuingEventSink.java
rename to packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/QueuingEventSink.java
diff --git a/packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java
similarity index 100%
rename from packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java
rename to packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java
diff --git a/packages/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
similarity index 100%
rename from packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
rename to packages/video_player/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java
diff --git a/packages/video_player/doc/demo_ipod.gif b/packages/video_player/video_player/doc/demo_ipod.gif
similarity index 100%
rename from packages/video_player/doc/demo_ipod.gif
rename to packages/video_player/video_player/doc/demo_ipod.gif
Binary files differ
diff --git a/packages/video_player/example/README.md b/packages/video_player/video_player/example/README.md
similarity index 100%
rename from packages/video_player/example/README.md
rename to packages/video_player/video_player/example/README.md
diff --git a/packages/video_player/example/android.iml b/packages/video_player/video_player/example/android.iml
similarity index 100%
rename from packages/video_player/example/android.iml
rename to packages/video_player/video_player/example/android.iml
diff --git a/packages/video_player/example/android/app/build.gradle b/packages/video_player/video_player/example/android/app/build.gradle
similarity index 100%
rename from packages/video_player/example/android/app/build.gradle
rename to packages/video_player/video_player/example/android/app/build.gradle
diff --git a/packages/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties
rename to packages/video_player/video_player/example/android/app/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/video_player/example/android/app/src/main/AndroidManifest.xml b/packages/video_player/video_player/example/android/app/src/main/AndroidManifest.xml
similarity index 100%
rename from packages/video_player/example/android/app/src/main/AndroidManifest.xml
rename to packages/video_player/video_player/example/android/app/src/main/AndroidManifest.xml
diff --git a/packages/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/EmbeddingV1Activity.java b/packages/video_player/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/EmbeddingV1Activity.java
similarity index 100%
rename from packages/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/EmbeddingV1Activity.java
rename to packages/video_player/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/EmbeddingV1Activity.java
diff --git a/packages/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/MainActivity.java b/packages/video_player/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/MainActivity.java
similarity index 100%
rename from packages/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/MainActivity.java
rename to packages/video_player/video_player/example/android/app/src/main/java/io/flutter/plugins/videoplayerexample/MainActivity.java
diff --git a/packages/video_player/example/android/app/src/main/res/drawable/launch_background.xml b/packages/video_player/video_player/example/android/app/src/main/res/drawable/launch_background.xml
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/drawable/launch_background.xml
rename to packages/video_player/video_player/example/android/app/src/main/res/drawable/launch_background.xml
diff --git a/packages/video_player/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/video_player/video_player/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
rename to packages/video_player/video_player/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/packages/video_player/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/video_player/video_player/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
rename to packages/video_player/video_player/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/packages/video_player/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/video_player/video_player/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to packages/video_player/video_player/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/packages/video_player/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/video_player/video_player/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to packages/video_player/video_player/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/packages/video_player/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/video_player/video_player/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to packages/video_player/video_player/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/packages/video_player/example/android/app/src/main/res/values/styles.xml b/packages/video_player/video_player/example/android/app/src/main/res/values/styles.xml
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/values/styles.xml
rename to packages/video_player/video_player/example/android/app/src/main/res/values/styles.xml
diff --git a/packages/video_player/example/android/app/src/main/res/xml/network_security_config.xml b/packages/video_player/video_player/example/android/app/src/main/res/xml/network_security_config.xml
similarity index 100%
rename from packages/video_player/example/android/app/src/main/res/xml/network_security_config.xml
rename to packages/video_player/video_player/example/android/app/src/main/res/xml/network_security_config.xml
diff --git a/packages/video_player/example/android/build.gradle b/packages/video_player/video_player/example/android/build.gradle
similarity index 100%
rename from packages/video_player/example/android/build.gradle
rename to packages/video_player/video_player/example/android/build.gradle
diff --git a/packages/video_player/example/android/gradle.properties b/packages/video_player/video_player/example/android/gradle.properties
similarity index 100%
rename from packages/video_player/example/android/gradle.properties
rename to packages/video_player/video_player/example/android/gradle.properties
diff --git a/packages/video_player/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/video_player/video_player/example/android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from packages/video_player/example/android/gradle/wrapper/gradle-wrapper.properties
rename to packages/video_player/video_player/example/android/gradle/wrapper/gradle-wrapper.properties
diff --git a/packages/video_player/example/android/settings.gradle b/packages/video_player/video_player/example/android/settings.gradle
similarity index 100%
rename from packages/video_player/example/android/settings.gradle
rename to packages/video_player/video_player/example/android/settings.gradle
diff --git a/packages/video_player/example/assets/Butterfly-209.mp4 b/packages/video_player/video_player/example/assets/Butterfly-209.mp4
similarity index 100%
rename from packages/video_player/example/assets/Butterfly-209.mp4
rename to packages/video_player/video_player/example/assets/Butterfly-209.mp4
Binary files differ
diff --git a/packages/video_player/example/assets/flutter-mark-square-64.png b/packages/video_player/video_player/example/assets/flutter-mark-square-64.png
similarity index 100%
rename from packages/video_player/example/assets/flutter-mark-square-64.png
rename to packages/video_player/video_player/example/assets/flutter-mark-square-64.png
Binary files differ
diff --git a/packages/video_player/example/ios/Flutter/AppFrameworkInfo.plist b/packages/video_player/video_player/example/ios/Flutter/AppFrameworkInfo.plist
similarity index 100%
rename from packages/video_player/example/ios/Flutter/AppFrameworkInfo.plist
rename to packages/video_player/video_player/example/ios/Flutter/AppFrameworkInfo.plist
diff --git a/packages/video_player/example/ios/Flutter/Debug.xcconfig b/packages/video_player/video_player/example/ios/Flutter/Debug.xcconfig
similarity index 100%
rename from packages/video_player/example/ios/Flutter/Debug.xcconfig
rename to packages/video_player/video_player/example/ios/Flutter/Debug.xcconfig
diff --git a/packages/video_player/example/ios/Flutter/Release.xcconfig b/packages/video_player/video_player/example/ios/Flutter/Release.xcconfig
similarity index 100%
rename from packages/video_player/example/ios/Flutter/Release.xcconfig
rename to packages/video_player/video_player/example/ios/Flutter/Release.xcconfig
diff --git a/packages/video_player/example/ios/Runner.xcodeproj/project.pbxproj b/packages/video_player/video_player/example/ios/Runner.xcodeproj/project.pbxproj
similarity index 100%
rename from packages/video_player/example/ios/Runner.xcodeproj/project.pbxproj
rename to packages/video_player/video_player/example/ios/Runner.xcodeproj/project.pbxproj
diff --git a/packages/video_player/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/video_player/video_player/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from packages/video_player/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to packages/video_player/video_player/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/packages/video_player/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/video_player/video_player/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
similarity index 100%
rename from packages/video_player/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
rename to packages/video_player/video_player/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
diff --git a/packages/video_player/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/video_player/video_player/example/ios/Runner.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from packages/video_player/example/ios/Runner.xcworkspace/contents.xcworkspacedata
rename to packages/video_player/video_player/example/ios/Runner.xcworkspace/contents.xcworkspacedata
diff --git a/packages/video_player/example/ios/Runner/AppDelegate.h b/packages/video_player/video_player/example/ios/Runner/AppDelegate.h
similarity index 100%
rename from packages/video_player/example/ios/Runner/AppDelegate.h
rename to packages/video_player/video_player/example/ios/Runner/AppDelegate.h
diff --git a/packages/video_player/example/ios/Runner/AppDelegate.m b/packages/video_player/video_player/example/ios/Runner/AppDelegate.m
similarity index 100%
rename from packages/video_player/example/ios/Runner/AppDelegate.m
rename to packages/video_player/video_player/example/ios/Runner/AppDelegate.m
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
Binary files differ
diff --git a/packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
similarity index 100%
rename from packages/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
rename to packages/video_player/video_player/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
diff --git a/packages/video_player/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/video_player/video_player/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from packages/video_player/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
rename to packages/video_player/video_player/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
diff --git a/packages/video_player/example/ios/Runner/Base.lproj/Main.storyboard b/packages/video_player/video_player/example/ios/Runner/Base.lproj/Main.storyboard
similarity index 100%
rename from packages/video_player/example/ios/Runner/Base.lproj/Main.storyboard
rename to packages/video_player/video_player/example/ios/Runner/Base.lproj/Main.storyboard
diff --git a/packages/video_player/example/ios/Runner/Info.plist b/packages/video_player/video_player/example/ios/Runner/Info.plist
similarity index 100%
rename from packages/video_player/example/ios/Runner/Info.plist
rename to packages/video_player/video_player/example/ios/Runner/Info.plist
diff --git a/packages/video_player/example/ios/Runner/main.m b/packages/video_player/video_player/example/ios/Runner/main.m
similarity index 100%
rename from packages/video_player/example/ios/Runner/main.m
rename to packages/video_player/video_player/example/ios/Runner/main.m
diff --git a/packages/video_player/example/lib/main.dart b/packages/video_player/video_player/example/lib/main.dart
similarity index 100%
rename from packages/video_player/example/lib/main.dart
rename to packages/video_player/video_player/example/lib/main.dart
diff --git a/packages/video_player/example/pubspec.yaml b/packages/video_player/video_player/example/pubspec.yaml
similarity index 100%
rename from packages/video_player/example/pubspec.yaml
rename to packages/video_player/video_player/example/pubspec.yaml
diff --git a/packages/video_player/example/test_driver/video_player_e2e.dart b/packages/video_player/video_player/example/test_driver/video_player_e2e.dart
similarity index 100%
rename from packages/video_player/example/test_driver/video_player_e2e.dart
rename to packages/video_player/video_player/example/test_driver/video_player_e2e.dart
diff --git a/packages/video_player/example/test_driver/video_player_e2e_test.dart b/packages/video_player/video_player/example/test_driver/video_player_e2e_test.dart
similarity index 100%
rename from packages/video_player/example/test_driver/video_player_e2e_test.dart
rename to packages/video_player/video_player/example/test_driver/video_player_e2e_test.dart
diff --git a/packages/video_player/example/video_player_example.iml b/packages/video_player/video_player/example/video_player_example.iml
similarity index 100%
rename from packages/video_player/example/video_player_example.iml
rename to packages/video_player/video_player/example/video_player_example.iml
diff --git a/packages/video_player/example/video_player_example_android.iml b/packages/video_player/video_player/example/video_player_example_android.iml
similarity index 100%
rename from packages/video_player/example/video_player_example_android.iml
rename to packages/video_player/video_player/example/video_player_example_android.iml
diff --git a/packages/video_player/ios/Assets/.gitkeep b/packages/video_player/video_player/ios/Assets/.gitkeep
similarity index 100%
rename from packages/video_player/ios/Assets/.gitkeep
rename to packages/video_player/video_player/ios/Assets/.gitkeep
diff --git a/packages/video_player/ios/Classes/VideoPlayerPlugin.h b/packages/video_player/video_player/ios/Classes/VideoPlayerPlugin.h
similarity index 100%
rename from packages/video_player/ios/Classes/VideoPlayerPlugin.h
rename to packages/video_player/video_player/ios/Classes/VideoPlayerPlugin.h
diff --git a/packages/video_player/ios/Classes/VideoPlayerPlugin.m b/packages/video_player/video_player/ios/Classes/VideoPlayerPlugin.m
similarity index 100%
rename from packages/video_player/ios/Classes/VideoPlayerPlugin.m
rename to packages/video_player/video_player/ios/Classes/VideoPlayerPlugin.m
diff --git a/packages/video_player/ios/video_player.podspec b/packages/video_player/video_player/ios/video_player.podspec
similarity index 100%
rename from packages/video_player/ios/video_player.podspec
rename to packages/video_player/video_player/ios/video_player.podspec
diff --git a/packages/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart
similarity index 100%
rename from packages/video_player/lib/video_player.dart
rename to packages/video_player/video_player/lib/video_player.dart
diff --git a/packages/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml
similarity index 92%
rename from packages/video_player/pubspec.yaml
rename to packages/video_player/video_player/pubspec.yaml
index 516b6f7..32d1e98 100644
--- a/packages/video_player/pubspec.yaml
+++ b/packages/video_player/video_player/pubspec.yaml
@@ -2,8 +2,8 @@
description: Flutter plugin for displaying inline video with other Flutter
widgets on Android and iOS.
author: Flutter Team <flutter-dev@googlegroups.com>
-version: 0.10.3+1
-homepage: https://github.com/flutter/plugins/tree/master/packages/video_player
+version: 0.10.3+2
+homepage: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player
flutter:
plugin:
diff --git a/packages/video_player/test/video_player_test.dart b/packages/video_player/video_player/test/video_player_test.dart
similarity index 100%
rename from packages/video_player/test/video_player_test.dart
rename to packages/video_player/video_player/test/video_player_test.dart
diff --git a/packages/video_player/video_player_android.iml b/packages/video_player/video_player/video_player_android.iml
similarity index 100%
rename from packages/video_player/video_player_android.iml
rename to packages/video_player/video_player/video_player_android.iml
diff --git a/packages/video_player/video_player_platform_interface/CHANGELOG.md b/packages/video_player/video_player_platform_interface/CHANGELOG.md
new file mode 100644
index 0000000..0d8803f
--- /dev/null
+++ b/packages/video_player/video_player_platform_interface/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 1.0.0
+
+* Initial release.
diff --git a/packages/video_player/LICENSE b/packages/video_player/video_player_platform_interface/LICENSE
similarity index 100%
copy from packages/video_player/LICENSE
copy to packages/video_player/video_player_platform_interface/LICENSE
diff --git a/packages/video_player/video_player_platform_interface/README.md b/packages/video_player/video_player_platform_interface/README.md
new file mode 100644
index 0000000..02ba8e7
--- /dev/null
+++ b/packages/video_player/video_player_platform_interface/README.md
@@ -0,0 +1,26 @@
+# video_player_platform_interface
+
+A common platform interface for the [`video_player`][1] plugin.
+
+This interface allows platform-specific implementations of the `video_player`
+plugin, as well as the plugin itself, to ensure they are supporting the
+same interface.
+
+# Usage
+
+To implement a new platform-specific implementation of `video_player`, extend
+[`VideoPlayerPlatform`][2] with an implementation that performs the
+platform-specific behavior, and when you register your plugin, set the default
+`VideoPlayerPlatform` by calling
+`VideoPlayerPlatform.instance = MyPlatformVideoPlayer()`.
+
+# Note on breaking changes
+
+Strongly prefer non-breaking changes (such as adding a method to the interface)
+over breaking changes for this package.
+
+See https://flutter.dev/go/platform-interface-breaking-changes for a discussion
+on why a less-clean interface is preferable to a breaking change.
+
+[1]: ../video_player
+[2]: lib/video_player_platform_interface.dart
diff --git a/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart b/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart
new file mode 100644
index 0000000..593c726
--- /dev/null
+++ b/packages/video_player/video_player_platform_interface/lib/method_channel_video_player.dart
@@ -0,0 +1,178 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:ui';
+
+import 'package:flutter/services.dart';
+import 'package:flutter/widgets.dart';
+
+import 'video_player_platform_interface.dart';
+
+const MethodChannel _channel = MethodChannel('flutter.io/videoPlayer');
+
+/// An implementation of [VideoPlayerPlatform] that uses method channels.
+class MethodChannelVideoPlayer extends VideoPlayerPlatform {
+ @override
+ Future<void> init() {
+ return _channel.invokeMethod<void>('init');
+ }
+
+ @override
+ Future<void> dispose(int textureId) {
+ return _channel.invokeMethod<void>(
+ 'dispose',
+ <String, dynamic>{'textureId': textureId},
+ );
+ }
+
+ @override
+ Future<int> create(DataSource dataSource) async {
+ Map<String, dynamic> dataSourceDescription;
+
+ switch (dataSource.sourceType) {
+ case DataSourceType.asset:
+ dataSourceDescription = <String, dynamic>{
+ 'asset': dataSource.asset,
+ 'package': dataSource.package,
+ };
+ break;
+ case DataSourceType.network:
+ dataSourceDescription = <String, dynamic>{
+ 'uri': dataSource.uri,
+ 'formatHint': _videoFormatStringMap[dataSource.formatHint]
+ };
+ break;
+ case DataSourceType.file:
+ dataSourceDescription = <String, dynamic>{'uri': dataSource.uri};
+ break;
+ }
+
+ final Map<String, dynamic> response =
+ await _channel.invokeMapMethod<String, dynamic>(
+ 'create',
+ dataSourceDescription,
+ );
+ return response['textureId'];
+ }
+
+ @override
+ Future<void> setLooping(int textureId, bool looping) {
+ return _channel.invokeMethod<void>(
+ 'setLooping',
+ <String, dynamic>{
+ 'textureId': textureId,
+ 'looping': looping,
+ },
+ );
+ }
+
+ @override
+ Future<void> play(int textureId) {
+ return _channel.invokeMethod<void>(
+ 'play',
+ <String, dynamic>{'textureId': textureId},
+ );
+ }
+
+ @override
+ Future<void> pause(int textureId) {
+ return _channel.invokeMethod<void>(
+ 'pause',
+ <String, dynamic>{'textureId': textureId},
+ );
+ }
+
+ @override
+ Future<void> setVolume(int textureId, double volume) {
+ return _channel.invokeMethod<void>(
+ 'setVolume',
+ <String, dynamic>{
+ 'textureId': textureId,
+ 'volume': volume,
+ },
+ );
+ }
+
+ @override
+ Future<void> seekTo(int textureId, Duration position) {
+ return _channel.invokeMethod<void>(
+ 'seekTo',
+ <String, dynamic>{
+ 'textureId': textureId,
+ 'location': position.inMilliseconds,
+ },
+ );
+ }
+
+ @override
+ Future<Duration> getPosition(int textureId) async {
+ return Duration(
+ milliseconds: await _channel.invokeMethod<int>(
+ 'position',
+ <String, dynamic>{'textureId': textureId},
+ ),
+ );
+ }
+
+ @override
+ Stream<VideoEvent> videoEventsFor(int textureId) {
+ return _eventChannelFor(textureId)
+ .receiveBroadcastStream()
+ .map((dynamic event) {
+ final Map<dynamic, dynamic> map = event;
+ switch (map['event']) {
+ case 'initialized':
+ return VideoEvent(
+ eventType: VideoEventType.initialized,
+ duration: Duration(milliseconds: map['duration']),
+ size: Size(map['width']?.toDouble() ?? 0.0,
+ map['height']?.toDouble() ?? 0.0),
+ );
+ case 'completed':
+ return VideoEvent(
+ eventType: VideoEventType.completed,
+ );
+ case 'bufferingUpdate':
+ final List<dynamic> values = map['values'];
+
+ return VideoEvent(
+ buffered: values.map<DurationRange>(_toDurationRange).toList(),
+ eventType: VideoEventType.completed,
+ );
+ case 'bufferingStart':
+ return VideoEvent(eventType: VideoEventType.bufferingStart);
+ case 'bufferingEnd':
+ return VideoEvent(eventType: VideoEventType.bufferingEnd);
+ default:
+ return VideoEvent(eventType: VideoEventType.unknown);
+ }
+ });
+ }
+
+ @override
+ Widget buildView(int textureId) {
+ return Texture(textureId: textureId);
+ }
+
+ EventChannel _eventChannelFor(int textureId) {
+ return EventChannel('flutter.io/videoPlayer/videoEvents$textureId');
+ }
+
+ static const Map<VideoFormat, String> _videoFormatStringMap =
+ <VideoFormat, String>{
+ VideoFormat.ss: 'ss',
+ VideoFormat.hls: 'hls',
+ VideoFormat.dash: 'dash',
+ VideoFormat.other: 'other',
+ };
+
+ DurationRange _toDurationRange(dynamic value) {
+ final List<dynamic> pair = value;
+ return DurationRange(
+ Duration(milliseconds: pair[0]),
+ Duration(milliseconds: pair[1]),
+ );
+ }
+}
diff --git a/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart b/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart
new file mode 100644
index 0000000..6c4ecaf
--- /dev/null
+++ b/packages/video_player/video_player_platform_interface/lib/video_player_platform_interface.dart
@@ -0,0 +1,189 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:ui';
+
+import 'package:flutter/widgets.dart';
+import 'package:meta/meta.dart' show required, visibleForTesting;
+
+import 'method_channel_video_player.dart';
+
+/// The interface that implementations of video_player must implement.
+///
+/// Platform implementations should extend this class rather than implement it as `video_player`
+/// does not consider newly added methods to be breaking changes. Extending this class
+/// (using `extends`) ensures that the subclass will get the default implementation, while
+/// platform implementations that `implements` this interface will be broken by newly added
+/// [VideoPlayerPlatform] methods.
+abstract class VideoPlayerPlatform {
+ /// Only mock implementations should set this to true.
+ ///
+ /// Mockito mocks are implementing this class with `implements` which is forbidden for anything
+ /// other than mocks (see class docs). This property provides a backdoor for mockito mocks to
+ /// skip the verification that the class isn't implemented with `implements`.
+ @visibleForTesting
+ bool get isMock => false;
+
+ /// The default instance of [VideoPlayerPlatform] to use.
+ ///
+ /// Platform-specific plugins should override this with their own
+ /// platform-specific class that extends [VideoPlayerPlatform] when they
+ /// register themselves.
+ ///
+ /// Defaults to [MethodChannelVideoPlayer].
+ static VideoPlayerPlatform _instance = MethodChannelVideoPlayer();
+
+ static VideoPlayerPlatform get instance => _instance;
+
+ // TODO(amirh): Extract common platform interface logic.
+ // https://github.com/flutter/flutter/issues/43368
+ static set instance(VideoPlayerPlatform instance) {
+ if (!instance.isMock) {
+ try {
+ instance._verifyProvidesDefaultImplementations();
+ } on NoSuchMethodError catch (_) {
+ throw AssertionError(
+ 'Platform interfaces must not be implemented with `implements`');
+ }
+ }
+ _instance = instance;
+ }
+
+ /// Initializes the platform interface and disposes all existing players.
+ ///
+ /// This method is called when the plugin is first initialized
+ /// and on every full restart.
+ Future<void> init() {
+ throw UnimplementedError('init() has not been implemented.');
+ }
+
+ /// Clears one video.
+ Future<void> dispose(int textureId) {
+ throw UnimplementedError('dispose() has not been implemented.');
+ }
+
+ /// Creates an instance of a video player and returns its textureId.
+ Future<int> create(DataSource dataSource) {
+ throw UnimplementedError('create() has not been implemented.');
+ }
+
+ /// Returns a Stream of [VideoEventType]s.
+ Stream<VideoEvent> videoEventsFor(int textureId) {
+ throw UnimplementedError('videoEventsFor() has not been implemented.');
+ }
+
+ /// Sets the looping attribute of the video.
+ Future<void> setLooping(int textureId, bool looping) {
+ throw UnimplementedError('setLooping() has not been implemented.');
+ }
+
+ /// Starts the video playback.
+ Future<void> play(int textureId) {
+ throw UnimplementedError('play() has not been implemented.');
+ }
+
+ /// Stops the video playback.
+ Future<void> pause(int textureId) {
+ throw UnimplementedError('pause() has not been implemented.');
+ }
+
+ /// Sets the volume to a range between 0.0 and 1.0.
+ Future<void> setVolume(int textureId, double volume) {
+ throw UnimplementedError('setVolume() has not been implemented.');
+ }
+
+ /// Sets the video position to a [Duration] from the start.
+ Future<void> seekTo(int textureId, Duration position) {
+ throw UnimplementedError('seekTo() has not been implemented.');
+ }
+
+ /// Gets the video position as [Duration] from the start.
+ Future<Duration> getPosition(int textureId) {
+ throw UnimplementedError('getPosition() has not been implemented.');
+ }
+
+ /// Returns a widget displaying the video with a given textureID.
+ Widget buildView(int textureId) {
+ throw UnimplementedError('buildView() has not been implemented.');
+ }
+
+ // This method makes sure that VideoPlayer isn't implemented with `implements`.
+ //
+ // See class doc for more details on why implementing this class is forbidden.
+ //
+ // This private method is called by the instance setter, which fails if the class is
+ // implemented with `implements`.
+ void _verifyProvidesDefaultImplementations() {}
+}
+
+class DataSource {
+ DataSource({
+ @required this.sourceType,
+ this.uri,
+ this.formatHint,
+ this.asset,
+ this.package,
+ });
+
+ final DataSourceType sourceType;
+ final String uri;
+ final VideoFormat formatHint;
+ final String asset;
+ final String package;
+}
+
+enum DataSourceType {
+ asset,
+ network,
+ file,
+}
+
+enum VideoFormat {
+ dash,
+ hls,
+ ss,
+ other,
+}
+
+class VideoEvent {
+ VideoEvent({
+ @required this.eventType,
+ this.duration,
+ this.size,
+ this.buffered,
+ });
+
+ final VideoEventType eventType;
+ final Duration duration;
+ final Size size;
+ final List<DurationRange> buffered;
+}
+
+enum VideoEventType {
+ initialized,
+ completed,
+ bufferingUpdate,
+ bufferingStart,
+ bufferingEnd,
+ unknown,
+}
+
+class DurationRange {
+ DurationRange(this.start, this.end);
+
+ final Duration start;
+ final Duration end;
+
+ double startFraction(Duration duration) {
+ return start.inMilliseconds / duration.inMilliseconds;
+ }
+
+ double endFraction(Duration duration) {
+ return end.inMilliseconds / duration.inMilliseconds;
+ }
+
+ @override
+ String toString() => '$runtimeType(start: $start, end: $end)';
+}
diff --git a/packages/video_player/video_player_platform_interface/pubspec.yaml b/packages/video_player/video_player_platform_interface/pubspec.yaml
new file mode 100644
index 0000000..bf4d4c0
--- /dev/null
+++ b/packages/video_player/video_player_platform_interface/pubspec.yaml
@@ -0,0 +1,21 @@
+name: video_player_platform_interface
+description: A common platform interface for the video_player plugin.
+author: Flutter Team <flutter-dev@googlegroups.com>
+homepage: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player_platform_interface
+# NOTE: We strongly prefer non-breaking changes, even at the expense of a
+# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
+version: 1.0.0
+
+dependencies:
+ flutter:
+ sdk: flutter
+ meta: ^1.0.5
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ mockito: ^4.1.1
+
+environment:
+ sdk: ">=2.0.0-dev.28.0 <3.0.0"
+ flutter: ">=1.9.1+hotfix.4 <2.0.0"
diff --git a/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart b/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart
new file mode 100644
index 0000000..7db8ef6
--- /dev/null
+++ b/packages/video_player/video_player_platform_interface/test/method_channel_video_player_test.dart
@@ -0,0 +1,273 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:ui';
+
+import 'package:mockito/mockito.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:video_player_platform_interface/method_channel_video_player.dart';
+import 'package:video_player_platform_interface/video_player_platform_interface.dart';
+
+void main() {
+ TestWidgetsFlutterBinding.ensureInitialized();
+
+ group('$VideoPlayerPlatform', () {
+ test('$MethodChannelVideoPlayer() is the default instance', () {
+ expect(VideoPlayerPlatform.instance,
+ isInstanceOf<MethodChannelVideoPlayer>());
+ });
+
+ test('Cannot be implemented with `implements`', () {
+ expect(() {
+ VideoPlayerPlatform.instance = ImplementsVideoPlayerPlatform();
+ }, throwsA(isInstanceOf<AssertionError>()));
+ });
+
+ test('Can be mocked with `implements`', () {
+ final ImplementsVideoPlayerPlatform mock =
+ ImplementsVideoPlayerPlatform();
+ when(mock.isMock).thenReturn(true);
+ VideoPlayerPlatform.instance = mock;
+ });
+
+ test('Can be extended', () {
+ VideoPlayerPlatform.instance = ExtendsVideoPlayerPlatform();
+ });
+ });
+
+ group('$MethodChannelVideoPlayer', () {
+ const MethodChannel channel = MethodChannel('flutter.io/videoPlayer');
+ final List<MethodCall> log = <MethodCall>[];
+ final MethodChannelVideoPlayer player = MethodChannelVideoPlayer();
+
+ setUp(() {
+ channel.setMockMethodCallHandler((MethodCall methodCall) async {
+ log.add(methodCall);
+ });
+ });
+
+ tearDown(() {
+ log.clear();
+ });
+
+ test('init', () async {
+ await player.init();
+ expect(
+ log,
+ <Matcher>[isMethodCall('init', arguments: null)],
+ );
+ });
+
+ test('dispose', () async {
+ await player.dispose(1);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('dispose', arguments: <String, Object>{
+ 'textureId': 1,
+ })
+ ],
+ );
+ });
+
+ test('create with asset', () async {
+ channel.setMockMethodCallHandler((MethodCall methodCall) async {
+ log.add(methodCall);
+ return <String, dynamic>{'textureId': 3};
+ });
+ final int textureId = await player.create(DataSource(
+ sourceType: DataSourceType.asset,
+ asset: 'someAsset',
+ package: 'somePackage',
+ ));
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('create', arguments: <String, Object>{
+ 'asset': 'someAsset',
+ 'package': 'somePackage',
+ })
+ ],
+ );
+ expect(textureId, 3);
+ });
+
+ test('create with network', () async {
+ channel.setMockMethodCallHandler((MethodCall methodCall) async {
+ log.add(methodCall);
+ return <String, dynamic>{'textureId': 3};
+ });
+ final int textureId = await player.create(DataSource(
+ sourceType: DataSourceType.network,
+ uri: 'someUri',
+ formatHint: VideoFormat.dash,
+ ));
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('create', arguments: <String, Object>{
+ 'uri': 'someUri',
+ 'formatHint': 'dash'
+ })
+ ],
+ );
+ expect(textureId, 3);
+ });
+
+ test('create with file', () async {
+ channel.setMockMethodCallHandler((MethodCall methodCall) async {
+ log.add(methodCall);
+ return <String, dynamic>{'textureId': 3};
+ });
+ final int textureId = await player.create(DataSource(
+ sourceType: DataSourceType.file,
+ uri: 'someUri',
+ ));
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('create', arguments: <String, Object>{
+ 'uri': 'someUri',
+ })
+ ],
+ );
+ expect(textureId, 3);
+ });
+
+ test('setLooping', () async {
+ await player.setLooping(1, true);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('setLooping', arguments: <String, Object>{
+ 'textureId': 1,
+ 'looping': true,
+ })
+ ],
+ );
+ });
+
+ test('play', () async {
+ await player.play(1);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('play', arguments: <String, Object>{
+ 'textureId': 1,
+ })
+ ],
+ );
+ });
+
+ test('pause', () async {
+ await player.pause(1);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('pause', arguments: <String, Object>{
+ 'textureId': 1,
+ })
+ ],
+ );
+ });
+
+ test('setVolume', () async {
+ await player.setVolume(1, 0.7);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('setVolume', arguments: <String, Object>{
+ 'textureId': 1,
+ 'volume': 0.7,
+ })
+ ],
+ );
+ });
+
+ test('seekTo', () async {
+ await player.seekTo(1, const Duration(milliseconds: 12345));
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('seekTo', arguments: <String, Object>{
+ 'textureId': 1,
+ 'location': 12345,
+ })
+ ],
+ );
+ });
+
+ test('getPosition', () async {
+ channel.setMockMethodCallHandler((MethodCall methodCall) async {
+ log.add(methodCall);
+ return 234;
+ });
+
+ final Duration position = await player.getPosition(1);
+ expect(
+ log,
+ <Matcher>[
+ isMethodCall('position', arguments: <String, Object>{
+ 'textureId': 1,
+ })
+ ],
+ );
+ expect(position, const Duration(milliseconds: 234));
+ });
+
+ test('videoEventsFor', () async {
+ // TODO(cbenhagen): This has been deprecated and should be replaced
+ // with `ServicesBinding.instance.defaultBinaryMessenger` when it's
+ // available on all the versions of Flutter that we test.
+ // ignore: deprecated_member_use
+ defaultBinaryMessenger.setMockMessageHandler(
+ "flutter.io/videoPlayer/videoEvents123",
+ (ByteData message) async {
+ final MethodCall methodCall =
+ const StandardMethodCodec().decodeMethodCall(message);
+ if (methodCall.method == 'listen') {
+ // TODO(cbenhagen): This has been deprecated and should be replaced
+ // with `ServicesBinding.instance.defaultBinaryMessenger` when it's
+ // available on all the versions of Flutter that we test.
+ // ignore: deprecated_member_use
+ defaultBinaryMessenger.handlePlatformMessage(
+ "flutter.io/videoPlayer/videoEvents123",
+ const StandardMethodCodec()
+ .encodeSuccessEnvelope(<String, dynamic>{
+ 'event': 'initialized',
+ 'duration': 98765,
+ 'width': 1920,
+ 'height': 1080,
+ }),
+ (ByteData data) {});
+
+ return const StandardMethodCodec().encodeSuccessEnvelope(null);
+ } else if (methodCall.method == 'cancel') {
+ return const StandardMethodCodec().encodeSuccessEnvelope(null);
+ } else {
+ fail('Expected listen or cancel');
+ }
+ },
+ );
+ final Stream<VideoEvent> videoEvents = player.videoEventsFor(123);
+ expect((await videoEvents.first).eventType, VideoEventType.initialized);
+ expect(
+ (await videoEvents.first).duration,
+ const Duration(milliseconds: 98765),
+ );
+ expect(
+ (await videoEvents.first).size,
+ const Size(1920, 1080),
+ );
+ });
+ });
+}
+
+class ImplementsVideoPlayerPlatform extends Mock
+ implements VideoPlayerPlatform {}
+
+class ExtendsVideoPlayerPlatform extends VideoPlayerPlatform {}
diff --git a/script/build_all_plugins_app.sh b/script/build_all_plugins_app.sh
index cdcb02a..1028ee6 100755
--- a/script/build_all_plugins_app.sh
+++ b/script/build_all_plugins_app.sh
@@ -14,6 +14,7 @@
"instrumentation_adapter"
"url_launcher_platform_interface"
"google_sign_in_platform_interface"
+ "video_player_platform_interface"
)
# Comma-separated string of the list above
readonly EXCLUDED=$(IFS=, ; echo "${EXCLUDED_PLUGINS_LIST[*]}")