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 fa84c90f5a61..1bac34f6649b 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 6b7420600e51..eae8f6cb3a46 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 516b6f778c84..32d1e98e586c 100644 --- a/packages/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -2,8 +2,8 @@ name: video_player description: Flutter plugin for displaying inline video with other Flutter widgets on Android and iOS. author: Flutter Team -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 000000000000..0d8803f93540 --- /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/video_player_platform_interface/LICENSE b/packages/video_player/video_player_platform_interface/LICENSE new file mode 100644 index 000000000000..c89293372cf3 --- /dev/null +++ b/packages/video_player/video_player_platform_interface/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 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 000000000000..02ba8e7166fe --- /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 000000000000..593c72684c1d --- /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 init() { + return _channel.invokeMethod('init'); + } + + @override + Future dispose(int textureId) { + return _channel.invokeMethod( + 'dispose', + {'textureId': textureId}, + ); + } + + @override + Future create(DataSource dataSource) async { + Map dataSourceDescription; + + switch (dataSource.sourceType) { + case DataSourceType.asset: + dataSourceDescription = { + 'asset': dataSource.asset, + 'package': dataSource.package, + }; + break; + case DataSourceType.network: + dataSourceDescription = { + 'uri': dataSource.uri, + 'formatHint': _videoFormatStringMap[dataSource.formatHint] + }; + break; + case DataSourceType.file: + dataSourceDescription = {'uri': dataSource.uri}; + break; + } + + final Map response = + await _channel.invokeMapMethod( + 'create', + dataSourceDescription, + ); + return response['textureId']; + } + + @override + Future setLooping(int textureId, bool looping) { + return _channel.invokeMethod( + 'setLooping', + { + 'textureId': textureId, + 'looping': looping, + }, + ); + } + + @override + Future play(int textureId) { + return _channel.invokeMethod( + 'play', + {'textureId': textureId}, + ); + } + + @override + Future pause(int textureId) { + return _channel.invokeMethod( + 'pause', + {'textureId': textureId}, + ); + } + + @override + Future setVolume(int textureId, double volume) { + return _channel.invokeMethod( + 'setVolume', + { + 'textureId': textureId, + 'volume': volume, + }, + ); + } + + @override + Future seekTo(int textureId, Duration position) { + return _channel.invokeMethod( + 'seekTo', + { + 'textureId': textureId, + 'location': position.inMilliseconds, + }, + ); + } + + @override + Future getPosition(int textureId) async { + return Duration( + milliseconds: await _channel.invokeMethod( + 'position', + {'textureId': textureId}, + ), + ); + } + + @override + Stream videoEventsFor(int textureId) { + return _eventChannelFor(textureId) + .receiveBroadcastStream() + .map((dynamic event) { + final Map 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 values = map['values']; + + return VideoEvent( + buffered: values.map(_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 _videoFormatStringMap = + { + VideoFormat.ss: 'ss', + VideoFormat.hls: 'hls', + VideoFormat.dash: 'dash', + VideoFormat.other: 'other', + }; + + DurationRange _toDurationRange(dynamic value) { + final List 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 000000000000..6c4ecaf58509 --- /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 init() { + throw UnimplementedError('init() has not been implemented.'); + } + + /// Clears one video. + Future dispose(int textureId) { + throw UnimplementedError('dispose() has not been implemented.'); + } + + /// Creates an instance of a video player and returns its textureId. + Future create(DataSource dataSource) { + throw UnimplementedError('create() has not been implemented.'); + } + + /// Returns a Stream of [VideoEventType]s. + Stream videoEventsFor(int textureId) { + throw UnimplementedError('videoEventsFor() has not been implemented.'); + } + + /// Sets the looping attribute of the video. + Future setLooping(int textureId, bool looping) { + throw UnimplementedError('setLooping() has not been implemented.'); + } + + /// Starts the video playback. + Future play(int textureId) { + throw UnimplementedError('play() has not been implemented.'); + } + + /// Stops the video playback. + Future pause(int textureId) { + throw UnimplementedError('pause() has not been implemented.'); + } + + /// Sets the volume to a range between 0.0 and 1.0. + Future setVolume(int textureId, double volume) { + throw UnimplementedError('setVolume() has not been implemented.'); + } + + /// Sets the video position to a [Duration] from the start. + Future seekTo(int textureId, Duration position) { + throw UnimplementedError('seekTo() has not been implemented.'); + } + + /// Gets the video position as [Duration] from the start. + Future 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 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 000000000000..bf4d4c03bce3 --- /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 +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 000000000000..7db8ef6fbe0f --- /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()); + }); + + test('Cannot be implemented with `implements`', () { + expect(() { + VideoPlayerPlatform.instance = ImplementsVideoPlayerPlatform(); + }, throwsA(isInstanceOf())); + }); + + 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 log = []; + final MethodChannelVideoPlayer player = MethodChannelVideoPlayer(); + + setUp(() { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + log.add(methodCall); + }); + }); + + tearDown(() { + log.clear(); + }); + + test('init', () async { + await player.init(); + expect( + log, + [isMethodCall('init', arguments: null)], + ); + }); + + test('dispose', () async { + await player.dispose(1); + expect( + log, + [ + isMethodCall('dispose', arguments: { + 'textureId': 1, + }) + ], + ); + }); + + test('create with asset', () async { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + log.add(methodCall); + return {'textureId': 3}; + }); + final int textureId = await player.create(DataSource( + sourceType: DataSourceType.asset, + asset: 'someAsset', + package: 'somePackage', + )); + expect( + log, + [ + isMethodCall('create', arguments: { + 'asset': 'someAsset', + 'package': 'somePackage', + }) + ], + ); + expect(textureId, 3); + }); + + test('create with network', () async { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + log.add(methodCall); + return {'textureId': 3}; + }); + final int textureId = await player.create(DataSource( + sourceType: DataSourceType.network, + uri: 'someUri', + formatHint: VideoFormat.dash, + )); + expect( + log, + [ + isMethodCall('create', arguments: { + 'uri': 'someUri', + 'formatHint': 'dash' + }) + ], + ); + expect(textureId, 3); + }); + + test('create with file', () async { + channel.setMockMethodCallHandler((MethodCall methodCall) async { + log.add(methodCall); + return {'textureId': 3}; + }); + final int textureId = await player.create(DataSource( + sourceType: DataSourceType.file, + uri: 'someUri', + )); + expect( + log, + [ + isMethodCall('create', arguments: { + 'uri': 'someUri', + }) + ], + ); + expect(textureId, 3); + }); + + test('setLooping', () async { + await player.setLooping(1, true); + expect( + log, + [ + isMethodCall('setLooping', arguments: { + 'textureId': 1, + 'looping': true, + }) + ], + ); + }); + + test('play', () async { + await player.play(1); + expect( + log, + [ + isMethodCall('play', arguments: { + 'textureId': 1, + }) + ], + ); + }); + + test('pause', () async { + await player.pause(1); + expect( + log, + [ + isMethodCall('pause', arguments: { + 'textureId': 1, + }) + ], + ); + }); + + test('setVolume', () async { + await player.setVolume(1, 0.7); + expect( + log, + [ + isMethodCall('setVolume', arguments: { + 'textureId': 1, + 'volume': 0.7, + }) + ], + ); + }); + + test('seekTo', () async { + await player.seekTo(1, const Duration(milliseconds: 12345)); + expect( + log, + [ + isMethodCall('seekTo', arguments: { + '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, + [ + isMethodCall('position', arguments: { + '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({ + '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 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 cdcb02a02140..1028ee607386 100755 --- a/script/build_all_plugins_app.sh +++ b/script/build_all_plugins_app.sh @@ -14,6 +14,7 @@ readonly EXCLUDED_PLUGINS_LIST=( "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[*]}")