From 109813e266fb614b4100e02cdaa15bbd985aafda Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Mon, 5 May 2025 16:48:06 +0200 Subject: [PATCH 01/16] Implements background playback functionality using allowBackgroundPlayback option. --- .../video_player/video_player/CHANGELOG.md | 5 +-- packages/video_player/video_player/README.md | 15 ++++++++ .../video_player/lib/video_player.dart | 5 +++ .../video_player/video_player/pubspec.yaml | 2 +- .../video_player/test/video_player_test.dart | 5 +++ .../video_player_android/CHANGELOG.md | 4 +++ .../flutter/plugins/videoplayer/Messages.java | 30 +++++++++++++++- .../plugins/videoplayer/VideoPlayer.java | 9 +++++ .../videoplayer/VideoPlayerOptions.java | 1 + .../videoplayer/VideoPlayerPlugin.java | 5 +++ .../texture/TextureVideoPlayer.java | 11 ++++-- .../lib/src/android_video_player.dart | 5 +++ .../lib/src/messages.g.dart | 26 +++++++++++++- .../pigeons/messages.dart | 1 + .../video_player_android/pubspec.yaml | 2 +- .../test/android_video_player_test.dart | 17 +++++++++ .../video_player_android/test/test_api.g.dart | 36 ++++++++++++++++++- .../video_player_avfoundation/CHANGELOG.md | 4 +++ .../FVPVideoPlayerPlugin.m | 12 +++++++ .../video_player_avfoundation/messages.g.h | 4 ++- .../video_player_avfoundation/messages.g.m | 21 ++++++++++- .../lib/src/avfoundation_video_player.dart | 5 +++ .../lib/src/messages.g.dart | 26 +++++++++++++- .../pigeons/messages.dart | 2 ++ .../video_player_avfoundation/pubspec.yaml | 2 +- .../test/avfoundation_video_player_test.dart | 17 +++++++++ .../test/test_api.g.dart | 36 ++++++++++++++++++- .../CHANGELOG.md | 4 +++ .../lib/video_player_platform_interface.dart | 6 ++++ .../pubspec.yaml | 2 +- .../video_player_web/CHANGELOG.md | 4 +++ .../video_player_web_test.dart | 8 +++++ .../lib/video_player_web.dart | 5 +++ .../video_player_web/pubspec.yaml | 2 +- 34 files changed, 323 insertions(+), 16 deletions(-) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 1b3caf42876..a8f4f1c51d9 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,6 +1,7 @@ -## NEXT +## 2.10.0 -* Updates README to indicate that Andoid SDK <21 is no longer supported. +* Implements background playback functionality using allowBackgroundPlayback option. +* Updates README to indicate that Android SDK <21 is no longer supported. ## 2.9.5 diff --git a/packages/video_player/video_player/README.md b/packages/video_player/video_player/README.md index dcf1a6018bf..4bec02069e5 100644 --- a/packages/video_player/video_player/README.md +++ b/packages/video_player/video_player/README.md @@ -22,6 +22,15 @@ in `/ios/Runner/Info.plist`. See [Apple's documentation](https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity) to determine the right combination of entries for your use case and supported iOS versions. +If you plan to use background playback, you will also need to add the following permission in your Info.plist file. + +```xml +UIBackgroundModes + + audio + +``` + ### Android If you are using network-based videos, ensure that the following permission is present in your @@ -31,6 +40,12 @@ Android Manifest file, located in `/android/app/src/main/AndroidMa ``` +If you plan to use background playback, you will also need to add the following permission in your Android Manifest file. + +```xml + +``` + ### macOS If you are using network-based videos, you will need to [add the diff --git a/packages/video_player/video_player/lib/video_player.dart b/packages/video_player/video_player/lib/video_player.dart index 12b30c2a146..169b8dbe850 100644 --- a/packages/video_player/video_player/lib/video_player.dart +++ b/packages/video_player/video_player/lib/video_player.dart @@ -436,6 +436,11 @@ class VideoPlayerController extends ValueNotifier { .setMixWithOthers(videoPlayerOptions!.mixWithOthers); } + if (videoPlayerOptions?.allowBackgroundPlayback != null) { + await _videoPlayerPlatform.setAllowBackgroundPlayback( + videoPlayerOptions!.allowBackgroundPlayback); + } + _textureId = (await _videoPlayerPlatform.create(dataSourceDescription)) ?? kUninitializedTextureId; _creatingCompleter!.complete(null); diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 0f80d59e6a9..90a2bbebe97 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter widgets on Android, iOS, and web. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.9.5 +version: 2.10.0 environment: sdk: ^3.4.0 diff --git a/packages/video_player/video_player/test/video_player_test.dart b/packages/video_player/video_player/test/video_player_test.dart index a7b0888faa6..cad9cbeb77e 100644 --- a/packages/video_player/video_player/test/video_player_test.dart +++ b/packages/video_player/video_player/test/video_player_test.dart @@ -1498,6 +1498,11 @@ class FakeVideoPlayerPlatform extends VideoPlayerPlatform { calls.add('setMixWithOthers'); } + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { + calls.add('setAllowBackgroundPlayback'); + } + @override Widget buildView(int textureId) { return Texture(textureId: textureId); diff --git a/packages/video_player/video_player_android/CHANGELOG.md b/packages/video_player/video_player_android/CHANGELOG.md index f9a2064447e..1634c1d6786 100644 --- a/packages/video_player/video_player_android/CHANGELOG.md +++ b/packages/video_player/video_player_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.9.0 + +* Implements background playback functionality using allowBackgroundPlayback option. + ## 2.8.2 * Fixes a [bug](https://github.com/flutter/flutter/issues/164689) that can cause video to diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java index 581cb7b80f6..d114623f2ed 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon package io.flutter.plugins.videoplayer; @@ -21,6 +21,10 @@ import java.lang.annotation.Target; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -397,6 +401,8 @@ public interface AndroidVideoPlayerApi { void setMixWithOthers(@NonNull Boolean mixWithOthers); + void setAllowBackgroundPlayback(@NonNull Boolean allowBackgroundPlayback); + /** The codec used by AndroidVideoPlayerApi. */ static @NonNull MessageCodec getCodec() { return PigeonCodec.INSTANCE; @@ -693,6 +699,28 @@ static void setUp( channel.setMessageHandler(null); } } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, "dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback" + messageChannelSuffix, getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + Boolean allowBackgroundPlaybackArg = (Boolean) args.get(0); + try { + api.setAllowBackgroundPlayback(allowBackgroundPlaybackArg); + wrapped.add(0, null); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } } } } diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java index 8040e86419c..572c3522e4b 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java @@ -58,6 +58,15 @@ protected ExoPlayer createVideoPlayer() { exoPlayer.addListener(createExoPlayerEventListener(exoPlayer)); setAudioAttributes(exoPlayer, options.mixWithOthers); + if (options.allowBackgroundPlayback) { + exoPlayer.setWakeMode(C.WAKE_MODE_NETWORK); + exoPlayer.setAudioAttributes( + new AudioAttributes.Builder() + .setUsage(C.USAGE_MEDIA) + .build(), + /* handleAudioFocus= */ !options.mixWithOthers); + } + return exoPlayer; } diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java index 7c8a6aab726..c793b503a85 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerOptions.java @@ -6,4 +6,5 @@ public class VideoPlayerOptions { public boolean mixWithOthers; + public boolean allowBackgroundPlayback; } diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java index 3db5fd42a26..200e6f08978 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java @@ -223,6 +223,11 @@ public void setMixWithOthers(@NonNull Boolean mixWithOthers) { options.mixWithOthers = mixWithOthers; } + @Override + public void setAllowBackgroundPlayback(@NonNull Boolean allowBackgroundPlayback) { + options.allowBackgroundPlayback = allowBackgroundPlayback; + } + private interface KeyForAssetFn { String get(String asset); } diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java index 535c302921d..69fc38a0331 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java @@ -30,6 +30,7 @@ public final class TextureVideoPlayer extends VideoPlayer implements TextureRegistry.SurfaceProducer.Callback { @NonNull private final TextureRegistry.SurfaceProducer surfaceProducer; @Nullable private ExoPlayerState savedStateDuring; + @Nullable private final VideoPlayerOptions options; /** * Creates a texture video player. @@ -72,6 +73,7 @@ public TextureVideoPlayer( this.surfaceProducer = surfaceProducer; surfaceProducer.setCallback(this); + this.options = options; this.exoPlayer.setVideoSurface(surfaceProducer.getSurface()); } @@ -100,8 +102,13 @@ public void onSurfaceAvailable() { public void onSurfaceDestroyed() { // Intentionally do not call pause/stop here, because the surface has already been released // at this point (see https://github.com/flutter/flutter/issues/156451). - savedStateDuring = ExoPlayerState.save(exoPlayer); - exoPlayer.release(); + if (options == null || !options.allowBackgroundPlayback) { + savedStateDuring = ExoPlayerState.save(exoPlayer); + exoPlayer.release(); + } else { + savedStateDuring = null; + exoPlayer.setVideoSurface(null); + } } private boolean playerHasBeenSuspended() { diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart b/packages/video_player/video_player_android/lib/src/android_video_player.dart index 2df0a0ebc36..389e23f1940 100644 --- a/packages/video_player/video_player_android/lib/src/android_video_player.dart +++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart @@ -198,6 +198,11 @@ class AndroidVideoPlayer extends VideoPlayerPlatform { return _api.setMixWithOthers(mixWithOthers); } + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + return _api.setAllowBackgroundPlayback(allowBackgroundPlayback); + } + EventChannel _eventChannelFor(int playerId) { return EventChannel('flutter.io/videoPlayer/videoEvents$playerId'); } diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart b/packages/video_player/video_player_android/lib/src/messages.g.dart index 717e8e020d0..d33efc352c8 100644 --- a/packages/video_player/video_player_android/lib/src/messages.g.dart +++ b/packages/video_player/video_player_android/lib/src/messages.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers @@ -429,4 +429,28 @@ class AndroidVideoPlayerApi { return; } } + + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([allowBackgroundPlayback]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } } diff --git a/packages/video_player/video_player_android/pigeons/messages.dart b/packages/video_player/video_player_android/pigeons/messages.dart index a1f1211e533..a6a7ca67fc2 100644 --- a/packages/video_player/video_player_android/pigeons/messages.dart +++ b/packages/video_player/video_player_android/pigeons/messages.dart @@ -52,4 +52,5 @@ abstract class AndroidVideoPlayerApi { void seekTo(int playerId, int position); void pause(int playerId); void setMixWithOthers(bool mixWithOthers); + void setAllowBackgroundPlayback(bool allowBackgroundPlayback); } diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml index 40b0c33388c..ab33b984fb3 100644 --- a/packages/video_player/video_player_android/pubspec.yaml +++ b/packages/video_player/video_player_android/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_android description: Android implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_android issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.8.2 +version: 2.9.0 environment: sdk: ^3.6.0 diff --git a/packages/video_player/video_player_android/test/android_video_player_test.dart b/packages/video_player/video_player_android/test/android_video_player_test.dart index ddc6617fc4e..80ba87f4e0b 100644 --- a/packages/video_player/video_player_android/test/android_video_player_test.dart +++ b/packages/video_player/video_player_android/test/android_video_player_test.dart @@ -21,6 +21,7 @@ class _ApiLogger implements TestHostVideoPlayerApi { double? passedVolume; double? passedPlaybackSpeed; bool? passedMixWithOthers; + bool? passedAllowBackgroundPlayback; @override int create(CreateMessage arg) { @@ -58,6 +59,12 @@ class _ApiLogger implements TestHostVideoPlayerApi { passedMixWithOthers = mixWithOthers; } + @override + void setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + log.add('setAllowBackgroundPlayback'); + passedAllowBackgroundPlayback = allowBackgroundPlayback; + } + @override int position(int playerId) { log.add('position'); @@ -349,6 +356,16 @@ void main() { expect(log.passedMixWithOthers, false); }); + test('setAllowBackgroundPlayback', () async { + await player.setAllowBackgroundPlayback(true); + expect(log.log.last, 'setAllowBackgroundPlayback'); + expect(log.passedAllowBackgroundPlayback, true); + + await player.setAllowBackgroundPlayback(false); + expect(log.log.last, 'setAllowBackgroundPlayback'); + expect(log.passedAllowBackgroundPlayback, false); + }); + test('setVolume', () async { await player.setVolume(1, 0.7); expect(log.log.last, 'setVolume'); diff --git a/packages/video_player/video_player_android/test/test_api.g.dart b/packages/video_player/video_player_android/test/test_api.g.dart index f3ac1b7fb73..4fd2e6d9fd9 100644 --- a/packages/video_player/video_player_android/test/test_api.g.dart +++ b/packages/video_player/video_player_android/test/test_api.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers // ignore_for_file: avoid_relative_lib_imports @@ -77,6 +77,8 @@ abstract class TestHostVideoPlayerApi { void setMixWithOthers(bool mixWithOthers); + void setAllowBackgroundPlayback(bool allowBackgroundPlayback); + static void setUp( TestHostVideoPlayerApi? api, { BinaryMessenger? binaryMessenger, @@ -442,5 +444,37 @@ abstract class TestHostVideoPlayerApi { }); } } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.'); + final List args = (message as List?)!; + final bool? arg_allowBackgroundPlayback = (args[0] as bool?); + assert(arg_allowBackgroundPlayback != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); + try { + api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } } } diff --git a/packages/video_player/video_player_avfoundation/CHANGELOG.md b/packages/video_player/video_player_avfoundation/CHANGELOG.md index 992c015df1b..6f6d6e4afc4 100644 --- a/packages/video_player/video_player_avfoundation/CHANGELOG.md +++ b/packages/video_player/video_player_avfoundation/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.8.0 + +* Implements background playback functionality using allowBackgroundPlayback option. + ## 2.7.1 * Adds possibility to play videos at more than 30 FPS. diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m index 1936435ffd0..8ab637a0b09 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m @@ -322,4 +322,16 @@ - (void)setMixWithOthers:(BOOL)mixWithOthers #endif } +- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback + error:(FlutterError **)error { +#if TARGET_OS_IOS + if (allowBackgroundPlayback) { + upgradeAudioSessionCategory(AVAudioSessionCategoryPlayback, + AVAudioSessionCategoryOptionMixWithOthers, 0); + } else { + upgradeAudioSessionCategory(AVAudioSession.sharedInstance.category, 0, 0); + } +#endif +} + @end diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h index 6a115c6b9ac..7069501b2d5 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon #import @@ -80,6 +80,8 @@ NSObject *FVPGetMessagesCodec(void); completion:(void (^)(FlutterError *_Nullable))completion; - (void)pausePlayer:(NSInteger)playerId error:(FlutterError *_Nullable *_Nonnull)error; - (void)setMixWithOthers:(BOOL)mixWithOthers error:(FlutterError *_Nullable *_Nonnull)error; +- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback + error:(FlutterError *_Nullable *_Nonnull)error; @end extern void SetUpFVPAVFoundationVideoPlayerApi( diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m index 83c41211f74..a847cd94412 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon #import "./include/video_player_avfoundation/messages.g.h" @@ -458,4 +458,23 @@ void SetUpFVPAVFoundationVideoPlayerApiWithSuffix(id bin [channel setMessageHandler:nil]; } } + { + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback", messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:FVPGetMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setAllowBackgroundPlayback:error:)], @"FVPAVFoundationVideoPlayerApi api (%@) doesn't respond to @selector(setAllowBackgroundPlayback:error:)", api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + BOOL arg_allowBackgroundPlayback = [GetNullableObjectAtIndex(args, 0) boolValue]; + FlutterError *error; + [api setAllowBackgroundPlayback:arg_allowBackgroundPlayback error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } } diff --git a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart index ec790187abf..3facf2fb2bf 100644 --- a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart +++ b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart @@ -179,6 +179,11 @@ class AVFoundationVideoPlayer extends VideoPlayerPlatform { return _api.setMixWithOthers(mixWithOthers); } + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + return _api.setAllowBackgroundPlayback(allowBackgroundPlayback); + } + @override Widget buildView(int playerId) { return buildViewWithOptions( diff --git a/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart b/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart index c1d16ecce5e..eac3f83f8c7 100644 --- a/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart +++ b/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers @@ -429,4 +429,28 @@ class AVFoundationVideoPlayerApi { return; } } + + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([allowBackgroundPlayback]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } } diff --git a/packages/video_player/video_player_avfoundation/pigeons/messages.dart b/packages/video_player/video_player_avfoundation/pigeons/messages.dart index ffa2f968c32..0abb3b86ae8 100644 --- a/packages/video_player/video_player_avfoundation/pigeons/messages.dart +++ b/packages/video_player/video_player_avfoundation/pigeons/messages.dart @@ -73,4 +73,6 @@ abstract class AVFoundationVideoPlayerApi { void pause(int playerId); @ObjCSelector('setMixWithOthers:') void setMixWithOthers(bool mixWithOthers); + @ObjCSelector('setAllowBackgroundPlayback:') + void setAllowBackgroundPlayback(bool allowBackgroundPlayback); } diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 20087db42cc..6c73b0bfb53 100644 --- a/packages/video_player/video_player_avfoundation/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_avfoundation description: iOS and macOS implementation of the video_player plugin. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_avfoundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.7.1 +version: 2.8.0 environment: sdk: ^3.4.0 diff --git a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart index 3d02cef3cbe..e25a6cbb554 100644 --- a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart +++ b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart @@ -20,6 +20,7 @@ class _ApiLogger implements TestHostVideoPlayerApi { double? volume; double? playbackSpeed; bool? mixWithOthers; + bool? allowBackgroundPlayback; @override int create(CreationOptions options) { @@ -57,6 +58,12 @@ class _ApiLogger implements TestHostVideoPlayerApi { mixWithOthers = enabled; } + @override + void setAllowBackgroundPlayback(bool enabled) { + log.add('setAllowBackgroundPlayback'); + allowBackgroundPlayback = enabled; + } + @override int getPosition(int playerId) { log.add('position'); @@ -335,6 +342,16 @@ void main() { expect(log.mixWithOthers, false); }); + test('setAllowBackgroundPlayback', () async { + await player.setAllowBackgroundPlayback(true); + expect(log.log.last, 'setAllowBackgroundPlayback'); + expect(log.allowBackgroundPlayback, true); + + await player.setAllowBackgroundPlayback(false); + expect(log.log.last, 'setAllowBackgroundPlayback'); + expect(log.allowBackgroundPlayback, false); + }); + test('setVolume', () async { await player.setVolume(1, 0.7); expect(log.log.last, 'setVolume'); diff --git a/packages/video_player/video_player_avfoundation/test/test_api.g.dart b/packages/video_player/video_player_avfoundation/test/test_api.g.dart index 38ed42f1f9e..5e93f96f6fc 100644 --- a/packages/video_player/video_player_avfoundation/test/test_api.g.dart +++ b/packages/video_player/video_player_avfoundation/test/test_api.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.1), do not edit directly. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers // ignore_for_file: avoid_relative_lib_imports @@ -77,6 +77,8 @@ abstract class TestHostVideoPlayerApi { void setMixWithOthers(bool mixWithOthers); + void setAllowBackgroundPlayback(bool allowBackgroundPlayback); + static void setUp( TestHostVideoPlayerApi? api, { BinaryMessenger? binaryMessenger, @@ -443,5 +445,37 @@ abstract class TestHostVideoPlayerApi { }); } } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback was null.'); + final List args = (message as List?)!; + final bool? arg_allowBackgroundPlayback = (args[0] as bool?); + assert(arg_allowBackgroundPlayback != null, + 'Argument for dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); + try { + api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } } } diff --git a/packages/video_player/video_player_platform_interface/CHANGELOG.md b/packages/video_player/video_player_platform_interface/CHANGELOG.md index 5e8f06df267..edd0d04de1f 100644 --- a/packages/video_player/video_player_platform_interface/CHANGELOG.md +++ b/packages/video_player/video_player_platform_interface/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.4.0 + +* Implements background playback functionality using allowBackgroundPlayback option. + ## 6.3.0 * Adds support for platform views as an optional way of displaying a video. 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 index 13c9cf55aa7..2e676b3bc9c 100644 --- 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 @@ -117,6 +117,12 @@ abstract class VideoPlayerPlatform extends PlatformInterface { throw UnimplementedError('setMixWithOthers() has not been implemented.'); } + /// Sets the audio mode to allow background playback. + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + throw UnimplementedError( + 'setAllowBackgroundPlayback() has not been implemented.'); + } + /// Sets additional options on web. Future setWebOptions(int playerId, VideoPlayerWebOptions options) { throw UnimplementedError('setWebOptions() has not been implemented.'); diff --git a/packages/video_player/video_player_platform_interface/pubspec.yaml b/packages/video_player/video_player_platform_interface/pubspec.yaml index 66b12850703..53bab651f16 100644 --- a/packages/video_player/video_player_platform_interface/pubspec.yaml +++ b/packages/video_player/video_player_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ repository: https://github.com/flutter/packages/tree/main/packages/video_player/ issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 # 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: 6.3.0 +version: 6.4.0 environment: sdk: ^3.4.0 diff --git a/packages/video_player/video_player_web/CHANGELOG.md b/packages/video_player/video_player_web/CHANGELOG.md index 1db5ab25811..3b37db875ea 100644 --- a/packages/video_player/video_player_web/CHANGELOG.md +++ b/packages/video_player/video_player_web/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.4.0 + +* Implements background playback functionality using allowBackgroundPlayback option. + ## 2.3.5 * Fixes blank first frame on iOS. diff --git a/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart index f2d5193640e..a989afde933 100644 --- a/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart +++ b/packages/video_player/video_player_web/example/integration_test/video_player_web_test.dart @@ -169,6 +169,14 @@ void main() { expect(VideoPlayerPlatform.instance.setMixWithOthers(false), completes); }); + testWidgets('ignores setting allowBackgroundPlayback', + (WidgetTester tester) async { + expect(VideoPlayerPlatform.instance.setAllowBackgroundPlayback(true), + completes); + expect(VideoPlayerPlatform.instance.setAllowBackgroundPlayback(false), + completes); + }); + testWidgets( 'double call to play will emit a single isPlayingStateUpdate event', (WidgetTester tester) async { diff --git a/packages/video_player/video_player_web/lib/video_player_web.dart b/packages/video_player/video_player_web/lib/video_player_web.dart index d65eabacfcc..c84d21c6fc9 100644 --- a/packages/video_player/video_player_web/lib/video_player_web.dart +++ b/packages/video_player/video_player_web/lib/video_player_web.dart @@ -163,4 +163,9 @@ class VideoPlayerPlugin extends VideoPlayerPlatform { /// Sets the audio mode to mix with other sources (ignored). @override Future setMixWithOthers(bool mixWithOthers) => Future.value(); + + /// Sets the audio mode to allow background playback (ignored). + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) => + Future.value(); } diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml index 67c7628130b..ebd5889e512 100644 --- a/packages/video_player/video_player_web/pubspec.yaml +++ b/packages/video_player/video_player_web/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_web description: Web platform implementation of video_player. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player_web issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.3.5 +version: 2.4.0 environment: sdk: ^3.4.0 From 91e8818b9431ec90a4fc4c6b41f47cedf04ca420 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Tue, 6 May 2025 17:35:09 +0200 Subject: [PATCH 02/16] Remove unnecessary iOS code --- .../video_player_avfoundation/FVPVideoPlayerPlugin.m | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m index 8ab637a0b09..487f609938d 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m @@ -325,12 +325,7 @@ - (void)setMixWithOthers:(BOOL)mixWithOthers - (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback error:(FlutterError **)error { #if TARGET_OS_IOS - if (allowBackgroundPlayback) { - upgradeAudioSessionCategory(AVAudioSessionCategoryPlayback, - AVAudioSessionCategoryOptionMixWithOthers, 0); - } else { - upgradeAudioSessionCategory(AVAudioSession.sharedInstance.category, 0, 0); - } + // Do nothing here, the background playback still works #endif } From b6d785ade018efe34f5155cf12f166d9b3b72fad Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Wed, 7 May 2025 11:03:31 +0200 Subject: [PATCH 03/16] Use path-based dependency overrides --- packages/camera/camera/example/pubspec.yaml | 4 ++++ packages/camera/camera_android/example/pubspec.yaml | 4 ++++ .../camera/camera_android_camerax/example/pubspec.yaml | 4 ++++ packages/camera/camera_avfoundation/example/pubspec.yaml | 4 ++++ packages/image_picker/image_picker/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_android/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_ios/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_linux/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_macos/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_windows/example/pubspec.yaml | 4 ++++ packages/interactive_media_ads/example/pubspec.yaml | 4 ++++ packages/video_player/video_player/example/pubspec.yaml | 7 +++++++ packages/video_player/video_player/pubspec.yaml | 7 +++++++ .../video_player/video_player_android/example/pubspec.yaml | 4 ++++ packages/video_player/video_player_android/pubspec.yaml | 4 ++++ .../video_player_avfoundation/example/pubspec.yaml | 4 ++++ .../video_player/video_player_avfoundation/pubspec.yaml | 4 ++++ .../video_player/video_player_web/example/pubspec.yaml | 4 ++++ packages/video_player/video_player_web/pubspec.yaml | 4 ++++ 19 files changed, 82 insertions(+) diff --git a/packages/camera/camera/example/pubspec.yaml b/packages/camera/camera/example/pubspec.yaml index aff0afef21f..cb9c94a13e1 100644 --- a/packages/camera/camera/example/pubspec.yaml +++ b/packages/camera/camera/example/pubspec.yaml @@ -31,3 +31,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/camera/camera_android/example/pubspec.yaml b/packages/camera/camera_android/example/pubspec.yaml index 9c8f8476d0b..a8ca3ea4ec9 100644 --- a/packages/camera/camera_android/example/pubspec.yaml +++ b/packages/camera/camera_android/example/pubspec.yaml @@ -31,3 +31,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/camera/camera_android_camerax/example/pubspec.yaml b/packages/camera/camera_android_camerax/example/pubspec.yaml index 62736015336..05a62b220df 100644 --- a/packages/camera/camera_android_camerax/example/pubspec.yaml +++ b/packages/camera/camera_android_camerax/example/pubspec.yaml @@ -28,4 +28,8 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/camera/camera_avfoundation/example/pubspec.yaml b/packages/camera/camera_avfoundation/example/pubspec.yaml index 9f82d7faf62..ece3b177198 100644 --- a/packages/camera/camera_avfoundation/example/pubspec.yaml +++ b/packages/camera/camera_avfoundation/example/pubspec.yaml @@ -29,3 +29,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/image_picker/image_picker/example/pubspec.yaml b/packages/image_picker/image_picker/example/pubspec.yaml index d064fb0f7e8..71d60ee62d8 100644 --- a/packages/image_picker/image_picker/example/pubspec.yaml +++ b/packages/image_picker/image_picker/example/pubspec.yaml @@ -31,3 +31,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index b3e2931c698..a17d2343d6d 100644 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -33,3 +33,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/image_picker/image_picker_ios/example/pubspec.yaml b/packages/image_picker/image_picker_ios/example/pubspec.yaml index bcb23825648..f786686797d 100755 --- a/packages/image_picker/image_picker_ios/example/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/example/pubspec.yaml @@ -28,3 +28,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/image_picker/image_picker_linux/example/pubspec.yaml b/packages/image_picker/image_picker_linux/example/pubspec.yaml index 30f2d208a69..aa12d0ced5b 100644 --- a/packages/image_picker/image_picker_linux/example/pubspec.yaml +++ b/packages/image_picker/image_picker_linux/example/pubspec.yaml @@ -27,3 +27,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/image_picker/image_picker_macos/example/pubspec.yaml b/packages/image_picker/image_picker_macos/example/pubspec.yaml index 66435a80756..b59c721155f 100644 --- a/packages/image_picker/image_picker_macos/example/pubspec.yaml +++ b/packages/image_picker/image_picker_macos/example/pubspec.yaml @@ -27,3 +27,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/image_picker/image_picker_windows/example/pubspec.yaml b/packages/image_picker/image_picker_windows/example/pubspec.yaml index 204177a5a9a..94ab0f5da5b 100644 --- a/packages/image_picker/image_picker_windows/example/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/example/pubspec.yaml @@ -27,3 +27,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../../packages/video_player/video_player} diff --git a/packages/interactive_media_ads/example/pubspec.yaml b/packages/interactive_media_ads/example/pubspec.yaml index bf8ce6d5a48..a0c0564ad6c 100644 --- a/packages/interactive_media_ads/example/pubspec.yaml +++ b/packages/interactive_media_ads/example/pubspec.yaml @@ -24,3 +24,7 @@ dev_dependencies: flutter: uses-material-design: true +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player: {path: ../../../packages/video_player/video_player} diff --git a/packages/video_player/video_player/example/pubspec.yaml b/packages/video_player/video_player/example/pubspec.yaml index 5755db029dd..6f2917e8430 100644 --- a/packages/video_player/video_player/example/pubspec.yaml +++ b/packages/video_player/video_player/example/pubspec.yaml @@ -35,3 +35,10 @@ flutter: - assets/bumble_bee_captions.srt - assets/bumble_bee_captions.vtt - assets/Audio.mp3 +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 90a2bbebe97..61d3a455c26 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -38,3 +38,10 @@ dev_dependencies: topics: - video - video-player +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_android: {path: ../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../packages/video_player/video_player_web} diff --git a/packages/video_player/video_player_android/example/pubspec.yaml b/packages/video_player/video_player_android/example/pubspec.yaml index a08ae689747..d585f8e00f7 100644 --- a/packages/video_player/video_player_android/example/pubspec.yaml +++ b/packages/video_player/video_player_android/example/pubspec.yaml @@ -34,3 +34,7 @@ flutter: assets: - assets/flutter-mark-square-64.png - assets/Butterfly-209.mp4 +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} diff --git a/packages/video_player/video_player_android/pubspec.yaml b/packages/video_player/video_player_android/pubspec.yaml index ab33b984fb3..30716835377 100644 --- a/packages/video_player/video_player_android/pubspec.yaml +++ b/packages/video_player/video_player_android/pubspec.yaml @@ -30,3 +30,7 @@ dev_dependencies: topics: - video - video-player +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_platform_interface: {path: ../../../packages/video_player/video_player_platform_interface} diff --git a/packages/video_player/video_player_avfoundation/example/pubspec.yaml b/packages/video_player/video_player_avfoundation/example/pubspec.yaml index 9441576e59d..8d7a9f337a1 100644 --- a/packages/video_player/video_player_avfoundation/example/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/example/pubspec.yaml @@ -31,3 +31,7 @@ flutter: assets: - assets/flutter-mark-square-64.png - assets/Butterfly-209.mp4 +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} diff --git a/packages/video_player/video_player_avfoundation/pubspec.yaml b/packages/video_player/video_player_avfoundation/pubspec.yaml index 6c73b0bfb53..dee7b47433d 100644 --- a/packages/video_player/video_player_avfoundation/pubspec.yaml +++ b/packages/video_player/video_player_avfoundation/pubspec.yaml @@ -34,3 +34,7 @@ dev_dependencies: topics: - video - video-player +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_platform_interface: {path: ../../../packages/video_player/video_player_platform_interface} diff --git a/packages/video_player/video_player_web/example/pubspec.yaml b/packages/video_player/video_player_web/example/pubspec.yaml index 1ebae929e19..a315716f24c 100644 --- a/packages/video_player/video_player_web/example/pubspec.yaml +++ b/packages/video_player/video_player_web/example/pubspec.yaml @@ -18,3 +18,7 @@ dev_dependencies: sdk: flutter integration_test: sdk: flutter +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} diff --git a/packages/video_player/video_player_web/pubspec.yaml b/packages/video_player/video_player_web/pubspec.yaml index ebd5889e512..8952db043a1 100644 --- a/packages/video_player/video_player_web/pubspec.yaml +++ b/packages/video_player/video_player_web/pubspec.yaml @@ -31,3 +31,7 @@ dev_dependencies: topics: - video - video-player +# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. +# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins +dependency_overrides: + video_player_platform_interface: {path: ../../../packages/video_player/video_player_platform_interface} From 8aa7279ab8502bd3eba2ebd01e24eaa0fbfd98ed Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Thu, 8 May 2025 10:04:19 +0200 Subject: [PATCH 04/16] Add missing dependency overrides --- packages/camera/camera/example/pubspec.yaml | 4 ++++ packages/camera/camera_android/example/pubspec.yaml | 4 ++++ packages/camera/camera_android_camerax/example/pubspec.yaml | 5 ++++- packages/camera/camera_avfoundation/example/pubspec.yaml | 4 ++++ packages/image_picker/image_picker/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_android/example/pubspec.yaml | 4 ++++ packages/image_picker/image_picker_ios/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_linux/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_macos/example/pubspec.yaml | 4 ++++ .../image_picker/image_picker_windows/example/pubspec.yaml | 4 ++++ packages/interactive_media_ads/example/pubspec.yaml | 4 ++++ 11 files changed, 44 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera/example/pubspec.yaml b/packages/camera/camera/example/pubspec.yaml index cb9c94a13e1..be5f0dedfa8 100644 --- a/packages/camera/camera/example/pubspec.yaml +++ b/packages/camera/camera/example/pubspec.yaml @@ -35,3 +35,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/camera/camera_android/example/pubspec.yaml b/packages/camera/camera_android/example/pubspec.yaml index a8ca3ea4ec9..014e0066e98 100644 --- a/packages/camera/camera_android/example/pubspec.yaml +++ b/packages/camera/camera_android/example/pubspec.yaml @@ -35,3 +35,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/camera/camera_android_camerax/example/pubspec.yaml b/packages/camera/camera_android_camerax/example/pubspec.yaml index 05a62b220df..54c03079068 100644 --- a/packages/camera/camera_android_camerax/example/pubspec.yaml +++ b/packages/camera/camera_android_camerax/example/pubspec.yaml @@ -32,4 +32,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} - + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/camera/camera_avfoundation/example/pubspec.yaml b/packages/camera/camera_avfoundation/example/pubspec.yaml index ece3b177198..5b91fdada53 100644 --- a/packages/camera/camera_avfoundation/example/pubspec.yaml +++ b/packages/camera/camera_avfoundation/example/pubspec.yaml @@ -33,3 +33,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker/example/pubspec.yaml b/packages/image_picker/image_picker/example/pubspec.yaml index 71d60ee62d8..953daef0e57 100644 --- a/packages/image_picker/image_picker/example/pubspec.yaml +++ b/packages/image_picker/image_picker/example/pubspec.yaml @@ -35,3 +35,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index a17d2343d6d..34f7d72585d 100644 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -37,3 +37,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_ios/example/pubspec.yaml b/packages/image_picker/image_picker_ios/example/pubspec.yaml index f786686797d..6b27f79103c 100755 --- a/packages/image_picker/image_picker_ios/example/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/example/pubspec.yaml @@ -32,3 +32,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_linux/example/pubspec.yaml b/packages/image_picker/image_picker_linux/example/pubspec.yaml index aa12d0ced5b..293f11c335c 100644 --- a/packages/image_picker/image_picker_linux/example/pubspec.yaml +++ b/packages/image_picker/image_picker_linux/example/pubspec.yaml @@ -31,3 +31,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_macos/example/pubspec.yaml b/packages/image_picker/image_picker_macos/example/pubspec.yaml index b59c721155f..2c5ef5f596a 100644 --- a/packages/image_picker/image_picker_macos/example/pubspec.yaml +++ b/packages/image_picker/image_picker_macos/example/pubspec.yaml @@ -31,3 +31,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_windows/example/pubspec.yaml b/packages/image_picker/image_picker_windows/example/pubspec.yaml index 94ab0f5da5b..f1137d15160 100644 --- a/packages/image_picker/image_picker_windows/example/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/example/pubspec.yaml @@ -31,3 +31,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/interactive_media_ads/example/pubspec.yaml b/packages/interactive_media_ads/example/pubspec.yaml index a0c0564ad6c..d34756c509c 100644 --- a/packages/interactive_media_ads/example/pubspec.yaml +++ b/packages/interactive_media_ads/example/pubspec.yaml @@ -28,3 +28,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../packages/video_player/video_player} + video_player_android: {path: ../../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../../packages/video_player/video_player_web} From 776beacd80dacff4f9432cdefbd503c718e54395 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Thu, 8 May 2025 10:26:34 +0200 Subject: [PATCH 05/16] Fix incorrect dependency paths --- packages/interactive_media_ads/example/pubspec.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/interactive_media_ads/example/pubspec.yaml b/packages/interactive_media_ads/example/pubspec.yaml index d34756c509c..8d8c9dc1b7b 100644 --- a/packages/interactive_media_ads/example/pubspec.yaml +++ b/packages/interactive_media_ads/example/pubspec.yaml @@ -28,7 +28,7 @@ flutter: # See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins dependency_overrides: video_player: {path: ../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} + video_player_android: {path: ../../../packages/video_player/video_player_android} + video_player_avfoundation: {path: ../../../packages/video_player/video_player_avfoundation} + video_player_platform_interface: {path: ../../../packages/video_player/video_player_platform_interface} + video_player_web: {path: ../../../packages/video_player/video_player_web} From 748ad3bcb35bf42a94bdfdebc02afa2dad55812a Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Thu, 8 May 2025 16:09:22 +0200 Subject: [PATCH 06/16] Fix formatting --- .../io/flutter/plugins/videoplayer/Messages.java | 9 ++++----- .../flutter/plugins/videoplayer/VideoPlayer.java | 10 ++++------ .../FVPVideoPlayerPlugin.m | 3 +-- .../video_player_avfoundation/messages.g.h | 4 ++-- .../video_player_avfoundation/messages.g.m | 16 +++++++++++----- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java index d114623f2ed..e1082d06501 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/Messages.java @@ -21,10 +21,6 @@ import java.lang.annotation.Target; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; @@ -702,7 +698,10 @@ static void setUp( { BasicMessageChannel channel = new BasicMessageChannel<>( - binaryMessenger, "dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback" + messageChannelSuffix, getCodec()); + binaryMessenger, + "dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback" + + messageChannelSuffix, + getCodec()); if (api != null) { channel.setMessageHandler( (message, reply) -> { diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java index 572c3522e4b..ff6ed387b5c 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java @@ -59,12 +59,10 @@ protected ExoPlayer createVideoPlayer() { setAudioAttributes(exoPlayer, options.mixWithOthers); if (options.allowBackgroundPlayback) { - exoPlayer.setWakeMode(C.WAKE_MODE_NETWORK); - exoPlayer.setAudioAttributes( - new AudioAttributes.Builder() - .setUsage(C.USAGE_MEDIA) - .build(), - /* handleAudioFocus= */ !options.mixWithOthers); + exoPlayer.setWakeMode(C.WAKE_MODE_NETWORK); + exoPlayer.setAudioAttributes( + new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build(), + /* handleAudioFocus= */ !options.mixWithOthers); } return exoPlayer; diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m index 487f609938d..c7678135233 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m @@ -322,8 +322,7 @@ - (void)setMixWithOthers:(BOOL)mixWithOthers #endif } -- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback - error:(FlutterError **)error { +- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback error:(FlutterError **)error { #if TARGET_OS_IOS // Do nothing here, the background playback still works #endif diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h index 7069501b2d5..b89c75d17f9 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h @@ -80,8 +80,8 @@ NSObject *FVPGetMessagesCodec(void); completion:(void (^)(FlutterError *_Nullable))completion; - (void)pausePlayer:(NSInteger)playerId error:(FlutterError *_Nullable *_Nonnull)error; - (void)setMixWithOthers:(BOOL)mixWithOthers error:(FlutterError *_Nullable *_Nonnull)error; -- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback - error:(FlutterError *_Nullable *_Nonnull)error; +- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback + error:(FlutterError *_Nullable *_Nonnull)error; @end extern void SetUpFVPAVFoundationVideoPlayerApi( diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m index a847cd94412..5af7f9740f8 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m @@ -459,13 +459,19 @@ void SetUpFVPAVFoundationVideoPlayerApiWithSuffix(id bin } } { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:[NSString stringWithFormat:@"%@%@", @"dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback", messageChannelSuffix] + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.video_player_avfoundation." + @"AVFoundationVideoPlayerApi.setAllowBackgroundPlayback", + messageChannelSuffix] binaryMessenger:binaryMessenger - codec:FVPGetMessagesCodec()]; + codec:FVPGetMessagesCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(setAllowBackgroundPlayback:error:)], @"FVPAVFoundationVideoPlayerApi api (%@) doesn't respond to @selector(setAllowBackgroundPlayback:error:)", api); + NSCAssert([api respondsToSelector:@selector(setAllowBackgroundPlayback:error:)], + @"FVPAVFoundationVideoPlayerApi api (%@) doesn't respond to " + @"@selector(setAllowBackgroundPlayback:error:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; BOOL arg_allowBackgroundPlayback = [GetNullableObjectAtIndex(args, 0) boolValue]; From 62f035d7415c79cecaf056672521bcefd0c09e1e Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Thu, 8 May 2025 16:12:16 +0200 Subject: [PATCH 07/16] Revert dependency overrides for non-video_player packages --- packages/camera/camera/example/pubspec.yaml | 8 -------- packages/camera/camera_android/example/pubspec.yaml | 8 -------- .../camera/camera_android_camerax/example/pubspec.yaml | 8 -------- packages/camera/camera_avfoundation/example/pubspec.yaml | 8 -------- packages/image_picker/image_picker/example/pubspec.yaml | 8 -------- .../image_picker_android/example/pubspec.yaml | 8 -------- .../image_picker/image_picker_ios/example/pubspec.yaml | 8 -------- .../image_picker/image_picker_linux/example/pubspec.yaml | 8 -------- .../image_picker/image_picker_macos/example/pubspec.yaml | 8 -------- .../image_picker_windows/example/pubspec.yaml | 8 -------- 10 files changed, 80 deletions(-) diff --git a/packages/camera/camera/example/pubspec.yaml b/packages/camera/camera/example/pubspec.yaml index be5f0dedfa8..aff0afef21f 100644 --- a/packages/camera/camera/example/pubspec.yaml +++ b/packages/camera/camera/example/pubspec.yaml @@ -31,11 +31,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/camera/camera_android/example/pubspec.yaml b/packages/camera/camera_android/example/pubspec.yaml index 014e0066e98..9c8f8476d0b 100644 --- a/packages/camera/camera_android/example/pubspec.yaml +++ b/packages/camera/camera_android/example/pubspec.yaml @@ -31,11 +31,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/camera/camera_android_camerax/example/pubspec.yaml b/packages/camera/camera_android_camerax/example/pubspec.yaml index 54c03079068..2d6d12ff9c1 100644 --- a/packages/camera/camera_android_camerax/example/pubspec.yaml +++ b/packages/camera/camera_android_camerax/example/pubspec.yaml @@ -28,11 +28,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/camera/camera_avfoundation/example/pubspec.yaml b/packages/camera/camera_avfoundation/example/pubspec.yaml index 5b91fdada53..9f82d7faf62 100644 --- a/packages/camera/camera_avfoundation/example/pubspec.yaml +++ b/packages/camera/camera_avfoundation/example/pubspec.yaml @@ -29,11 +29,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker/example/pubspec.yaml b/packages/image_picker/image_picker/example/pubspec.yaml index 953daef0e57..d064fb0f7e8 100644 --- a/packages/image_picker/image_picker/example/pubspec.yaml +++ b/packages/image_picker/image_picker/example/pubspec.yaml @@ -31,11 +31,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_android/example/pubspec.yaml b/packages/image_picker/image_picker_android/example/pubspec.yaml index 34f7d72585d..b3e2931c698 100644 --- a/packages/image_picker/image_picker_android/example/pubspec.yaml +++ b/packages/image_picker/image_picker_android/example/pubspec.yaml @@ -33,11 +33,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_ios/example/pubspec.yaml b/packages/image_picker/image_picker_ios/example/pubspec.yaml index 6b27f79103c..bcb23825648 100755 --- a/packages/image_picker/image_picker_ios/example/pubspec.yaml +++ b/packages/image_picker/image_picker_ios/example/pubspec.yaml @@ -28,11 +28,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_linux/example/pubspec.yaml b/packages/image_picker/image_picker_linux/example/pubspec.yaml index 293f11c335c..30f2d208a69 100644 --- a/packages/image_picker/image_picker_linux/example/pubspec.yaml +++ b/packages/image_picker/image_picker_linux/example/pubspec.yaml @@ -27,11 +27,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_macos/example/pubspec.yaml b/packages/image_picker/image_picker_macos/example/pubspec.yaml index 2c5ef5f596a..66435a80756 100644 --- a/packages/image_picker/image_picker_macos/example/pubspec.yaml +++ b/packages/image_picker/image_picker_macos/example/pubspec.yaml @@ -27,11 +27,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} diff --git a/packages/image_picker/image_picker_windows/example/pubspec.yaml b/packages/image_picker/image_picker_windows/example/pubspec.yaml index f1137d15160..204177a5a9a 100644 --- a/packages/image_picker/image_picker_windows/example/pubspec.yaml +++ b/packages/image_picker/image_picker_windows/example/pubspec.yaml @@ -27,11 +27,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../../packages/video_player/video_player} - video_player_android: {path: ../../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../../packages/video_player/video_player_web} From 0a9f1b9b1721838df21bb20a61cc561b29958768 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Thu, 8 May 2025 16:14:57 +0200 Subject: [PATCH 08/16] Revert dependency overrides for non-video_player packages --- packages/interactive_media_ads/example/pubspec.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/packages/interactive_media_ads/example/pubspec.yaml b/packages/interactive_media_ads/example/pubspec.yaml index 8d8c9dc1b7b..bf8ce6d5a48 100644 --- a/packages/interactive_media_ads/example/pubspec.yaml +++ b/packages/interactive_media_ads/example/pubspec.yaml @@ -24,11 +24,3 @@ dev_dependencies: flutter: uses-material-design: true -# FOR TESTING AND INITIAL REVIEW ONLY. DO NOT MERGE. -# See https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changing-federated-plugins -dependency_overrides: - video_player: {path: ../../../packages/video_player/video_player} - video_player_android: {path: ../../../packages/video_player/video_player_android} - video_player_avfoundation: {path: ../../../packages/video_player/video_player_avfoundation} - video_player_platform_interface: {path: ../../../packages/video_player/video_player_platform_interface} - video_player_web: {path: ../../../packages/video_player/video_player_web} From cca0a59e9b0a7cf086b92aa23023fa19d24a44aa Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Fri, 9 May 2025 10:04:47 +0200 Subject: [PATCH 09/16] Revert pubspec.yaml changes --- packages/camera/camera_android_camerax/example/pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/camera/camera_android_camerax/example/pubspec.yaml b/packages/camera/camera_android_camerax/example/pubspec.yaml index 2d6d12ff9c1..62736015336 100644 --- a/packages/camera/camera_android_camerax/example/pubspec.yaml +++ b/packages/camera/camera_android_camerax/example/pubspec.yaml @@ -28,3 +28,4 @@ dev_dependencies: flutter: uses-material-design: true + From 8faf122f6f3ccca2fb3e7722e18870d858567c49 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Wed, 4 Jun 2025 11:12:24 +0200 Subject: [PATCH 10/16] Remove native avfoundation no-op --- .../FVPVideoPlayerPlugin.m | 6 ---- .../video_player_avfoundation/messages.g.h | 2 -- .../video_player_avfoundation/messages.g.m | 25 -------------- .../lib/src/avfoundation_video_player.dart | 4 +-- .../lib/src/messages.g.dart | 24 ------------- .../pigeons/messages.dart | 2 -- .../test/avfoundation_video_player_test.dart | 17 ---------- .../test/test_api.g.dart | 34 ------------------- 8 files changed, 1 insertion(+), 113 deletions(-) diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m index c7678135233..1936435ffd0 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/FVPVideoPlayerPlugin.m @@ -322,10 +322,4 @@ - (void)setMixWithOthers:(BOOL)mixWithOthers #endif } -- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback error:(FlutterError **)error { -#if TARGET_OS_IOS - // Do nothing here, the background playback still works -#endif -} - @end diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h index b89c75d17f9..6d4658b59b1 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/include/video_player_avfoundation/messages.g.h @@ -80,8 +80,6 @@ NSObject *FVPGetMessagesCodec(void); completion:(void (^)(FlutterError *_Nullable))completion; - (void)pausePlayer:(NSInteger)playerId error:(FlutterError *_Nullable *_Nonnull)error; - (void)setMixWithOthers:(BOOL)mixWithOthers error:(FlutterError *_Nullable *_Nonnull)error; -- (void)setAllowBackgroundPlayback:(BOOL)allowBackgroundPlayback - error:(FlutterError *_Nullable *_Nonnull)error; @end extern void SetUpFVPAVFoundationVideoPlayerApi( diff --git a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m index 5af7f9740f8..ade3a2cf858 100644 --- a/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m +++ b/packages/video_player/video_player_avfoundation/darwin/video_player_avfoundation/Sources/video_player_avfoundation/messages.g.m @@ -458,29 +458,4 @@ void SetUpFVPAVFoundationVideoPlayerApiWithSuffix(id bin [channel setMessageHandler:nil]; } } - { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName: - [NSString stringWithFormat:@"%@%@", - @"dev.flutter.pigeon.video_player_avfoundation." - @"AVFoundationVideoPlayerApi.setAllowBackgroundPlayback", - messageChannelSuffix] - binaryMessenger:binaryMessenger - codec:FVPGetMessagesCodec()]; - if (api) { - NSCAssert([api respondsToSelector:@selector(setAllowBackgroundPlayback:error:)], - @"FVPAVFoundationVideoPlayerApi api (%@) doesn't respond to " - @"@selector(setAllowBackgroundPlayback:error:)", - api); - [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { - NSArray *args = message; - BOOL arg_allowBackgroundPlayback = [GetNullableObjectAtIndex(args, 0) boolValue]; - FlutterError *error; - [api setAllowBackgroundPlayback:arg_allowBackgroundPlayback error:&error]; - callback(wrapResult(nil, error)); - }]; - } else { - [channel setMessageHandler:nil]; - } - } } diff --git a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart index 3facf2fb2bf..793eca51a78 100644 --- a/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart +++ b/packages/video_player/video_player_avfoundation/lib/src/avfoundation_video_player.dart @@ -180,9 +180,7 @@ class AVFoundationVideoPlayer extends VideoPlayerPlatform { } @override - Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { - return _api.setAllowBackgroundPlayback(allowBackgroundPlayback); - } + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async {} @override Widget buildView(int playerId) { diff --git a/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart b/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart index eac3f83f8c7..dc16a2872de 100644 --- a/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart +++ b/packages/video_player/video_player_avfoundation/lib/src/messages.g.dart @@ -429,28 +429,4 @@ class AVFoundationVideoPlayerApi { return; } } - - Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([allowBackgroundPlayback]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } } diff --git a/packages/video_player/video_player_avfoundation/pigeons/messages.dart b/packages/video_player/video_player_avfoundation/pigeons/messages.dart index 0abb3b86ae8..ffa2f968c32 100644 --- a/packages/video_player/video_player_avfoundation/pigeons/messages.dart +++ b/packages/video_player/video_player_avfoundation/pigeons/messages.dart @@ -73,6 +73,4 @@ abstract class AVFoundationVideoPlayerApi { void pause(int playerId); @ObjCSelector('setMixWithOthers:') void setMixWithOthers(bool mixWithOthers); - @ObjCSelector('setAllowBackgroundPlayback:') - void setAllowBackgroundPlayback(bool allowBackgroundPlayback); } diff --git a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart index e25a6cbb554..3d02cef3cbe 100644 --- a/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart +++ b/packages/video_player/video_player_avfoundation/test/avfoundation_video_player_test.dart @@ -20,7 +20,6 @@ class _ApiLogger implements TestHostVideoPlayerApi { double? volume; double? playbackSpeed; bool? mixWithOthers; - bool? allowBackgroundPlayback; @override int create(CreationOptions options) { @@ -58,12 +57,6 @@ class _ApiLogger implements TestHostVideoPlayerApi { mixWithOthers = enabled; } - @override - void setAllowBackgroundPlayback(bool enabled) { - log.add('setAllowBackgroundPlayback'); - allowBackgroundPlayback = enabled; - } - @override int getPosition(int playerId) { log.add('position'); @@ -342,16 +335,6 @@ void main() { expect(log.mixWithOthers, false); }); - test('setAllowBackgroundPlayback', () async { - await player.setAllowBackgroundPlayback(true); - expect(log.log.last, 'setAllowBackgroundPlayback'); - expect(log.allowBackgroundPlayback, true); - - await player.setAllowBackgroundPlayback(false); - expect(log.log.last, 'setAllowBackgroundPlayback'); - expect(log.allowBackgroundPlayback, false); - }); - test('setVolume', () async { await player.setVolume(1, 0.7); expect(log.log.last, 'setVolume'); diff --git a/packages/video_player/video_player_avfoundation/test/test_api.g.dart b/packages/video_player/video_player_avfoundation/test/test_api.g.dart index 5e93f96f6fc..ee56bbbdf82 100644 --- a/packages/video_player/video_player_avfoundation/test/test_api.g.dart +++ b/packages/video_player/video_player_avfoundation/test/test_api.g.dart @@ -77,8 +77,6 @@ abstract class TestHostVideoPlayerApi { void setMixWithOthers(bool mixWithOthers); - void setAllowBackgroundPlayback(bool allowBackgroundPlayback); - static void setUp( TestHostVideoPlayerApi? api, { BinaryMessenger? binaryMessenger, @@ -445,37 +443,5 @@ abstract class TestHostVideoPlayerApi { }); } } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback was null.'); - final List args = (message as List?)!; - final bool? arg_allowBackgroundPlayback = (args[0] as bool?); - assert(arg_allowBackgroundPlayback != null, - 'Argument for dev.flutter.pigeon.video_player_avfoundation.AVFoundationVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); - try { - api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } } } From 34e7af761bc955e41635bd90e2c7479037aa74e5 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Wed, 4 Jun 2025 14:22:50 +0200 Subject: [PATCH 11/16] Fix code formattating --- .../integration_test/video_player_test.dart | 74 +- .../example/lib/main.dart | 33 +- .../example/lib/mini_controller.dart | 65 +- .../example/lib/mini_controller.dart.orig | 590 ++++++++++++++ .../lib/src/android_video_player.dart | 14 +- .../lib/src/android_video_player.dart.orig | 255 ++++++ .../lib/src/android_video_player.dart.rej | 15 + .../lib/src/messages.g.dart | 126 +-- .../lib/src/messages.g.dart.orig | 451 +++++++++++ .../lib/src/messages.g.dart.rej | 13 + .../lib/src/platform_view_player.dart | 16 +- .../pigeons/messages.dart | 1 - .../test/android_video_player_test.dart | 516 ++++++------ .../test/test_api.g.dart.orig | 480 ++++++++++++ .../test/test_api.g.dart.rej | 740 ++++++++++++++++++ 15 files changed, 3002 insertions(+), 387 deletions(-) create mode 100644 packages/video_player/video_player_android/example/lib/mini_controller.dart.orig create mode 100644 packages/video_player/video_player_android/lib/src/android_video_player.dart.orig create mode 100644 packages/video_player/video_player_android/lib/src/android_video_player.dart.rej create mode 100644 packages/video_player/video_player_android/lib/src/messages.g.dart.orig create mode 100644 packages/video_player/video_player_android/lib/src/messages.g.dart.rej create mode 100644 packages/video_player/video_player_android/test/test_api.g.dart.orig create mode 100644 packages/video_player/video_player_android/test/test_api.g.dart.rej diff --git a/packages/video_player/video_player_android/example/integration_test/video_player_test.dart b/packages/video_player/video_player_android/example/integration_test/video_player_test.dart index fd14ecec09e..3a74ca9ea70 100644 --- a/packages/video_player/video_player_android/example/integration_test/video_player_test.dart +++ b/packages/video_player/video_player_android/example/integration_test/video_player_test.dart @@ -43,9 +43,10 @@ void main() { }); testWidgets('initializes at the start', (_) async { - final int playerId = (await player.create( - DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), - ))!; + final int playerId = + (await player.create( + DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), + ))!; expect( await _getDuration(player, playerId), @@ -56,9 +57,10 @@ void main() { }); testWidgets('can be played', (WidgetTester tester) async { - final int playerId = (await player.create( - DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), - ))!; + final int playerId = + (await player.create( + DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), + ))!; await player.play(playerId); await tester.pumpAndSettle(_playDuration); @@ -68,9 +70,10 @@ void main() { }); testWidgets('can seek', (WidgetTester tester) async { - final int playerId = (await player.create( - DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), - ))!; + final int playerId = + (await player.create( + DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), + ))!; await player.seekTo(playerId, const Duration(seconds: 3)); await tester.pumpAndSettle(_playDuration); @@ -83,9 +86,10 @@ void main() { }); testWidgets('can pause', (WidgetTester tester) async { - final int playerId = (await player.create( - DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), - ))!; + final int playerId = + (await player.create( + DataSource(sourceType: DataSourceType.asset, asset: _videoAssetKey), + ))!; await player.play(playerId); await tester.pumpAndSettle(_playDuration); @@ -108,9 +112,10 @@ void main() { ), ); - final int playerId = (await player.create( - DataSource(sourceType: DataSourceType.file, uri: file.path), - ))!; + final int playerId = + (await player.create( + DataSource(sourceType: DataSourceType.file, uri: file.path), + ))!; await player.play(playerId); await tester.pumpAndSettle(_playDuration); @@ -121,12 +126,13 @@ void main() { }); testWidgets('can play a video from network', (WidgetTester tester) async { - final int playerId = (await player.create( - DataSource( - sourceType: DataSourceType.network, - uri: getUrlForAssetAsNetworkSource(_videoAssetKey), - ), - ))!; + final int playerId = + (await player.create( + DataSource( + sourceType: DataSourceType.network, + uri: getUrlForAssetAsNetworkSource(_videoAssetKey), + ), + ))!; await player.play(playerId); await player.seekTo(playerId, const Duration(seconds: 5)); @@ -144,20 +150,26 @@ void main() { } Future _getDuration(AndroidVideoPlayer player, int playerId) { - return player.videoEventsFor(playerId).firstWhere((VideoEvent event) { - return event.eventType == VideoEventType.initialized; - }).then((VideoEvent event) { - return event.duration!; - }); + return player + .videoEventsFor(playerId) + .firstWhere((VideoEvent event) { + return event.eventType == VideoEventType.initialized; + }) + .then((VideoEvent event) { + return event.duration!; + }); } Future _getBufferingRange( AndroidVideoPlayer player, int playerId, ) { - return player.videoEventsFor(playerId).firstWhere((VideoEvent event) { - return event.eventType == VideoEventType.bufferingUpdate; - }).then((VideoEvent event) { - return event.buffered!.first; - }); + return player + .videoEventsFor(playerId) + .firstWhere((VideoEvent event) { + return event.eventType == VideoEventType.bufferingUpdate; + }) + .then((VideoEvent event) { + return event.buffered!.first; + }); } diff --git a/packages/video_player/video_player_android/example/lib/main.dart b/packages/video_player/video_player_android/example/lib/main.dart index 9cce94b04bb..3bcd1f2dffd 100644 --- a/packages/video_player/video_player_android/example/lib/main.dart +++ b/packages/video_player/video_player_android/example/lib/main.dart @@ -34,15 +34,15 @@ class _App extends StatelessWidget { body: TabBarView( children: [ _ViewTypeTabBar( - builder: (VideoViewType viewType) => - _BumbleBeeRemoteVideo(viewType), + builder: + (VideoViewType viewType) => _BumbleBeeRemoteVideo(viewType), ), _ViewTypeTabBar( builder: (VideoViewType viewType) => _RtspRemoteVideo(viewType), ), _ViewTypeTabBar( - builder: (VideoViewType viewType) => - _ButterFlyAssetVideo(viewType), + builder: + (VideoViewType viewType) => _ButterFlyAssetVideo(viewType), ), ], ), @@ -331,20 +331,21 @@ class _ControlsOverlay extends StatelessWidget { AnimatedSwitcher( duration: const Duration(milliseconds: 50), reverseDuration: const Duration(milliseconds: 200), - child: controller.value.isPlaying - ? const SizedBox.shrink() - : const ColoredBox( - color: Colors.black26, - child: Center( - child: Icon( - key: ValueKey('Play'), - Icons.play_arrow, - color: Colors.white, - size: 100.0, - semanticLabel: 'Play', + child: + controller.value.isPlaying + ? const SizedBox.shrink() + : const ColoredBox( + color: Colors.black26, + child: Center( + child: Icon( + key: ValueKey('Play'), + Icons.play_arrow, + color: Colors.white, + size: 100.0, + semanticLabel: 'Play', + ), ), ), - ), ), GestureDetector( onTap: () { diff --git a/packages/video_player/video_player_android/example/lib/mini_controller.dart b/packages/video_player/video_player_android/example/lib/mini_controller.dart index 40a1877b4d8..09e6e73e1d1 100644 --- a/packages/video_player/video_player_android/example/lib/mini_controller.dart +++ b/packages/video_player/video_player_android/example/lib/mini_controller.dart @@ -44,15 +44,15 @@ class VideoPlayerValue { /// Returns an instance for a video that hasn't been loaded. const VideoPlayerValue.uninitialized() - : this(duration: Duration.zero, isInitialized: false); + : this(duration: Duration.zero, isInitialized: false); /// Returns an instance with the given [errorDescription]. const VideoPlayerValue.erroneous(String errorDescription) - : this( - duration: Duration.zero, - isInitialized: false, - errorDescription: errorDescription, - ); + : this( + duration: Duration.zero, + isInitialized: false, + errorDescription: errorDescription, + ); /// The total duration of the video. /// @@ -155,17 +155,17 @@ class VideoPlayerValue { @override int get hashCode => Object.hash( - duration, - position, - buffered, - isPlaying, - isBuffering, - playbackSpeed, - errorDescription, - size, - isInitialized, - rotationCorrection, - ); + duration, + position, + buffered, + isPlaying, + isBuffering, + playbackSpeed, + errorDescription, + size, + isInitialized, + rotationCorrection, + ); } /// A very minimal version of `VideoPlayerController` for running the example @@ -180,24 +180,24 @@ class MiniController extends ValueNotifier { this.dataSource, { this.package, this.viewType = VideoViewType.textureView, - }) : dataSourceType = DataSourceType.asset, - super(const VideoPlayerValue(duration: Duration.zero)); + }) : dataSourceType = DataSourceType.asset, + super(const VideoPlayerValue(duration: Duration.zero)); /// Constructs a [MiniController] playing a video from obtained from /// the network. MiniController.network( this.dataSource, { this.viewType = VideoViewType.textureView, - }) : dataSourceType = DataSourceType.network, - package = null, - super(const VideoPlayerValue(duration: Duration.zero)); + }) : dataSourceType = DataSourceType.network, + package = null, + super(const VideoPlayerValue(duration: Duration.zero)); /// Constructs a [MiniController] playing a video from obtained from a file. MiniController.file(File file, {this.viewType = VideoViewType.textureView}) - : dataSource = Uri.file(file.absolute.path).toString(), - dataSourceType = DataSourceType.file, - package = null, - super(const VideoPlayerValue(duration: Duration.zero)); + : dataSource = Uri.file(file.absolute.path).toString(), + dataSourceType = DataSourceType.file, + package = null, + super(const VideoPlayerValue(duration: Duration.zero)); /// The URI to the video file. This will be in different formats depending on /// the [DataSourceType] of the original video. @@ -261,7 +261,8 @@ class MiniController extends ValueNotifier { viewType: viewType, ); - _playerId = (await _platform.createWithOptions(creationOptions)) ?? + _playerId = + (await _platform.createWithOptions(creationOptions)) ?? kUninitializedPlayerId; _creatingCompleter!.complete(null); final Completer initializingCompleter = Completer(); @@ -442,11 +443,11 @@ class _VideoPlayerState extends State { return _playerId == MiniController.kUninitializedPlayerId ? Container() : _VideoPlayerWithRotation( - rotation: widget.controller.value.rotationCorrection, - child: _platform.buildViewWithOptions( - VideoViewOptions(playerId: _playerId), - ), - ); + rotation: widget.controller.value.rotationCorrection, + child: _platform.buildViewWithOptions( + VideoViewOptions(playerId: _playerId), + ), + ); } } diff --git a/packages/video_player/video_player_android/example/lib/mini_controller.dart.orig b/packages/video_player/video_player_android/example/lib/mini_controller.dart.orig new file mode 100644 index 00000000000..40a1877b4d8 --- /dev/null +++ b/packages/video_player/video_player_android/example/lib/mini_controller.dart.orig @@ -0,0 +1,590 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// TODO(stuartmorgan): Consider extracting this to a shared local (path-based) +// package for use in all implementation packages. + +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:video_player_platform_interface/video_player_platform_interface.dart'; + +VideoPlayerPlatform? _cachedPlatform; + +VideoPlayerPlatform get _platform { + if (_cachedPlatform == null) { + _cachedPlatform = VideoPlayerPlatform.instance; + _cachedPlatform!.init(); + } + return _cachedPlatform!; +} + +/// The duration, current position, buffering state, error state and settings +/// of a [MiniController]. +@immutable +class VideoPlayerValue { + /// Constructs a video with the given values. Only [duration] is required. The + /// rest will initialize with default values when unset. + const VideoPlayerValue({ + required this.duration, + this.size = Size.zero, + this.position = Duration.zero, + this.buffered = const [], + this.isInitialized = false, + this.isPlaying = false, + this.isBuffering = false, + this.playbackSpeed = 1.0, + this.errorDescription, + this.rotationCorrection = 0, + }); + + /// Returns an instance for a video that hasn't been loaded. + const VideoPlayerValue.uninitialized() + : this(duration: Duration.zero, isInitialized: false); + + /// Returns an instance with the given [errorDescription]. + const VideoPlayerValue.erroneous(String errorDescription) + : this( + duration: Duration.zero, + isInitialized: false, + errorDescription: errorDescription, + ); + + /// The total duration of the video. + /// + /// The duration is [Duration.zero] if the video hasn't been initialized. + final Duration duration; + + /// The current playback position. + final Duration position; + + /// The currently buffered ranges. + final List buffered; + + /// True if the video is playing. False if it's paused. + final bool isPlaying; + + /// True if the video is currently buffering. + final bool isBuffering; + + /// The current speed of the playback. + final double playbackSpeed; + + /// A description of the error if present. + /// + /// If [hasError] is false this is `null`. + final String? errorDescription; + + /// The [size] of the currently loaded video. + final Size size; + + /// Indicates whether or not the video has been loaded and is ready to play. + final bool isInitialized; + + /// Degrees to rotate the video (clockwise) so it is displayed correctly. + final int rotationCorrection; + + /// Indicates whether or not the video is in an error state. If this is true + /// [errorDescription] should have information about the problem. + bool get hasError => errorDescription != null; + + /// Returns [size.width] / [size.height]. + /// + /// Will return `1.0` if: + /// * [isInitialized] is `false` + /// * [size.width], or [size.height] is equal to `0.0` + /// * aspect ratio would be less than or equal to `0.0` + double get aspectRatio { + if (!isInitialized || size.width == 0 || size.height == 0) { + return 1.0; + } + final double aspectRatio = size.width / size.height; + if (aspectRatio <= 0) { + return 1.0; + } + return aspectRatio; + } + + /// Returns a new instance that has the same values as this current instance, + /// except for any overrides passed in as arguments to [copyWidth]. + VideoPlayerValue copyWith({ + Duration? duration, + Size? size, + Duration? position, + List? buffered, + bool? isInitialized, + bool? isPlaying, + bool? isBuffering, + double? playbackSpeed, + String? errorDescription, + int? rotationCorrection, + }) { + return VideoPlayerValue( + duration: duration ?? this.duration, + size: size ?? this.size, + position: position ?? this.position, + buffered: buffered ?? this.buffered, + isInitialized: isInitialized ?? this.isInitialized, + isPlaying: isPlaying ?? this.isPlaying, + isBuffering: isBuffering ?? this.isBuffering, + playbackSpeed: playbackSpeed ?? this.playbackSpeed, + errorDescription: errorDescription ?? this.errorDescription, + rotationCorrection: rotationCorrection ?? this.rotationCorrection, + ); + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is VideoPlayerValue && + runtimeType == other.runtimeType && + duration == other.duration && + position == other.position && + listEquals(buffered, other.buffered) && + isPlaying == other.isPlaying && + isBuffering == other.isBuffering && + playbackSpeed == other.playbackSpeed && + errorDescription == other.errorDescription && + size == other.size && + isInitialized == other.isInitialized && + rotationCorrection == other.rotationCorrection; + + @override + int get hashCode => Object.hash( + duration, + position, + buffered, + isPlaying, + isBuffering, + playbackSpeed, + errorDescription, + size, + isInitialized, + rotationCorrection, + ); +} + +/// A very minimal version of `VideoPlayerController` for running the example +/// without relying on `video_player`. +class MiniController extends ValueNotifier { + /// Constructs a [MiniController] playing a video from an asset. + /// + /// The name of the asset is given by the [dataSource] argument and must not be + /// null. The [package] argument must be non-null when the asset comes from a + /// package and null otherwise. + MiniController.asset( + this.dataSource, { + this.package, + this.viewType = VideoViewType.textureView, + }) : dataSourceType = DataSourceType.asset, + super(const VideoPlayerValue(duration: Duration.zero)); + + /// Constructs a [MiniController] playing a video from obtained from + /// the network. + MiniController.network( + this.dataSource, { + this.viewType = VideoViewType.textureView, + }) : dataSourceType = DataSourceType.network, + package = null, + super(const VideoPlayerValue(duration: Duration.zero)); + + /// Constructs a [MiniController] playing a video from obtained from a file. + MiniController.file(File file, {this.viewType = VideoViewType.textureView}) + : dataSource = Uri.file(file.absolute.path).toString(), + dataSourceType = DataSourceType.file, + package = null, + super(const VideoPlayerValue(duration: Duration.zero)); + + /// The URI to the video file. This will be in different formats depending on + /// the [DataSourceType] of the original video. + final String dataSource; + + /// Describes the type of data source this [MiniController] + /// is constructed with. + final DataSourceType dataSourceType; + + /// Only set for [asset] videos. The package that the asset was loaded from. + final String? package; + + /// The type of view used to display the video. + final VideoViewType viewType; + + Timer? _timer; + Completer? _creatingCompleter; + StreamSubscription? _eventSubscription; + + /// The id of a player that hasn't been initialized. + @visibleForTesting + static const int kUninitializedPlayerId = -1; + int _playerId = kUninitializedPlayerId; + + /// This is just exposed for testing. It shouldn't be used by anyone depending + /// on the plugin. + @visibleForTesting + int get playerId => _playerId; + + /// Attempts to open the given [dataSource] and load metadata about the video. + Future initialize() async { + _creatingCompleter = Completer(); + + late DataSource dataSourceDescription; + switch (dataSourceType) { + case DataSourceType.asset: + dataSourceDescription = DataSource( + sourceType: DataSourceType.asset, + asset: dataSource, + package: package, + ); + case DataSourceType.network: + dataSourceDescription = DataSource( + sourceType: DataSourceType.network, + uri: dataSource, + ); + case DataSourceType.file: + dataSourceDescription = DataSource( + sourceType: DataSourceType.file, + uri: dataSource, + ); + case DataSourceType.contentUri: + dataSourceDescription = DataSource( + sourceType: DataSourceType.contentUri, + uri: dataSource, + ); + } + + final VideoCreationOptions creationOptions = VideoCreationOptions( + dataSource: dataSourceDescription, + viewType: viewType, + ); + + _playerId = (await _platform.createWithOptions(creationOptions)) ?? + kUninitializedPlayerId; + _creatingCompleter!.complete(null); + final Completer initializingCompleter = Completer(); + + void eventListener(VideoEvent event) { + switch (event.eventType) { + case VideoEventType.initialized: + value = value.copyWith( + duration: event.duration, + rotationCorrection: event.rotationCorrection, + size: event.size, + isInitialized: event.duration != null, + ); + initializingCompleter.complete(null); + _platform.setVolume(_playerId, 1.0); + _platform.setLooping(_playerId, true); + _applyPlayPause(); + case VideoEventType.completed: + pause().then((void pauseResult) => seekTo(value.duration)); + case VideoEventType.bufferingUpdate: + value = value.copyWith(buffered: event.buffered); + case VideoEventType.bufferingStart: + value = value.copyWith(isBuffering: true); + case VideoEventType.bufferingEnd: + value = value.copyWith(isBuffering: false); + case VideoEventType.isPlayingStateUpdate: + value = value.copyWith(isPlaying: event.isPlaying); + case VideoEventType.unknown: + break; + } + } + + void errorListener(Object obj) { + final PlatformException e = obj as PlatformException; + value = VideoPlayerValue.erroneous(e.message!); + _timer?.cancel(); + if (!initializingCompleter.isCompleted) { + initializingCompleter.completeError(obj); + } + } + + _eventSubscription = _platform + .videoEventsFor(_playerId) + .listen(eventListener, onError: errorListener); + return initializingCompleter.future; + } + + @override + Future dispose() async { + if (_creatingCompleter != null) { + await _creatingCompleter!.future; + _timer?.cancel(); + await _eventSubscription?.cancel(); + await _platform.dispose(_playerId); + } + super.dispose(); + } + + /// Starts playing the video. + Future play() async { + value = value.copyWith(isPlaying: true); + await _applyPlayPause(); + } + + /// Pauses the video. + Future pause() async { + value = value.copyWith(isPlaying: false); + await _applyPlayPause(); + } + + Future _applyPlayPause() async { + _timer?.cancel(); + if (value.isPlaying) { + await _platform.play(_playerId); + + _timer = Timer.periodic(const Duration(milliseconds: 500), ( + Timer timer, + ) async { + final Duration? newPosition = await position; + if (newPosition == null) { + return; + } + _updatePosition(newPosition); + }); + await _applyPlaybackSpeed(); + } else { + await _platform.pause(_playerId); + } + } + + Future _applyPlaybackSpeed() async { + if (value.isPlaying) { + await _platform.setPlaybackSpeed(_playerId, value.playbackSpeed); + } + } + + /// The position in the current video. + Future get position async { + return _platform.getPosition(_playerId); + } + + /// Sets the video's current timestamp to be at [position]. + Future seekTo(Duration position) async { + if (position > value.duration) { + position = value.duration; + } else if (position < Duration.zero) { + position = Duration.zero; + } + await _platform.seekTo(_playerId, position); + _updatePosition(position); + } + + /// Sets the playback speed. + Future setPlaybackSpeed(double speed) async { + value = value.copyWith(playbackSpeed: speed); + await _applyPlaybackSpeed(); + } + + void _updatePosition(Duration position) { + value = value.copyWith(position: position); + } +} + +/// Widget that displays the video controlled by [controller]. +class VideoPlayer extends StatefulWidget { + /// Uses the given [controller] for all video rendered in this widget. + const VideoPlayer(this.controller, {super.key}); + + /// The [MiniController] responsible for the video being rendered in + /// this widget. + final MiniController controller; + + @override + State createState() => _VideoPlayerState(); +} + +class _VideoPlayerState extends State { + _VideoPlayerState() { + _listener = () { + final int newPlayerId = widget.controller.playerId; + if (newPlayerId != _playerId) { + setState(() { + _playerId = newPlayerId; + }); + } + }; + } + + late VoidCallback _listener; + + late int _playerId; + + @override + void initState() { + super.initState(); + _playerId = widget.controller.playerId; + // Need to listen for initialization events since the actual player ID + // becomes available after asynchronous initialization finishes. + widget.controller.addListener(_listener); + } + + @override + void didUpdateWidget(VideoPlayer oldWidget) { + super.didUpdateWidget(oldWidget); + oldWidget.controller.removeListener(_listener); + _playerId = widget.controller.playerId; + widget.controller.addListener(_listener); + } + + @override + void deactivate() { + super.deactivate(); + widget.controller.removeListener(_listener); + } + + @override + Widget build(BuildContext context) { + return _playerId == MiniController.kUninitializedPlayerId + ? Container() + : _VideoPlayerWithRotation( + rotation: widget.controller.value.rotationCorrection, + child: _platform.buildViewWithOptions( + VideoViewOptions(playerId: _playerId), + ), + ); + } +} + +class _VideoPlayerWithRotation extends StatelessWidget { + const _VideoPlayerWithRotation({required this.rotation, required this.child}); + + final int rotation; + final Widget child; + + @override + Widget build(BuildContext context) { + if (rotation == 0) { + return child; + } + return RotatedBox(quarterTurns: rotation ~/ 90, child: child); + } +} + +class _VideoScrubber extends StatefulWidget { + const _VideoScrubber({required this.child, required this.controller}); + + final Widget child; + final MiniController controller; + + @override + _VideoScrubberState createState() => _VideoScrubberState(); +} + +class _VideoScrubberState extends State<_VideoScrubber> { + MiniController get controller => widget.controller; + + @override + Widget build(BuildContext context) { + void seekToRelativePosition(Offset globalPosition) { + final RenderBox box = context.findRenderObject()! as RenderBox; + final Offset tapPos = box.globalToLocal(globalPosition); + final double relative = tapPos.dx / box.size.width; + final Duration position = controller.value.duration * relative; + controller.seekTo(position); + } + + return GestureDetector( + behavior: HitTestBehavior.opaque, + child: widget.child, + onTapDown: (TapDownDetails details) { + if (controller.value.isInitialized) { + seekToRelativePosition(details.globalPosition); + } + }, + ); + } +} + +/// Displays the play/buffering status of the video controlled by [controller]. +class VideoProgressIndicator extends StatefulWidget { + /// Construct an instance that displays the play/buffering status of the video + /// controlled by [controller]. + const VideoProgressIndicator(this.controller, {super.key}); + + /// The [MiniController] that actually associates a video with this + /// widget. + final MiniController controller; + + @override + State createState() => _VideoProgressIndicatorState(); +} + +class _VideoProgressIndicatorState extends State { + _VideoProgressIndicatorState() { + listener = () { + if (mounted) { + setState(() {}); + } + }; + } + + late VoidCallback listener; + + MiniController get controller => widget.controller; + + @override + void initState() { + super.initState(); + controller.addListener(listener); + } + + @override + void deactivate() { + controller.removeListener(listener); + super.deactivate(); + } + + @override + Widget build(BuildContext context) { + const Color playedColor = Color.fromRGBO(255, 0, 0, 0.7); + const Color bufferedColor = Color.fromRGBO(50, 50, 200, 0.2); + const Color backgroundColor = Color.fromRGBO(200, 200, 200, 0.5); + + Widget progressIndicator; + if (controller.value.isInitialized) { + final int duration = controller.value.duration.inMilliseconds; + final int position = controller.value.position.inMilliseconds; + + int maxBuffering = 0; + for (final DurationRange range in controller.value.buffered) { + final int end = range.end.inMilliseconds; + if (end > maxBuffering) { + maxBuffering = end; + } + } + + progressIndicator = Stack( + fit: StackFit.passthrough, + children: [ + LinearProgressIndicator( + value: maxBuffering / duration, + valueColor: const AlwaysStoppedAnimation(bufferedColor), + backgroundColor: backgroundColor, + ), + LinearProgressIndicator( + value: position / duration, + valueColor: const AlwaysStoppedAnimation(playedColor), + backgroundColor: Colors.transparent, + ), + ], + ); + } else { + progressIndicator = const LinearProgressIndicator( + valueColor: AlwaysStoppedAnimation(playedColor), + backgroundColor: backgroundColor, + ); + } + return _VideoScrubber( + controller: controller, + child: Padding( + padding: const EdgeInsets.only(top: 5.0), + child: progressIndicator, + ), + ); + } +} diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart b/packages/video_player/video_player_android/lib/src/android_video_player.dart index c4826ccba70..f1aa53282f4 100644 --- a/packages/video_player/video_player_android/lib/src/android_video_player.dart +++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart @@ -85,8 +85,8 @@ class AndroidVideoPlayer extends VideoPlayerPlatform { _playerViewStates[playerId] = switch (options.viewType) { // playerId is also the textureId when using texture view. VideoViewType.textureView => _VideoPlayerTextureViewState( - textureId: playerId, - ), + textureId: playerId, + ), VideoViewType.platformView => const _VideoPlayerPlatformViewState(), }; @@ -209,11 +209,11 @@ class AndroidVideoPlayer extends VideoPlayerPlatform { static const Map _videoFormatStringMap = { - VideoFormat.ss: 'ss', - VideoFormat.hls: 'hls', - VideoFormat.dash: 'dash', - VideoFormat.other: 'other', - }; + VideoFormat.ss: 'ss', + VideoFormat.hls: 'hls', + VideoFormat.dash: 'dash', + VideoFormat.other: 'other', + }; DurationRange _toDurationRange(dynamic value) { final List pair = value as List; diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart.orig b/packages/video_player/video_player_android/lib/src/android_video_player.dart.orig new file mode 100644 index 00000000000..c4826ccba70 --- /dev/null +++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart.orig @@ -0,0 +1,255 @@ +// Copyright 2013 The Flutter 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 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; +import 'package:video_player_platform_interface/video_player_platform_interface.dart'; + +import 'messages.g.dart'; +import 'platform_view_player.dart'; + +/// An Android implementation of [VideoPlayerPlatform] that uses the +/// Pigeon-generated [VideoPlayerApi]. +class AndroidVideoPlayer extends VideoPlayerPlatform { + final AndroidVideoPlayerApi _api = AndroidVideoPlayerApi(); + + /// A map that associates player ID with a view state. + /// This is used to determine which view type to use when building a view. + final Map _playerViewStates = + {}; + + /// Registers this class as the default instance of [PathProviderPlatform]. + static void registerWith() { + VideoPlayerPlatform.instance = AndroidVideoPlayer(); + } + + @override + Future init() { + return _api.initialize(); + } + + @override + Future dispose(int playerId) async { + await _api.dispose(playerId); + _playerViewStates.remove(playerId); + } + + @override + Future create(DataSource dataSource) { + return createWithOptions( + VideoCreationOptions( + dataSource: dataSource, + // Compatibility; "create" is always a textureView (createWithOptions + // allows selecting). + viewType: VideoViewType.textureView, + ), + ); + } + + @override + Future createWithOptions(VideoCreationOptions options) async { + final DataSource dataSource = options.dataSource; + + String? asset; + String? packageName; + String? uri; + String? formatHint; + Map httpHeaders = {}; + switch (dataSource.sourceType) { + case DataSourceType.asset: + asset = dataSource.asset; + packageName = dataSource.package; + case DataSourceType.network: + uri = dataSource.uri; + formatHint = _videoFormatStringMap[dataSource.formatHint]; + httpHeaders = dataSource.httpHeaders; + case DataSourceType.file: + uri = dataSource.uri; + httpHeaders = dataSource.httpHeaders; + case DataSourceType.contentUri: + uri = dataSource.uri; + } + final CreateMessage message = CreateMessage( + asset: asset, + packageName: packageName, + uri: uri, + httpHeaders: httpHeaders, + formatHint: formatHint, + viewType: _platformVideoViewTypeFromVideoViewType(options.viewType), + ); + + final int playerId = await _api.create(message); + _playerViewStates[playerId] = switch (options.viewType) { + // playerId is also the textureId when using texture view. + VideoViewType.textureView => _VideoPlayerTextureViewState( + textureId: playerId, + ), + VideoViewType.platformView => const _VideoPlayerPlatformViewState(), + }; + + return playerId; + } + + @override + Future setLooping(int playerId, bool looping) { + return _api.setLooping(playerId, looping); + } + + @override + Future play(int playerId) { + return _api.play(playerId); + } + + @override + Future pause(int playerId) { + return _api.pause(playerId); + } + + @override + Future setVolume(int playerId, double volume) { + return _api.setVolume(playerId, volume); + } + + @override + Future setPlaybackSpeed(int playerId, double speed) { + assert(speed > 0); + + return _api.setPlaybackSpeed(playerId, speed); + } + + @override + Future seekTo(int playerId, Duration position) { + return _api.seekTo(playerId, position.inMilliseconds); + } + + @override + Future getPosition(int playerId) async { + final int position = await _api.position(playerId); + return Duration(milliseconds: position); + } + + @override + Stream videoEventsFor(int playerId) { + return _eventChannelFor(playerId).receiveBroadcastStream().map(( + dynamic event, + ) { + final Map map = event as Map; + switch (map['event']) { + case 'initialized': + return VideoEvent( + eventType: VideoEventType.initialized, + duration: Duration(milliseconds: map['duration'] as int), + size: Size( + (map['width'] as num?)?.toDouble() ?? 0.0, + (map['height'] as num?)?.toDouble() ?? 0.0, + ), + rotationCorrection: map['rotationCorrection'] as int? ?? 0, + ); + case 'completed': + return VideoEvent(eventType: VideoEventType.completed); + case 'bufferingUpdate': + final List values = map['values'] as List; + + return VideoEvent( + buffered: values.map(_toDurationRange).toList(), + eventType: VideoEventType.bufferingUpdate, + ); + case 'bufferingStart': + return VideoEvent(eventType: VideoEventType.bufferingStart); + case 'bufferingEnd': + return VideoEvent(eventType: VideoEventType.bufferingEnd); + case 'isPlayingStateUpdate': + return VideoEvent( + eventType: VideoEventType.isPlayingStateUpdate, + isPlaying: map['isPlaying'] as bool, + ); + default: + return VideoEvent(eventType: VideoEventType.unknown); + } + }); + } + + @override + Widget buildView(int playerId) { + return buildViewWithOptions(VideoViewOptions(playerId: playerId)); + } + + @override + Widget buildViewWithOptions(VideoViewOptions options) { + final int playerId = options.playerId; + final _VideoPlayerViewState? viewState = _playerViewStates[playerId]; + + return switch (viewState) { + _VideoPlayerTextureViewState(:final int textureId) => Texture( + textureId: textureId, + ), + _VideoPlayerPlatformViewState() => PlatformViewPlayer(playerId: playerId), + null => throw Exception( + 'Could not find corresponding view type for playerId: $playerId', + ), + }; + } + + @override + Future setMixWithOthers(bool mixWithOthers) { + return _api.setMixWithOthers(mixWithOthers); + } + + @override + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { + return _api.setAllowBackgroundPlayback(allowBackgroundPlayback); + } + + EventChannel _eventChannelFor(int playerId) { + return EventChannel('flutter.io/videoPlayer/videoEvents$playerId'); + } + + static const Map _videoFormatStringMap = + { + VideoFormat.ss: 'ss', + VideoFormat.hls: 'hls', + VideoFormat.dash: 'dash', + VideoFormat.other: 'other', + }; + + DurationRange _toDurationRange(dynamic value) { + final List pair = value as List; + return DurationRange( + Duration(milliseconds: pair[0] as int), + Duration(milliseconds: pair[1] as int), + ); + } +} + +PlatformVideoViewType _platformVideoViewTypeFromVideoViewType( + VideoViewType viewType, +) { + return switch (viewType) { + VideoViewType.textureView => PlatformVideoViewType.textureView, + VideoViewType.platformView => PlatformVideoViewType.platformView, + }; +} + +/// Base class representing the state of a video player view. +@immutable +sealed class _VideoPlayerViewState { + const _VideoPlayerViewState(); +} + +/// Represents the state of a video player view that uses a texture. +final class _VideoPlayerTextureViewState extends _VideoPlayerViewState { + /// Creates a new instance of [_VideoPlayerTextureViewState]. + const _VideoPlayerTextureViewState({required this.textureId}); + + /// The ID of the texture used by the video player. + final int textureId; +} + +/// Represents the state of a video player view that uses a platform view. +final class _VideoPlayerPlatformViewState extends _VideoPlayerViewState { + /// Creates a new instance of [_VideoPlayerPlatformViewState]. + const _VideoPlayerPlatformViewState(); +} diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart.rej b/packages/video_player/video_player_android/lib/src/android_video_player.dart.rej new file mode 100644 index 00000000000..8710a66df84 --- /dev/null +++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart.rej @@ -0,0 +1,15 @@ +@@ -184,10 +184,11 @@ + + return switch (viewState) { + _VideoPlayerTextureViewState(:final int textureId) => Texture( +- textureId: textureId, +- ), ++ textureId: textureId, ++ ), + _VideoPlayerPlatformViewState() => PlatformViewPlayer(playerId: playerId), +- null => throw Exception( ++ null => ++ throw Exception( + 'Could not find corresponding view type for playerId: ', + ), + }; diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart b/packages/video_player/video_player_android/lib/src/messages.g.dart index 789b2e183ca..2ff662ffecb 100644 --- a/packages/video_player/video_player_android/lib/src/messages.g.dart +++ b/packages/video_player/video_player_android/lib/src/messages.g.dart @@ -156,10 +156,10 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send(null) as List?; if (pigeonVar_replyList == null) { @@ -180,10 +180,10 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([msg]) as List?; if (pigeonVar_replyList == null) { @@ -209,10 +209,10 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([playerId]) as List?; if (pigeonVar_replyList == null) { @@ -233,12 +233,13 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, looping]) as List?; + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId, looping]) + as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -257,12 +258,13 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, volume]) as List?; + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId, volume]) + as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -281,12 +283,13 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, speed]) as List?; + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId, speed]) + as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -305,10 +308,10 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([playerId]) as List?; if (pigeonVar_replyList == null) { @@ -329,10 +332,10 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([playerId]) as List?; if (pigeonVar_replyList == null) { @@ -358,12 +361,13 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, position]) as List?; + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId, position]) + as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -382,10 +386,10 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); final List? pigeonVar_replyList = await pigeonVar_channel.send([playerId]) as List?; if (pigeonVar_replyList == null) { @@ -406,12 +410,13 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([mixWithOthers]) as List?; + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([mixWithOthers]) + as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { @@ -430,12 +435,13 @@ class AndroidVideoPlayerApi { 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([allowBackgroundPlayback]) as List?; + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([allowBackgroundPlayback]) + as List?; if (pigeonVar_replyList == null) { throw _createConnectionError(pigeonVar_channelName); } else if (pigeonVar_replyList.length > 1) { diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart.orig b/packages/video_player/video_player_android/lib/src/messages.g.dart.orig new file mode 100644 index 00000000000..789b2e183ca --- /dev/null +++ b/packages/video_player/video_player_android/lib/src/messages.g.dart.orig @@ -0,0 +1,451 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers + +import 'dart:async'; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; + +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; +import 'package:flutter/services.dart'; + +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + +List wrapResponse({ + Object? result, + PlatformException? error, + bool empty = false, +}) { + if (empty) { + return []; + } + if (error == null) { + return [result]; + } + return [error.code, error.message, error.details]; +} + +/// Pigeon equivalent of VideoViewType. +enum PlatformVideoViewType { textureView, platformView } + +/// Information passed to the platform view creation. +class PlatformVideoViewCreationParams { + PlatformVideoViewCreationParams({required this.playerId}); + + int playerId; + + Object encode() { + return [playerId]; + } + + static PlatformVideoViewCreationParams decode(Object result) { + result as List; + return PlatformVideoViewCreationParams(playerId: result[0]! as int); + } +} + +class CreateMessage { + CreateMessage({ + this.asset, + this.uri, + this.packageName, + this.formatHint, + required this.httpHeaders, + this.viewType, + }); + + String? asset; + + String? uri; + + String? packageName; + + String? formatHint; + + Map httpHeaders; + + PlatformVideoViewType? viewType; + + Object encode() { + return [ + asset, + uri, + packageName, + formatHint, + httpHeaders, + viewType, + ]; + } + + static CreateMessage decode(Object result) { + result as List; + return CreateMessage( + asset: result[0] as String?, + uri: result[1] as String?, + packageName: result[2] as String?, + formatHint: result[3] as String?, + httpHeaders: + (result[4] as Map?)!.cast(), + viewType: result[5] as PlatformVideoViewType?, + ); + } +} + +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is PlatformVideoViewType) { + buffer.putUint8(129); + writeValue(buffer, value.index); + } else if (value is PlatformVideoViewCreationParams) { + buffer.putUint8(130); + writeValue(buffer, value.encode()); + } else if (value is CreateMessage) { + buffer.putUint8(131); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 129: + final int? value = readValue(buffer) as int?; + return value == null ? null : PlatformVideoViewType.values[value]; + case 130: + return PlatformVideoViewCreationParams.decode(readValue(buffer)!); + case 131: + return CreateMessage.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + +class AndroidVideoPlayerApi { + /// Constructor for [AndroidVideoPlayerApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + AndroidVideoPlayerApi({ + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); + + final String pigeonVar_messageChannelSuffix; + + Future initialize() async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send(null) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future create(CreateMessage msg) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([msg]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as int?)!; + } + } + + Future dispose(int playerId) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future setLooping(int playerId, bool looping) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([playerId, looping]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future setVolume(int playerId, double volume) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([playerId, volume]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future setPlaybackSpeed(int playerId, double speed) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([playerId, speed]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future play(int playerId) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future position(int playerId) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as int?)!; + } + } + + Future seekTo(int playerId, int position) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([playerId, position]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future pause(int playerId) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([playerId]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future setMixWithOthers(bool mixWithOthers) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([mixWithOthers]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([allowBackgroundPlayback]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } +} diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart.rej b/packages/video_player/video_player_android/lib/src/messages.g.dart.rej new file mode 100644 index 00000000000..c24a715c48b --- /dev/null +++ b/packages/video_player/video_player_android/lib/src/messages.g.dart.rej @@ -0,0 +1,13 @@ +@@ -142,9 +142,9 @@ + AndroidVideoPlayerApi({ + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', +- }) : pigeonVar_binaryMessenger = binaryMessenger, +- pigeonVar_messageChannelSuffix = +- messageChannelSuffix.isNotEmpty ? '.' : ''; ++ }) : pigeonVar_binaryMessenger = binaryMessenger, ++ pigeonVar_messageChannelSuffix = ++ messageChannelSuffix.isNotEmpty ? '.' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); diff --git a/packages/video_player/video_player_android/lib/src/platform_view_player.dart b/packages/video_player/video_player_android/lib/src/platform_view_player.dart index 3f570498833..44820af1aad 100644 --- a/packages/video_player/video_player_android/lib/src/platform_view_player.dart +++ b/packages/video_player/video_player_android/lib/src/platform_view_player.dart @@ -40,14 +40,14 @@ class PlatformViewPlayer extends StatelessWidget { }, onCreatePlatformView: (PlatformViewCreationParams params) { return PlatformViewsService.initSurfaceAndroidView( - id: params.id, - viewType: viewType, - layoutDirection: - Directionality.maybeOf(context) ?? TextDirection.ltr, - creationParams: creationParams, - creationParamsCodec: AndroidVideoPlayerApi.pigeonChannelCodec, - onFocus: () => params.onFocusChanged(true), - ) + id: params.id, + viewType: viewType, + layoutDirection: + Directionality.maybeOf(context) ?? TextDirection.ltr, + creationParams: creationParams, + creationParamsCodec: AndroidVideoPlayerApi.pigeonChannelCodec, + onFocus: () => params.onFocusChanged(true), + ) ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated) ..create(); }, diff --git a/packages/video_player/video_player_android/pigeons/messages.dart b/packages/video_player/video_player_android/pigeons/messages.dart index 3490aa952a4..f7624d13dd2 100644 --- a/packages/video_player/video_player_android/pigeons/messages.dart +++ b/packages/video_player/video_player_android/pigeons/messages.dart @@ -14,7 +14,6 @@ import 'package:pigeon/pigeon.dart'; copyrightHeader: 'pigeons/copyright.txt', ), ) - /// Pigeon equivalent of VideoViewType. enum PlatformVideoViewType { textureView, platformView } diff --git a/packages/video_player/video_player_android/test/android_video_player_test.dart b/packages/video_player/video_player_android/test/android_video_player_test.dart index a5e2c8c70ef..55d167f64db 100644 --- a/packages/video_player/video_player_android/test/android_video_player_test.dart +++ b/packages/video_player/video_player_android/test/android_video_player_test.dart @@ -120,10 +120,7 @@ void main() { test('init', () async { await player.init(); - expect( - log.log.last, - 'init', - ); + expect(log.log.last, 'init'); }); test('dispose', () async { @@ -133,25 +130,31 @@ void main() { }); test('create with asset', () async { - final int? playerId = await player.create(DataSource( - sourceType: DataSourceType.asset, - asset: 'someAsset', - package: 'somePackage', - )); + final int? playerId = await player.create( + DataSource( + sourceType: DataSourceType.asset, + asset: 'someAsset', + package: 'somePackage', + ), + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.asset, 'someAsset'); expect(log.passedCreateMessage?.packageName, 'somePackage'); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('create with network', () async { - final int? playerId = await player.create(DataSource( - sourceType: DataSourceType.network, - uri: 'someUri', - formatHint: VideoFormat.dash, - )); + final int? playerId = await player.create( + DataSource( + sourceType: DataSourceType.network, + uri: 'someUri', + formatHint: VideoFormat.dash, + ), + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.asset, null); expect(log.passedCreateMessage?.uri, 'someUri'); @@ -159,16 +162,20 @@ void main() { expect(log.passedCreateMessage?.formatHint, 'dash'); expect(log.passedCreateMessage?.httpHeaders, {}); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('create with network (some headers)', () async { - final int? playerId = await player.create(DataSource( - sourceType: DataSourceType.network, - uri: 'someUri', - httpHeaders: {'Authorization': 'Bearer token'}, - )); + final int? playerId = await player.create( + DataSource( + sourceType: DataSourceType.network, + uri: 'someUri', + httpHeaders: {'Authorization': 'Bearer token'}, + ), + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.asset, null); expect(log.passedCreateMessage?.uri, 'someUri'); @@ -178,62 +185,77 @@ void main() { 'Authorization': 'Bearer token', }); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('create with file', () async { - final int? playerId = await player - .create(DataSource(sourceType: DataSourceType.file, uri: 'someUri')); + final int? playerId = await player.create( + DataSource(sourceType: DataSourceType.file, uri: 'someUri'), + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.uri, 'someUri'); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('create with file (some headers)', () async { - final int? playerId = await player.create(DataSource( - sourceType: DataSourceType.file, - uri: 'someUri', - httpHeaders: {'Authorization': 'Bearer token'}, - )); + final int? playerId = await player.create( + DataSource( + sourceType: DataSourceType.file, + uri: 'someUri', + httpHeaders: {'Authorization': 'Bearer token'}, + ), + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.uri, 'someUri'); expect(log.passedCreateMessage?.httpHeaders, { 'Authorization': 'Bearer token', }); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('createWithOptions with asset', () async { - final int? playerId = await player.createWithOptions(VideoCreationOptions( - dataSource: DataSource( - sourceType: DataSourceType.asset, - asset: 'someAsset', - package: 'somePackage', + final int? playerId = await player.createWithOptions( + VideoCreationOptions( + dataSource: DataSource( + sourceType: DataSourceType.asset, + asset: 'someAsset', + package: 'somePackage', + ), + viewType: VideoViewType.textureView, ), - viewType: VideoViewType.textureView, - )); + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.asset, 'someAsset'); expect(log.passedCreateMessage?.packageName, 'somePackage'); expect(playerId, 3); - expect(player.buildViewWithOptions(const VideoViewOptions(playerId: 3)), - isA()); + expect( + player.buildViewWithOptions(const VideoViewOptions(playerId: 3)), + isA(), + ); }); test('createWithOptions with network', () async { - final int? playerId = await player.createWithOptions(VideoCreationOptions( - dataSource: DataSource( - sourceType: DataSourceType.network, - uri: 'someUri', - formatHint: VideoFormat.dash, + final int? playerId = await player.createWithOptions( + VideoCreationOptions( + dataSource: DataSource( + sourceType: DataSourceType.network, + uri: 'someUri', + formatHint: VideoFormat.dash, + ), + viewType: VideoViewType.textureView, ), - viewType: VideoViewType.textureView, - )); + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.asset, null); expect(log.passedCreateMessage?.uri, 'someUri'); @@ -241,19 +263,23 @@ void main() { expect(log.passedCreateMessage?.formatHint, 'dash'); expect(log.passedCreateMessage?.httpHeaders, {}); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('createWithOptions with network (some headers)', () async { - final int? playerId = await player.createWithOptions(VideoCreationOptions( - dataSource: DataSource( - sourceType: DataSourceType.network, - uri: 'someUri', - httpHeaders: {'Authorization': 'Bearer token'}, + final int? playerId = await player.createWithOptions( + VideoCreationOptions( + dataSource: DataSource( + sourceType: DataSourceType.network, + uri: 'someUri', + httpHeaders: {'Authorization': 'Bearer token'}, + ), + viewType: VideoViewType.textureView, ), - viewType: VideoViewType.textureView, - )); + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.asset, null); expect(log.passedCreateMessage?.uri, 'someUri'); @@ -263,60 +289,74 @@ void main() { 'Authorization': 'Bearer token', }); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('createWithOptions with file', () async { - final int? playerId = await player.createWithOptions(VideoCreationOptions( - dataSource: DataSource( - sourceType: DataSourceType.file, - uri: 'someUri', + final int? playerId = await player.createWithOptions( + VideoCreationOptions( + dataSource: DataSource( + sourceType: DataSourceType.file, + uri: 'someUri', + ), + viewType: VideoViewType.textureView, ), - viewType: VideoViewType.textureView, - )); + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.uri, 'someUri'); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('createWithOptions with file (some headers)', () async { - final int? playerId = await player.createWithOptions(VideoCreationOptions( - dataSource: DataSource( - sourceType: DataSourceType.file, - uri: 'someUri', - httpHeaders: {'Authorization': 'Bearer token'}, + final int? playerId = await player.createWithOptions( + VideoCreationOptions( + dataSource: DataSource( + sourceType: DataSourceType.file, + uri: 'someUri', + httpHeaders: {'Authorization': 'Bearer token'}, + ), + viewType: VideoViewType.textureView, ), - viewType: VideoViewType.textureView, - )); + ); expect(log.log.last, 'create'); expect(log.passedCreateMessage?.uri, 'someUri'); expect(log.passedCreateMessage?.httpHeaders, { 'Authorization': 'Bearer token', }); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('createWithOptions with platform view', () async { - final int? playerId = await player.createWithOptions(VideoCreationOptions( - dataSource: DataSource( - sourceType: DataSourceType.file, - uri: 'someUri', + final int? playerId = await player.createWithOptions( + VideoCreationOptions( + dataSource: DataSource( + sourceType: DataSourceType.file, + uri: 'someUri', + ), + viewType: VideoViewType.platformView, ), - viewType: VideoViewType.platformView, - )); + ); expect(log.log.last, 'create'); expect( log.passedCreateMessage?.viewType, PlatformVideoViewType.platformView, ); expect(playerId, 3); - expect(player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), - isA()); + expect( + player.buildViewWithOptions(VideoViewOptions(playerId: playerId!)), + isA(), + ); }); test('setLooping', () async { @@ -390,151 +430,163 @@ void main() { const String mockChannel = 'flutter.io/videoPlayer/videoEvents123'; TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger .setMockMessageHandler(mockChannel, (ByteData? message) async { - final MethodCall methodCall = - const StandardMethodCodec().decodeMethodCall(message); - if (methodCall.method == 'listen') { - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope({ - 'event': 'initialized', - 'duration': 98765, - 'width': 1920, - 'height': 1080, - }), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope({ - 'event': 'initialized', - 'duration': 98765, - 'width': 1920, - 'height': 1080, - 'rotationCorrection': 180, - }), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope( - {'event': 'completed'}, - ), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope( - { - 'event': 'bufferingUpdate', - 'values': >[ - [0, 1234], - [1235, 4000], - ], - }, - ), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope( - {'event': 'bufferingStart'}, - ), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope( - {'event': 'bufferingEnd'}, - ), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope( - { - 'event': 'isPlayingStateUpdate', - 'isPlaying': true, - }, - ), - (ByteData? data) {}, - ); - - await TestDefaultBinaryMessengerBinding - .instance.defaultBinaryMessenger - .handlePlatformMessage( - mockChannel, - const StandardMethodCodec().encodeSuccessEnvelope( - { - 'event': 'isPlayingStateUpdate', - 'isPlaying': false, - }, - ), - (ByteData? data) {}, - ); - - return const StandardMethodCodec().encodeSuccessEnvelope(null); - } else if (methodCall.method == 'cancel') { - return const StandardMethodCodec().encodeSuccessEnvelope(null); - } else { - fail('Expected listen or cancel'); - } - }); + final MethodCall methodCall = const StandardMethodCodec() + .decodeMethodCall(message); + if (methodCall.method == 'listen') { + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec() + .encodeSuccessEnvelope({ + 'event': 'initialized', + 'duration': 98765, + 'width': 1920, + 'height': 1080, + }), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec() + .encodeSuccessEnvelope({ + 'event': 'initialized', + 'duration': 98765, + 'width': 1920, + 'height': 1080, + 'rotationCorrection': 180, + }), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec().encodeSuccessEnvelope( + {'event': 'completed'}, + ), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec().encodeSuccessEnvelope( + { + 'event': 'bufferingUpdate', + 'values': >[ + [0, 1234], + [1235, 4000], + ], + }, + ), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec().encodeSuccessEnvelope( + {'event': 'bufferingStart'}, + ), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec().encodeSuccessEnvelope( + {'event': 'bufferingEnd'}, + ), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec().encodeSuccessEnvelope( + { + 'event': 'isPlayingStateUpdate', + 'isPlaying': true, + }, + ), + (ByteData? data) {}, + ); + + await TestDefaultBinaryMessengerBinding + .instance + .defaultBinaryMessenger + .handlePlatformMessage( + mockChannel, + const StandardMethodCodec().encodeSuccessEnvelope( + { + 'event': 'isPlayingStateUpdate', + 'isPlaying': false, + }, + ), + (ByteData? data) {}, + ); + + return const StandardMethodCodec().encodeSuccessEnvelope(null); + } else if (methodCall.method == 'cancel') { + return const StandardMethodCodec().encodeSuccessEnvelope(null); + } else { + fail('Expected listen or cancel'); + } + }); expect( - player.videoEventsFor(123), - emitsInOrder([ - VideoEvent( - eventType: VideoEventType.initialized, - duration: const Duration(milliseconds: 98765), - size: const Size(1920, 1080), - rotationCorrection: 0, - ), - VideoEvent( - eventType: VideoEventType.initialized, - duration: const Duration(milliseconds: 98765), - size: const Size(1920, 1080), - rotationCorrection: 180, - ), - VideoEvent(eventType: VideoEventType.completed), - VideoEvent( - eventType: VideoEventType.bufferingUpdate, - buffered: [ - DurationRange( - Duration.zero, const Duration(milliseconds: 1234)), - DurationRange(const Duration(milliseconds: 1235), - const Duration(milliseconds: 4000)), - ], - ), - VideoEvent(eventType: VideoEventType.bufferingStart), - VideoEvent(eventType: VideoEventType.bufferingEnd), - VideoEvent( - eventType: VideoEventType.isPlayingStateUpdate, - isPlaying: true, - ), - VideoEvent( - eventType: VideoEventType.isPlayingStateUpdate, - isPlaying: false, - ), - ])); + player.videoEventsFor(123), + emitsInOrder([ + VideoEvent( + eventType: VideoEventType.initialized, + duration: const Duration(milliseconds: 98765), + size: const Size(1920, 1080), + rotationCorrection: 0, + ), + VideoEvent( + eventType: VideoEventType.initialized, + duration: const Duration(milliseconds: 98765), + size: const Size(1920, 1080), + rotationCorrection: 180, + ), + VideoEvent(eventType: VideoEventType.completed), + VideoEvent( + eventType: VideoEventType.bufferingUpdate, + buffered: [ + DurationRange(Duration.zero, const Duration(milliseconds: 1234)), + DurationRange( + const Duration(milliseconds: 1235), + const Duration(milliseconds: 4000), + ), + ], + ), + VideoEvent(eventType: VideoEventType.bufferingStart), + VideoEvent(eventType: VideoEventType.bufferingEnd), + VideoEvent( + eventType: VideoEventType.isPlayingStateUpdate, + isPlaying: true, + ), + VideoEvent( + eventType: VideoEventType.isPlayingStateUpdate, + isPlaying: false, + ), + ]), + ); }); }); } diff --git a/packages/video_player/video_player_android/test/test_api.g.dart.orig b/packages/video_player/video_player_android/test/test_api.g.dart.orig new file mode 100644 index 00000000000..4fd2e6d9fd9 --- /dev/null +++ b/packages/video_player/video_player_android/test/test_api.g.dart.orig @@ -0,0 +1,480 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// Autogenerated from Pigeon (v22.7.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers +// ignore_for_file: avoid_relative_lib_imports +import 'dart:async'; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:video_player_android/src/messages.g.dart'; + +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is PlatformVideoViewType) { + buffer.putUint8(129); + writeValue(buffer, value.index); + } else if (value is PlatformVideoViewCreationParams) { + buffer.putUint8(130); + writeValue(buffer, value.encode()); + } else if (value is CreateMessage) { + buffer.putUint8(131); + writeValue(buffer, value.encode()); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 129: + final int? value = readValue(buffer) as int?; + return value == null ? null : PlatformVideoViewType.values[value]; + case 130: + return PlatformVideoViewCreationParams.decode(readValue(buffer)!); + case 131: + return CreateMessage.decode(readValue(buffer)!); + default: + return super.readValueOfType(type, buffer); + } + } +} + +abstract class TestHostVideoPlayerApi { + static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => + TestDefaultBinaryMessengerBinding.instance; + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); + + void initialize(); + + int create(CreateMessage msg); + + void dispose(int playerId); + + void setLooping(int playerId, bool looping); + + void setVolume(int playerId, double volume); + + void setPlaybackSpeed(int playerId, double speed); + + void play(int playerId); + + int position(int playerId); + + void seekTo(int playerId, int position); + + void pause(int playerId); + + void setMixWithOthers(bool mixWithOthers); + + void setAllowBackgroundPlayback(bool allowBackgroundPlayback); + + static void setUp( + TestHostVideoPlayerApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + try { + api.initialize(); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.'); + final List args = (message as List?)!; + final CreateMessage? arg_msg = (args[0] as CreateMessage?); + assert(arg_msg != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.'); + try { + final int output = api.create(arg_msg!); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.'); + try { + api.dispose(arg_playerId!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.'); + final bool? arg_looping = (args[1] as bool?); + assert(arg_looping != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.'); + try { + api.setLooping(arg_playerId!, arg_looping!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.'); + final double? arg_volume = (args[1] as double?); + assert(arg_volume != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.'); + try { + api.setVolume(arg_playerId!, arg_volume!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.'); + final double? arg_speed = (args[1] as double?); + assert(arg_speed != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.'); + try { + api.setPlaybackSpeed(arg_playerId!, arg_speed!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.'); + try { + api.play(arg_playerId!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.'); + try { + final int output = api.position(arg_playerId!); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); + final int? arg_position = (args[1] as int?); + assert(arg_position != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); + try { + api.seekTo(arg_playerId!, arg_position!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.'); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert(arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.'); + try { + api.pause(arg_playerId!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.'); + final List args = (message as List?)!; + final bool? arg_mixWithOthers = (args[0] as bool?); + assert(arg_mixWithOthers != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.'); + try { + api.setMixWithOthers(arg_mixWithOthers!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, + (Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.'); + final List args = (message as List?)!; + final bool? arg_allowBackgroundPlayback = (args[0] as bool?); + assert(arg_allowBackgroundPlayback != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); + try { + api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } +} diff --git a/packages/video_player/video_player_android/test/test_api.g.dart.rej b/packages/video_player/video_player_android/test/test_api.g.dart.rej new file mode 100644 index 00000000000..83002ed9af5 --- /dev/null +++ b/packages/video_player/video_player_android/test/test_api.g.dart.rej @@ -0,0 +1,740 @@ +@@ -87,118 +87,147 @@ + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.' : ''; + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- try { +- api.initialize(); +- return wrapResponse(empty: true); +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ try { ++ api.initialize(); ++ return wrapResponse(empty: true); ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.'); +- final List args = (message as List?)!; +- final CreateMessage? arg_msg = (args[0] as CreateMessage?); +- assert(arg_msg != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.'); +- try { +- final int output = api.create(arg_msg!); +- return [output]; +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.', ++ ); ++ final List args = (message as List?)!; ++ final CreateMessage? arg_msg = (args[0] as CreateMessage?); ++ assert( ++ arg_msg != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.', ++ ); ++ try { ++ final int output = api.create(arg_msg!); ++ return [output]; ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.'); +- final List args = (message as List?)!; +- final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.'); +- try { +- api.dispose(arg_playerId!); +- return wrapResponse(empty: true); +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.', ++ ); ++ final List args = (message as List?)!; ++ final int? arg_playerId = (args[0] as int?); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.', ++ ); ++ try { ++ api.dispose(arg_playerId!); ++ return wrapResponse(empty: true); ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { +- _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.'); ++ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< ++ Object? ++ >(pigeonVar_channel, (Object? message) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.', ++ ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.'); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.', ++ ); + final bool? arg_looping = (args[1] as bool?); +- assert(arg_looping != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.'); ++ assert( ++ arg_looping != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.', ++ ); + try { + api.setLooping(arg_playerId!, arg_looping!); + return wrapResponse(empty: true); +@@ -206,34 +235,41 @@ + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); ++ error: PlatformException(code: 'error', message: e.toString()), ++ ); + } + }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { +- _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.'); ++ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< ++ Object? ++ >(pigeonVar_channel, (Object? message) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.', ++ ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.'); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.', ++ ); + final double? arg_volume = (args[1] as double?); +- assert(arg_volume != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.'); ++ assert( ++ arg_volume != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.', ++ ); + try { + api.setVolume(arg_playerId!, arg_volume!); + return wrapResponse(empty: true); +@@ -241,34 +277,41 @@ + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); ++ error: PlatformException(code: 'error', message: e.toString()), ++ ); + } + }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { +- _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.'); ++ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< ++ Object? ++ >(pigeonVar_channel, (Object? message) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.', ++ ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.'); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.', ++ ); + final double? arg_speed = (args[1] as double?); +- assert(arg_speed != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.'); ++ assert( ++ arg_speed != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.', ++ ); + try { + api.setPlaybackSpeed(arg_playerId!, arg_speed!); + return wrapResponse(empty: true); +@@ -276,98 +319,123 @@ + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); ++ error: PlatformException(code: 'error', message: e.toString()), ++ ); + } + }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.'); +- final List args = (message as List?)!; +- final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.'); +- try { +- api.play(arg_playerId!); +- return wrapResponse(empty: true); +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.', ++ ); ++ final List args = (message as List?)!; ++ final int? arg_playerId = (args[0] as int?); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.', ++ ); ++ try { ++ api.play(arg_playerId!); ++ return wrapResponse(empty: true); ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.'); +- final List args = (message as List?)!; +- final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.'); +- try { +- final int output = api.position(arg_playerId!); +- return [output]; +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.', ++ ); ++ final List args = (message as List?)!; ++ final int? arg_playerId = (args[0] as int?); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.', ++ ); ++ try { ++ final int output = api.position(arg_playerId!); ++ return [output]; ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { +- _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.'); ++ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< ++ Object? ++ >(pigeonVar_channel, (Object? message) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.', ++ ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.', ++ ); + final int? arg_position = (args[1] as int?); +- assert(arg_position != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); ++ assert( ++ arg_position != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.', ++ ); + try { + api.seekTo(arg_playerId!, arg_position!); + return wrapResponse(empty: true); +@@ -375,105 +443,133 @@ + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); ++ error: PlatformException(code: 'error', message: e.toString()), ++ ); + } + }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.'); +- final List args = (message as List?)!; +- final int? arg_playerId = (args[0] as int?); +- assert(arg_playerId != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.'); +- try { +- api.pause(arg_playerId!); +- return wrapResponse(empty: true); +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.', ++ ); ++ final List args = (message as List?)!; ++ final int? arg_playerId = (args[0] as int?); ++ assert( ++ arg_playerId != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.', ++ ); ++ try { ++ api.pause(arg_playerId!); ++ return wrapResponse(empty: true); ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.'); +- final List args = (message as List?)!; +- final bool? arg_mixWithOthers = (args[0] as bool?); +- assert(arg_mixWithOthers != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.'); +- try { +- api.setMixWithOthers(arg_mixWithOthers!); +- return wrapResponse(empty: true); +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.', ++ ); ++ final List args = (message as List?)!; ++ final bool? arg_mixWithOthers = (args[0] as bool?); ++ assert( ++ arg_mixWithOthers != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.', ++ ); ++ try { ++ api.setMixWithOthers(arg_mixWithOthers!); ++ return wrapResponse(empty: true); ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + { +- final BasicMessageChannel< +- Object?> pigeonVar_channel = BasicMessageChannel< +- Object?>( +- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback', +- pigeonChannelCodec, +- binaryMessenger: binaryMessenger); ++ final BasicMessageChannel ++ pigeonVar_channel = BasicMessageChannel( ++ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback', ++ pigeonChannelCodec, ++ binaryMessenger: binaryMessenger, ++ ); + if (api == null) { + _testBinaryMessengerBinding!.defaultBinaryMessenger + .setMockDecodedMessageHandler(pigeonVar_channel, null); + } else { + _testBinaryMessengerBinding!.defaultBinaryMessenger +- .setMockDecodedMessageHandler(pigeonVar_channel, +- (Object? message) async { +- assert(message != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.'); +- final List args = (message as List?)!; +- final bool? arg_allowBackgroundPlayback = (args[0] as bool?); +- assert(arg_allowBackgroundPlayback != null, +- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); +- try { +- api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); +- return wrapResponse(empty: true); +- } on PlatformException catch (e) { +- return wrapResponse(error: e); +- } catch (e) { +- return wrapResponse( +- error: PlatformException(code: 'error', message: e.toString())); +- } +- }); ++ .setMockDecodedMessageHandler(pigeonVar_channel, ( ++ Object? message, ++ ) async { ++ assert( ++ message != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.', ++ ); ++ final List args = (message as List?)!; ++ final bool? arg_allowBackgroundPlayback = (args[0] as bool?); ++ assert( ++ arg_allowBackgroundPlayback != null, ++ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.', ++ ); ++ try { ++ api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); ++ return wrapResponse(empty: true); ++ } on PlatformException catch (e) { ++ return wrapResponse(error: e); ++ } catch (e) { ++ return wrapResponse( ++ error: PlatformException( ++ code: 'error', ++ message: e.toString(), ++ ), ++ ); ++ } ++ }); + } + } + } From 9d6abbf2f4e3eed6c74ba465ca8991d4672dcaf9 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Wed, 4 Jun 2025 14:26:38 +0200 Subject: [PATCH 12/16] Fix version mismatch --- packages/video_player/video_player/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 689b1e0d6a6..450231b9e48 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter widgets on Android, iOS, macOS and web. repository: https://github.com/flutter/packages/tree/main/packages/video_player/video_player issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.10.0 +version: 2.11.0 environment: sdk: ^3.6.0 From 92e48c996c82d82365dfebb638683130c05a2f96 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Wed, 4 Jun 2025 15:07:47 +0200 Subject: [PATCH 13/16] Fix code formattating --- .../lib/src/android_video_player.dart | 7 +- .../lib/src/android_video_player.dart.orig | 255 ------ .../lib/src/android_video_player.dart.rej | 15 - .../lib/src/messages.g.dart | 6 +- .../lib/src/messages.g.dart.orig | 451 ----------- .../lib/src/messages.g.dart.rej | 13 - .../video_player_android/test/test_api.g.dart | 587 ++++++++------ .../test/test_api.g.dart.orig | 480 ------------ .../test/test_api.g.dart.rej | 740 ------------------ 9 files changed, 348 insertions(+), 2206 deletions(-) delete mode 100644 packages/video_player/video_player_android/lib/src/android_video_player.dart.orig delete mode 100644 packages/video_player/video_player_android/lib/src/android_video_player.dart.rej delete mode 100644 packages/video_player/video_player_android/lib/src/messages.g.dart.orig delete mode 100644 packages/video_player/video_player_android/lib/src/messages.g.dart.rej delete mode 100644 packages/video_player/video_player_android/test/test_api.g.dart.orig delete mode 100644 packages/video_player/video_player_android/test/test_api.g.dart.rej diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart b/packages/video_player/video_player_android/lib/src/android_video_player.dart index f1aa53282f4..5ab4b786725 100644 --- a/packages/video_player/video_player_android/lib/src/android_video_player.dart +++ b/packages/video_player/video_player_android/lib/src/android_video_player.dart @@ -184,10 +184,11 @@ class AndroidVideoPlayer extends VideoPlayerPlatform { return switch (viewState) { _VideoPlayerTextureViewState(:final int textureId) => Texture( - textureId: textureId, - ), + textureId: textureId, + ), _VideoPlayerPlatformViewState() => PlatformViewPlayer(playerId: playerId), - null => throw Exception( + null => + throw Exception( 'Could not find corresponding view type for playerId: $playerId', ), }; diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart.orig b/packages/video_player/video_player_android/lib/src/android_video_player.dart.orig deleted file mode 100644 index c4826ccba70..00000000000 --- a/packages/video_player/video_player_android/lib/src/android_video_player.dart.orig +++ /dev/null @@ -1,255 +0,0 @@ -// Copyright 2013 The Flutter 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 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; -import 'package:video_player_platform_interface/video_player_platform_interface.dart'; - -import 'messages.g.dart'; -import 'platform_view_player.dart'; - -/// An Android implementation of [VideoPlayerPlatform] that uses the -/// Pigeon-generated [VideoPlayerApi]. -class AndroidVideoPlayer extends VideoPlayerPlatform { - final AndroidVideoPlayerApi _api = AndroidVideoPlayerApi(); - - /// A map that associates player ID with a view state. - /// This is used to determine which view type to use when building a view. - final Map _playerViewStates = - {}; - - /// Registers this class as the default instance of [PathProviderPlatform]. - static void registerWith() { - VideoPlayerPlatform.instance = AndroidVideoPlayer(); - } - - @override - Future init() { - return _api.initialize(); - } - - @override - Future dispose(int playerId) async { - await _api.dispose(playerId); - _playerViewStates.remove(playerId); - } - - @override - Future create(DataSource dataSource) { - return createWithOptions( - VideoCreationOptions( - dataSource: dataSource, - // Compatibility; "create" is always a textureView (createWithOptions - // allows selecting). - viewType: VideoViewType.textureView, - ), - ); - } - - @override - Future createWithOptions(VideoCreationOptions options) async { - final DataSource dataSource = options.dataSource; - - String? asset; - String? packageName; - String? uri; - String? formatHint; - Map httpHeaders = {}; - switch (dataSource.sourceType) { - case DataSourceType.asset: - asset = dataSource.asset; - packageName = dataSource.package; - case DataSourceType.network: - uri = dataSource.uri; - formatHint = _videoFormatStringMap[dataSource.formatHint]; - httpHeaders = dataSource.httpHeaders; - case DataSourceType.file: - uri = dataSource.uri; - httpHeaders = dataSource.httpHeaders; - case DataSourceType.contentUri: - uri = dataSource.uri; - } - final CreateMessage message = CreateMessage( - asset: asset, - packageName: packageName, - uri: uri, - httpHeaders: httpHeaders, - formatHint: formatHint, - viewType: _platformVideoViewTypeFromVideoViewType(options.viewType), - ); - - final int playerId = await _api.create(message); - _playerViewStates[playerId] = switch (options.viewType) { - // playerId is also the textureId when using texture view. - VideoViewType.textureView => _VideoPlayerTextureViewState( - textureId: playerId, - ), - VideoViewType.platformView => const _VideoPlayerPlatformViewState(), - }; - - return playerId; - } - - @override - Future setLooping(int playerId, bool looping) { - return _api.setLooping(playerId, looping); - } - - @override - Future play(int playerId) { - return _api.play(playerId); - } - - @override - Future pause(int playerId) { - return _api.pause(playerId); - } - - @override - Future setVolume(int playerId, double volume) { - return _api.setVolume(playerId, volume); - } - - @override - Future setPlaybackSpeed(int playerId, double speed) { - assert(speed > 0); - - return _api.setPlaybackSpeed(playerId, speed); - } - - @override - Future seekTo(int playerId, Duration position) { - return _api.seekTo(playerId, position.inMilliseconds); - } - - @override - Future getPosition(int playerId) async { - final int position = await _api.position(playerId); - return Duration(milliseconds: position); - } - - @override - Stream videoEventsFor(int playerId) { - return _eventChannelFor(playerId).receiveBroadcastStream().map(( - dynamic event, - ) { - final Map map = event as Map; - switch (map['event']) { - case 'initialized': - return VideoEvent( - eventType: VideoEventType.initialized, - duration: Duration(milliseconds: map['duration'] as int), - size: Size( - (map['width'] as num?)?.toDouble() ?? 0.0, - (map['height'] as num?)?.toDouble() ?? 0.0, - ), - rotationCorrection: map['rotationCorrection'] as int? ?? 0, - ); - case 'completed': - return VideoEvent(eventType: VideoEventType.completed); - case 'bufferingUpdate': - final List values = map['values'] as List; - - return VideoEvent( - buffered: values.map(_toDurationRange).toList(), - eventType: VideoEventType.bufferingUpdate, - ); - case 'bufferingStart': - return VideoEvent(eventType: VideoEventType.bufferingStart); - case 'bufferingEnd': - return VideoEvent(eventType: VideoEventType.bufferingEnd); - case 'isPlayingStateUpdate': - return VideoEvent( - eventType: VideoEventType.isPlayingStateUpdate, - isPlaying: map['isPlaying'] as bool, - ); - default: - return VideoEvent(eventType: VideoEventType.unknown); - } - }); - } - - @override - Widget buildView(int playerId) { - return buildViewWithOptions(VideoViewOptions(playerId: playerId)); - } - - @override - Widget buildViewWithOptions(VideoViewOptions options) { - final int playerId = options.playerId; - final _VideoPlayerViewState? viewState = _playerViewStates[playerId]; - - return switch (viewState) { - _VideoPlayerTextureViewState(:final int textureId) => Texture( - textureId: textureId, - ), - _VideoPlayerPlatformViewState() => PlatformViewPlayer(playerId: playerId), - null => throw Exception( - 'Could not find corresponding view type for playerId: $playerId', - ), - }; - } - - @override - Future setMixWithOthers(bool mixWithOthers) { - return _api.setMixWithOthers(mixWithOthers); - } - - @override - Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) { - return _api.setAllowBackgroundPlayback(allowBackgroundPlayback); - } - - EventChannel _eventChannelFor(int playerId) { - return EventChannel('flutter.io/videoPlayer/videoEvents$playerId'); - } - - static const Map _videoFormatStringMap = - { - VideoFormat.ss: 'ss', - VideoFormat.hls: 'hls', - VideoFormat.dash: 'dash', - VideoFormat.other: 'other', - }; - - DurationRange _toDurationRange(dynamic value) { - final List pair = value as List; - return DurationRange( - Duration(milliseconds: pair[0] as int), - Duration(milliseconds: pair[1] as int), - ); - } -} - -PlatformVideoViewType _platformVideoViewTypeFromVideoViewType( - VideoViewType viewType, -) { - return switch (viewType) { - VideoViewType.textureView => PlatformVideoViewType.textureView, - VideoViewType.platformView => PlatformVideoViewType.platformView, - }; -} - -/// Base class representing the state of a video player view. -@immutable -sealed class _VideoPlayerViewState { - const _VideoPlayerViewState(); -} - -/// Represents the state of a video player view that uses a texture. -final class _VideoPlayerTextureViewState extends _VideoPlayerViewState { - /// Creates a new instance of [_VideoPlayerTextureViewState]. - const _VideoPlayerTextureViewState({required this.textureId}); - - /// The ID of the texture used by the video player. - final int textureId; -} - -/// Represents the state of a video player view that uses a platform view. -final class _VideoPlayerPlatformViewState extends _VideoPlayerViewState { - /// Creates a new instance of [_VideoPlayerPlatformViewState]. - const _VideoPlayerPlatformViewState(); -} diff --git a/packages/video_player/video_player_android/lib/src/android_video_player.dart.rej b/packages/video_player/video_player_android/lib/src/android_video_player.dart.rej deleted file mode 100644 index 8710a66df84..00000000000 --- a/packages/video_player/video_player_android/lib/src/android_video_player.dart.rej +++ /dev/null @@ -1,15 +0,0 @@ -@@ -184,10 +184,11 @@ - - return switch (viewState) { - _VideoPlayerTextureViewState(:final int textureId) => Texture( -- textureId: textureId, -- ), -+ textureId: textureId, -+ ), - _VideoPlayerPlatformViewState() => PlatformViewPlayer(playerId: playerId), -- null => throw Exception( -+ null => -+ throw Exception( - 'Could not find corresponding view type for playerId: ', - ), - }; diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart b/packages/video_player/video_player_android/lib/src/messages.g.dart index 2ff662ffecb..c4e5c9b0a63 100644 --- a/packages/video_player/video_player_android/lib/src/messages.g.dart +++ b/packages/video_player/video_player_android/lib/src/messages.g.dart @@ -142,9 +142,9 @@ class AndroidVideoPlayerApi { AndroidVideoPlayerApi({ BinaryMessenger? binaryMessenger, String messageChannelSuffix = '', - }) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + }) : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; final BinaryMessenger? pigeonVar_binaryMessenger; static const MessageCodec pigeonChannelCodec = _PigeonCodec(); diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart.orig b/packages/video_player/video_player_android/lib/src/messages.g.dart.orig deleted file mode 100644 index 789b2e183ca..00000000000 --- a/packages/video_player/video_player_android/lib/src/messages.g.dart.orig +++ /dev/null @@ -1,451 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// Autogenerated from Pigeon (v22.7.4), do not edit directly. -// See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers - -import 'dart:async'; -import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; - -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; -import 'package:flutter/services.dart'; - -PlatformException _createConnectionError(String channelName) { - return PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel: "$channelName".', - ); -} - -List wrapResponse({ - Object? result, - PlatformException? error, - bool empty = false, -}) { - if (empty) { - return []; - } - if (error == null) { - return [result]; - } - return [error.code, error.message, error.details]; -} - -/// Pigeon equivalent of VideoViewType. -enum PlatformVideoViewType { textureView, platformView } - -/// Information passed to the platform view creation. -class PlatformVideoViewCreationParams { - PlatformVideoViewCreationParams({required this.playerId}); - - int playerId; - - Object encode() { - return [playerId]; - } - - static PlatformVideoViewCreationParams decode(Object result) { - result as List; - return PlatformVideoViewCreationParams(playerId: result[0]! as int); - } -} - -class CreateMessage { - CreateMessage({ - this.asset, - this.uri, - this.packageName, - this.formatHint, - required this.httpHeaders, - this.viewType, - }); - - String? asset; - - String? uri; - - String? packageName; - - String? formatHint; - - Map httpHeaders; - - PlatformVideoViewType? viewType; - - Object encode() { - return [ - asset, - uri, - packageName, - formatHint, - httpHeaders, - viewType, - ]; - } - - static CreateMessage decode(Object result) { - result as List; - return CreateMessage( - asset: result[0] as String?, - uri: result[1] as String?, - packageName: result[2] as String?, - formatHint: result[3] as String?, - httpHeaders: - (result[4] as Map?)!.cast(), - viewType: result[5] as PlatformVideoViewType?, - ); - } -} - -class _PigeonCodec extends StandardMessageCodec { - const _PigeonCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is int) { - buffer.putUint8(4); - buffer.putInt64(value); - } else if (value is PlatformVideoViewType) { - buffer.putUint8(129); - writeValue(buffer, value.index); - } else if (value is PlatformVideoViewCreationParams) { - buffer.putUint8(130); - writeValue(buffer, value.encode()); - } else if (value is CreateMessage) { - buffer.putUint8(131); - writeValue(buffer, value.encode()); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 129: - final int? value = readValue(buffer) as int?; - return value == null ? null : PlatformVideoViewType.values[value]; - case 130: - return PlatformVideoViewCreationParams.decode(readValue(buffer)!); - case 131: - return CreateMessage.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); - } - } -} - -class AndroidVideoPlayerApi { - /// Constructor for [AndroidVideoPlayerApi]. The [binaryMessenger] named argument is - /// available for dependency injection. If it is left null, the default - /// BinaryMessenger will be used which routes to the host platform. - AndroidVideoPlayerApi({ - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) : pigeonVar_binaryMessenger = binaryMessenger, - pigeonVar_messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; - final BinaryMessenger? pigeonVar_binaryMessenger; - - static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - - final String pigeonVar_messageChannelSuffix; - - Future initialize() async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send(null) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future create(CreateMessage msg) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([msg]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else if (pigeonVar_replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (pigeonVar_replyList[0] as int?)!; - } - } - - Future dispose(int playerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([playerId]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future setLooping(int playerId, bool looping) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, looping]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future setVolume(int playerId, double volume) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, volume]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future setPlaybackSpeed(int playerId, double speed) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, speed]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future play(int playerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([playerId]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future position(int playerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([playerId]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else if (pigeonVar_replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (pigeonVar_replyList[0] as int?)!; - } - } - - Future seekTo(int playerId, int position) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([playerId, position]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future pause(int playerId) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = - await pigeonVar_channel.send([playerId]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future setMixWithOthers(bool mixWithOthers) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([mixWithOthers]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } - - Future setAllowBackgroundPlayback(bool allowBackgroundPlayback) async { - final String pigeonVar_channelName = - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$pigeonVar_messageChannelSuffix'; - final BasicMessageChannel pigeonVar_channel = - BasicMessageChannel( - pigeonVar_channelName, - pigeonChannelCodec, - binaryMessenger: pigeonVar_binaryMessenger, - ); - final List? pigeonVar_replyList = await pigeonVar_channel - .send([allowBackgroundPlayback]) as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - } -} diff --git a/packages/video_player/video_player_android/lib/src/messages.g.dart.rej b/packages/video_player/video_player_android/lib/src/messages.g.dart.rej deleted file mode 100644 index c24a715c48b..00000000000 --- a/packages/video_player/video_player_android/lib/src/messages.g.dart.rej +++ /dev/null @@ -1,13 +0,0 @@ -@@ -142,9 +142,9 @@ - AndroidVideoPlayerApi({ - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', -- }) : pigeonVar_binaryMessenger = binaryMessenger, -- pigeonVar_messageChannelSuffix = -- messageChannelSuffix.isNotEmpty ? '.' : ''; -+ }) : pigeonVar_binaryMessenger = binaryMessenger, -+ pigeonVar_messageChannelSuffix = -+ messageChannelSuffix.isNotEmpty ? '.' : ''; - final BinaryMessenger? pigeonVar_binaryMessenger; - - static const MessageCodec pigeonChannelCodec = _PigeonCodec(); diff --git a/packages/video_player/video_player_android/test/test_api.g.dart b/packages/video_player/video_player_android/test/test_api.g.dart index 4fd2e6d9fd9..8054ad91dac 100644 --- a/packages/video_player/video_player_android/test/test_api.g.dart +++ b/packages/video_player/video_player_android/test/test_api.g.dart @@ -87,118 +87,147 @@ abstract class TestHostVideoPlayerApi { messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - try { - api.initialize(); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + try { + api.initialize(); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.'); - final List args = (message as List?)!; - final CreateMessage? arg_msg = (args[0] as CreateMessage?); - assert(arg_msg != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.'); - try { - final int output = api.create(arg_msg!); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.', + ); + final List args = (message as List?)!; + final CreateMessage? arg_msg = (args[0] as CreateMessage?); + assert( + arg_msg != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.', + ); + try { + final int output = api.create(arg_msg!); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.'); - try { - api.dispose(arg_playerId!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.', + ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.', + ); + try { + api.dispose(arg_playerId!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.'); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< + Object? + >(pigeonVar_channel, (Object? message) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.', + ); final List args = (message as List?)!; final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.'); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.', + ); final bool? arg_looping = (args[1] as bool?); - assert(arg_looping != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.'); + assert( + arg_looping != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.', + ); try { api.setLooping(arg_playerId!, arg_looping!); return wrapResponse(empty: true); @@ -206,34 +235,41 @@ abstract class TestHostVideoPlayerApi { return wrapResponse(error: e); } catch (e) { return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + error: PlatformException(code: 'error', message: e.toString()), + ); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.'); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< + Object? + >(pigeonVar_channel, (Object? message) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.', + ); final List args = (message as List?)!; final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.'); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.', + ); final double? arg_volume = (args[1] as double?); - assert(arg_volume != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.'); + assert( + arg_volume != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.', + ); try { api.setVolume(arg_playerId!, arg_volume!); return wrapResponse(empty: true); @@ -241,34 +277,41 @@ abstract class TestHostVideoPlayerApi { return wrapResponse(error: e); } catch (e) { return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + error: PlatformException(code: 'error', message: e.toString()), + ); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.'); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< + Object? + >(pigeonVar_channel, (Object? message) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.', + ); final List args = (message as List?)!; final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.'); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.', + ); final double? arg_speed = (args[1] as double?); - assert(arg_speed != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.'); + assert( + arg_speed != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.', + ); try { api.setPlaybackSpeed(arg_playerId!, arg_speed!); return wrapResponse(empty: true); @@ -276,98 +319,123 @@ abstract class TestHostVideoPlayerApi { return wrapResponse(error: e); } catch (e) { return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + error: PlatformException(code: 'error', message: e.toString()), + ); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.'); - try { - api.play(arg_playerId!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.', + ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.', + ); + try { + api.play(arg_playerId!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.'); - try { - final int output = api.position(arg_playerId!); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.', + ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.', + ); + try { + final int output = api.position(arg_playerId!); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.'); + _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< + Object? + >(pigeonVar_channel, (Object? message) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.', + ); final List args = (message as List?)!; final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.', + ); final int? arg_position = (args[1] as int?); - assert(arg_position != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); + assert( + arg_position != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.', + ); try { api.seekTo(arg_playerId!, arg_position!); return wrapResponse(empty: true); @@ -375,79 +443,97 @@ abstract class TestHostVideoPlayerApi { return wrapResponse(error: e); } catch (e) { return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); + error: PlatformException(code: 'error', message: e.toString()), + ); } }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.'); - try { - api.pause(arg_playerId!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.', + ); + final List args = (message as List?)!; + final int? arg_playerId = (args[0] as int?); + assert( + arg_playerId != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.', + ); + try { + api.pause(arg_playerId!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$messageChannelSuffix', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.'); - final List args = (message as List?)!; - final bool? arg_mixWithOthers = (args[0] as bool?); - assert(arg_mixWithOthers != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.'); - try { - api.setMixWithOthers(arg_mixWithOthers!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.', + ); + final List args = (message as List?)!; + final bool? arg_mixWithOthers = (args[0] as bool?); + assert( + arg_mixWithOthers != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.', + ); + try { + api.setMixWithOthers(arg_mixWithOthers!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } + }); } } { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( + final BasicMessageChannel + pigeonVar_channel = BasicMessageChannel( 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', pigeonChannelCodec, binaryMessenger: binaryMessenger); @@ -457,24 +543,33 @@ abstract class TestHostVideoPlayerApi { } else { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.'); - final List args = (message as List?)!; - final bool? arg_allowBackgroundPlayback = (args[0] as bool?); - assert(arg_allowBackgroundPlayback != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); - try { - api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } + (Object? message, + ) async { + assert( + message != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.', + ); + final List args = (message as List?)!; + final bool? arg_allowBackgroundPlayback = (args[0] as bool?); + assert( + arg_allowBackgroundPlayback != null, + 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.', + ); + try { + api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); + } }); } } } -} +} \ No newline at end of file diff --git a/packages/video_player/video_player_android/test/test_api.g.dart.orig b/packages/video_player/video_player_android/test/test_api.g.dart.orig deleted file mode 100644 index 4fd2e6d9fd9..00000000000 --- a/packages/video_player/video_player_android/test/test_api.g.dart.orig +++ /dev/null @@ -1,480 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// Autogenerated from Pigeon (v22.7.4), do not edit directly. -// See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers -// ignore_for_file: avoid_relative_lib_imports -import 'dart:async'; -import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; -import 'package:flutter/services.dart'; -import 'package:flutter_test/flutter_test.dart'; - -import 'package:video_player_android/src/messages.g.dart'; - -class _PigeonCodec extends StandardMessageCodec { - const _PigeonCodec(); - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is int) { - buffer.putUint8(4); - buffer.putInt64(value); - } else if (value is PlatformVideoViewType) { - buffer.putUint8(129); - writeValue(buffer, value.index); - } else if (value is PlatformVideoViewCreationParams) { - buffer.putUint8(130); - writeValue(buffer, value.encode()); - } else if (value is CreateMessage) { - buffer.putUint8(131); - writeValue(buffer, value.encode()); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 129: - final int? value = readValue(buffer) as int?; - return value == null ? null : PlatformVideoViewType.values[value]; - case 130: - return PlatformVideoViewCreationParams.decode(readValue(buffer)!); - case 131: - return CreateMessage.decode(readValue(buffer)!); - default: - return super.readValueOfType(type, buffer); - } - } -} - -abstract class TestHostVideoPlayerApi { - static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => - TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - - void initialize(); - - int create(CreateMessage msg); - - void dispose(int playerId); - - void setLooping(int playerId, bool looping); - - void setVolume(int playerId, double volume); - - void setPlaybackSpeed(int playerId, double speed); - - void play(int playerId); - - int position(int playerId); - - void seekTo(int playerId, int position); - - void pause(int playerId); - - void setMixWithOthers(bool mixWithOthers); - - void setAllowBackgroundPlayback(bool allowBackgroundPlayback); - - static void setUp( - TestHostVideoPlayerApi? api, { - BinaryMessenger? binaryMessenger, - String messageChannelSuffix = '', - }) { - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - try { - api.initialize(); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.'); - final List args = (message as List?)!; - final CreateMessage? arg_msg = (args[0] as CreateMessage?); - assert(arg_msg != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.'); - try { - final int output = api.create(arg_msg!); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.'); - try { - api.dispose(arg_playerId!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.'); - final bool? arg_looping = (args[1] as bool?); - assert(arg_looping != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.'); - try { - api.setLooping(arg_playerId!, arg_looping!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.'); - final double? arg_volume = (args[1] as double?); - assert(arg_volume != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.'); - try { - api.setVolume(arg_playerId!, arg_volume!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.'); - final double? arg_speed = (args[1] as double?); - assert(arg_speed != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.'); - try { - api.setPlaybackSpeed(arg_playerId!, arg_speed!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.'); - try { - api.play(arg_playerId!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.'); - try { - final int output = api.position(arg_playerId!); - return [output]; - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); - final int? arg_position = (args[1] as int?); - assert(arg_position != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); - try { - api.seekTo(arg_playerId!, arg_position!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.'); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); - assert(arg_playerId != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.'); - try { - api.pause(arg_playerId!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.'); - final List args = (message as List?)!; - final bool? arg_mixWithOthers = (args[0] as bool?); - assert(arg_mixWithOthers != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.'); - try { - api.setMixWithOthers(arg_mixWithOthers!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { - final BasicMessageChannel< - Object?> pigeonVar_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.'); - final List args = (message as List?)!; - final bool? arg_allowBackgroundPlayback = (args[0] as bool?); - assert(arg_allowBackgroundPlayback != null, - 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); - try { - api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - } -} diff --git a/packages/video_player/video_player_android/test/test_api.g.dart.rej b/packages/video_player/video_player_android/test/test_api.g.dart.rej deleted file mode 100644 index 83002ed9af5..00000000000 --- a/packages/video_player/video_player_android/test/test_api.g.dart.rej +++ /dev/null @@ -1,740 +0,0 @@ -@@ -87,118 +87,147 @@ - messageChannelSuffix = - messageChannelSuffix.isNotEmpty ? '.' : ''; - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.initialize', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- try { -- api.initialize(); -- return wrapResponse(empty: true); -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ try { -+ api.initialize(); -+ return wrapResponse(empty: true); -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.'); -- final List args = (message as List?)!; -- final CreateMessage? arg_msg = (args[0] as CreateMessage?); -- assert(arg_msg != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.'); -- try { -- final int output = api.create(arg_msg!); -- return [output]; -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null.', -+ ); -+ final List args = (message as List?)!; -+ final CreateMessage? arg_msg = (args[0] as CreateMessage?); -+ assert( -+ arg_msg != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.create was null, expected non-null CreateMessage.', -+ ); -+ try { -+ final int output = api.create(arg_msg!); -+ return [output]; -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.'); -- final List args = (message as List?)!; -- final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.'); -- try { -- api.dispose(arg_playerId!); -- return wrapResponse(empty: true); -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null.', -+ ); -+ final List args = (message as List?)!; -+ final int? arg_playerId = (args[0] as int?); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.dispose was null, expected non-null int.', -+ ); -+ try { -+ api.dispose(arg_playerId!); -+ return wrapResponse(empty: true); -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { -- _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.'); -+ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< -+ Object? -+ >(pigeonVar_channel, (Object? message) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null.', -+ ); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.'); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null int.', -+ ); - final bool? arg_looping = (args[1] as bool?); -- assert(arg_looping != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.'); -+ assert( -+ arg_looping != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setLooping was null, expected non-null bool.', -+ ); - try { - api.setLooping(arg_playerId!, arg_looping!); - return wrapResponse(empty: true); -@@ -206,34 +235,41 @@ - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -+ error: PlatformException(code: 'error', message: e.toString()), -+ ); - } - }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { -- _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.'); -+ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< -+ Object? -+ >(pigeonVar_channel, (Object? message) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null.', -+ ); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.'); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null int.', -+ ); - final double? arg_volume = (args[1] as double?); -- assert(arg_volume != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.'); -+ assert( -+ arg_volume != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setVolume was null, expected non-null double.', -+ ); - try { - api.setVolume(arg_playerId!, arg_volume!); - return wrapResponse(empty: true); -@@ -241,34 +277,41 @@ - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -+ error: PlatformException(code: 'error', message: e.toString()), -+ ); - } - }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { -- _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.'); -+ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< -+ Object? -+ >(pigeonVar_channel, (Object? message) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null.', -+ ); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.'); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null int.', -+ ); - final double? arg_speed = (args[1] as double?); -- assert(arg_speed != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.'); -+ assert( -+ arg_speed != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setPlaybackSpeed was null, expected non-null double.', -+ ); - try { - api.setPlaybackSpeed(arg_playerId!, arg_speed!); - return wrapResponse(empty: true); -@@ -276,98 +319,123 @@ - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -+ error: PlatformException(code: 'error', message: e.toString()), -+ ); - } - }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.'); -- final List args = (message as List?)!; -- final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.'); -- try { -- api.play(arg_playerId!); -- return wrapResponse(empty: true); -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null.', -+ ); -+ final List args = (message as List?)!; -+ final int? arg_playerId = (args[0] as int?); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.play was null, expected non-null int.', -+ ); -+ try { -+ api.play(arg_playerId!); -+ return wrapResponse(empty: true); -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.'); -- final List args = (message as List?)!; -- final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.'); -- try { -- final int output = api.position(arg_playerId!); -- return [output]; -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null.', -+ ); -+ final List args = (message as List?)!; -+ final int? arg_playerId = (args[0] as int?); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.position was null, expected non-null int.', -+ ); -+ try { -+ final int output = api.position(arg_playerId!); -+ return [output]; -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { -- _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.'); -+ _testBinaryMessengerBinding!.defaultBinaryMessenger.setMockDecodedMessageHandler< -+ Object? -+ >(pigeonVar_channel, (Object? message) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null.', -+ ); - final List args = (message as List?)!; - final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.', -+ ); - final int? arg_position = (args[1] as int?); -- assert(arg_position != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.'); -+ assert( -+ arg_position != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.seekTo was null, expected non-null int.', -+ ); - try { - api.seekTo(arg_playerId!, arg_position!); - return wrapResponse(empty: true); -@@ -375,105 +443,133 @@ - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -+ error: PlatformException(code: 'error', message: e.toString()), -+ ); - } - }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.'); -- final List args = (message as List?)!; -- final int? arg_playerId = (args[0] as int?); -- assert(arg_playerId != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.'); -- try { -- api.pause(arg_playerId!); -- return wrapResponse(empty: true); -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null.', -+ ); -+ final List args = (message as List?)!; -+ final int? arg_playerId = (args[0] as int?); -+ assert( -+ arg_playerId != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.pause was null, expected non-null int.', -+ ); -+ try { -+ api.pause(arg_playerId!); -+ return wrapResponse(empty: true); -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.'); -- final List args = (message as List?)!; -- final bool? arg_mixWithOthers = (args[0] as bool?); -- assert(arg_mixWithOthers != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.'); -- try { -- api.setMixWithOthers(arg_mixWithOthers!); -- return wrapResponse(empty: true); -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null.', -+ ); -+ final List args = (message as List?)!; -+ final bool? arg_mixWithOthers = (args[0] as bool?); -+ assert( -+ arg_mixWithOthers != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setMixWithOthers was null, expected non-null bool.', -+ ); -+ try { -+ api.setMixWithOthers(arg_mixWithOthers!); -+ return wrapResponse(empty: true); -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - { -- final BasicMessageChannel< -- Object?> pigeonVar_channel = BasicMessageChannel< -- Object?>( -- 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback', -- pigeonChannelCodec, -- binaryMessenger: binaryMessenger); -+ final BasicMessageChannel -+ pigeonVar_channel = BasicMessageChannel( -+ 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback', -+ pigeonChannelCodec, -+ binaryMessenger: binaryMessenger, -+ ); - if (api == null) { - _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, null); - } else { - _testBinaryMessengerBinding!.defaultBinaryMessenger -- .setMockDecodedMessageHandler(pigeonVar_channel, -- (Object? message) async { -- assert(message != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.'); -- final List args = (message as List?)!; -- final bool? arg_allowBackgroundPlayback = (args[0] as bool?); -- assert(arg_allowBackgroundPlayback != null, -- 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.'); -- try { -- api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); -- return wrapResponse(empty: true); -- } on PlatformException catch (e) { -- return wrapResponse(error: e); -- } catch (e) { -- return wrapResponse( -- error: PlatformException(code: 'error', message: e.toString())); -- } -- }); -+ .setMockDecodedMessageHandler(pigeonVar_channel, ( -+ Object? message, -+ ) async { -+ assert( -+ message != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null.', -+ ); -+ final List args = (message as List?)!; -+ final bool? arg_allowBackgroundPlayback = (args[0] as bool?); -+ assert( -+ arg_allowBackgroundPlayback != null, -+ 'Argument for dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback was null, expected non-null bool.', -+ ); -+ try { -+ api.setAllowBackgroundPlayback(arg_allowBackgroundPlayback!); -+ return wrapResponse(empty: true); -+ } on PlatformException catch (e) { -+ return wrapResponse(error: e); -+ } catch (e) { -+ return wrapResponse( -+ error: PlatformException( -+ code: 'error', -+ message: e.toString(), -+ ), -+ ); -+ } -+ }); - } - } - } From fc9f99e41f1e622c397b776cd9fc8e5510e51954 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Wed, 4 Jun 2025 15:34:39 +0200 Subject: [PATCH 14/16] Fix code formattating --- .../video_player_android/test/test_api.g.dart | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/video_player/video_player_android/test/test_api.g.dart b/packages/video_player/video_player_android/test/test_api.g.dart index 8054ad91dac..603585cd341 100644 --- a/packages/video_player/video_player_android/test/test_api.g.dart +++ b/packages/video_player/video_player_android/test/test_api.g.dart @@ -532,18 +532,19 @@ abstract class TestHostVideoPlayerApi { } } { - final BasicMessageChannel + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( - 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback$messageChannelSuffix', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + 'dev.flutter.pigeon.video_player_android.AndroidVideoPlayerApi.setAllowBackgroundPlayback', + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(pigeonVar_channel, - (Object? message, + .setMockDecodedMessageHandler(pigeonVar_channel, ( + Object? message, ) async { assert( message != null, @@ -562,14 +563,14 @@ abstract class TestHostVideoPlayerApi { return wrapResponse(error: e); } catch (e) { return wrapResponse( - error: PlatformException( - code: 'error', - message: e.toString(), - ), - ); + error: PlatformException( + code: 'error', + message: e.toString(), + ), + ); } - }); + }); } } } -} \ No newline at end of file +} From 99c5ed93f27492f1b2c88577ae594308214fd881 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Mon, 9 Jun 2025 10:45:45 +0200 Subject: [PATCH 15/16] Remove mini_controller.dart.orig --- .../example/lib/mini_controller.dart.orig | 590 ------------------ 1 file changed, 590 deletions(-) delete mode 100644 packages/video_player/video_player_android/example/lib/mini_controller.dart.orig diff --git a/packages/video_player/video_player_android/example/lib/mini_controller.dart.orig b/packages/video_player/video_player_android/example/lib/mini_controller.dart.orig deleted file mode 100644 index 40a1877b4d8..00000000000 --- a/packages/video_player/video_player_android/example/lib/mini_controller.dart.orig +++ /dev/null @@ -1,590 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// TODO(stuartmorgan): Consider extracting this to a shared local (path-based) -// package for use in all implementation packages. - -import 'dart:async'; -import 'dart:io'; - -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:video_player_platform_interface/video_player_platform_interface.dart'; - -VideoPlayerPlatform? _cachedPlatform; - -VideoPlayerPlatform get _platform { - if (_cachedPlatform == null) { - _cachedPlatform = VideoPlayerPlatform.instance; - _cachedPlatform!.init(); - } - return _cachedPlatform!; -} - -/// The duration, current position, buffering state, error state and settings -/// of a [MiniController]. -@immutable -class VideoPlayerValue { - /// Constructs a video with the given values. Only [duration] is required. The - /// rest will initialize with default values when unset. - const VideoPlayerValue({ - required this.duration, - this.size = Size.zero, - this.position = Duration.zero, - this.buffered = const [], - this.isInitialized = false, - this.isPlaying = false, - this.isBuffering = false, - this.playbackSpeed = 1.0, - this.errorDescription, - this.rotationCorrection = 0, - }); - - /// Returns an instance for a video that hasn't been loaded. - const VideoPlayerValue.uninitialized() - : this(duration: Duration.zero, isInitialized: false); - - /// Returns an instance with the given [errorDescription]. - const VideoPlayerValue.erroneous(String errorDescription) - : this( - duration: Duration.zero, - isInitialized: false, - errorDescription: errorDescription, - ); - - /// The total duration of the video. - /// - /// The duration is [Duration.zero] if the video hasn't been initialized. - final Duration duration; - - /// The current playback position. - final Duration position; - - /// The currently buffered ranges. - final List buffered; - - /// True if the video is playing. False if it's paused. - final bool isPlaying; - - /// True if the video is currently buffering. - final bool isBuffering; - - /// The current speed of the playback. - final double playbackSpeed; - - /// A description of the error if present. - /// - /// If [hasError] is false this is `null`. - final String? errorDescription; - - /// The [size] of the currently loaded video. - final Size size; - - /// Indicates whether or not the video has been loaded and is ready to play. - final bool isInitialized; - - /// Degrees to rotate the video (clockwise) so it is displayed correctly. - final int rotationCorrection; - - /// Indicates whether or not the video is in an error state. If this is true - /// [errorDescription] should have information about the problem. - bool get hasError => errorDescription != null; - - /// Returns [size.width] / [size.height]. - /// - /// Will return `1.0` if: - /// * [isInitialized] is `false` - /// * [size.width], or [size.height] is equal to `0.0` - /// * aspect ratio would be less than or equal to `0.0` - double get aspectRatio { - if (!isInitialized || size.width == 0 || size.height == 0) { - return 1.0; - } - final double aspectRatio = size.width / size.height; - if (aspectRatio <= 0) { - return 1.0; - } - return aspectRatio; - } - - /// Returns a new instance that has the same values as this current instance, - /// except for any overrides passed in as arguments to [copyWidth]. - VideoPlayerValue copyWith({ - Duration? duration, - Size? size, - Duration? position, - List? buffered, - bool? isInitialized, - bool? isPlaying, - bool? isBuffering, - double? playbackSpeed, - String? errorDescription, - int? rotationCorrection, - }) { - return VideoPlayerValue( - duration: duration ?? this.duration, - size: size ?? this.size, - position: position ?? this.position, - buffered: buffered ?? this.buffered, - isInitialized: isInitialized ?? this.isInitialized, - isPlaying: isPlaying ?? this.isPlaying, - isBuffering: isBuffering ?? this.isBuffering, - playbackSpeed: playbackSpeed ?? this.playbackSpeed, - errorDescription: errorDescription ?? this.errorDescription, - rotationCorrection: rotationCorrection ?? this.rotationCorrection, - ); - } - - @override - bool operator ==(Object other) => - identical(this, other) || - other is VideoPlayerValue && - runtimeType == other.runtimeType && - duration == other.duration && - position == other.position && - listEquals(buffered, other.buffered) && - isPlaying == other.isPlaying && - isBuffering == other.isBuffering && - playbackSpeed == other.playbackSpeed && - errorDescription == other.errorDescription && - size == other.size && - isInitialized == other.isInitialized && - rotationCorrection == other.rotationCorrection; - - @override - int get hashCode => Object.hash( - duration, - position, - buffered, - isPlaying, - isBuffering, - playbackSpeed, - errorDescription, - size, - isInitialized, - rotationCorrection, - ); -} - -/// A very minimal version of `VideoPlayerController` for running the example -/// without relying on `video_player`. -class MiniController extends ValueNotifier { - /// Constructs a [MiniController] playing a video from an asset. - /// - /// The name of the asset is given by the [dataSource] argument and must not be - /// null. The [package] argument must be non-null when the asset comes from a - /// package and null otherwise. - MiniController.asset( - this.dataSource, { - this.package, - this.viewType = VideoViewType.textureView, - }) : dataSourceType = DataSourceType.asset, - super(const VideoPlayerValue(duration: Duration.zero)); - - /// Constructs a [MiniController] playing a video from obtained from - /// the network. - MiniController.network( - this.dataSource, { - this.viewType = VideoViewType.textureView, - }) : dataSourceType = DataSourceType.network, - package = null, - super(const VideoPlayerValue(duration: Duration.zero)); - - /// Constructs a [MiniController] playing a video from obtained from a file. - MiniController.file(File file, {this.viewType = VideoViewType.textureView}) - : dataSource = Uri.file(file.absolute.path).toString(), - dataSourceType = DataSourceType.file, - package = null, - super(const VideoPlayerValue(duration: Duration.zero)); - - /// The URI to the video file. This will be in different formats depending on - /// the [DataSourceType] of the original video. - final String dataSource; - - /// Describes the type of data source this [MiniController] - /// is constructed with. - final DataSourceType dataSourceType; - - /// Only set for [asset] videos. The package that the asset was loaded from. - final String? package; - - /// The type of view used to display the video. - final VideoViewType viewType; - - Timer? _timer; - Completer? _creatingCompleter; - StreamSubscription? _eventSubscription; - - /// The id of a player that hasn't been initialized. - @visibleForTesting - static const int kUninitializedPlayerId = -1; - int _playerId = kUninitializedPlayerId; - - /// This is just exposed for testing. It shouldn't be used by anyone depending - /// on the plugin. - @visibleForTesting - int get playerId => _playerId; - - /// Attempts to open the given [dataSource] and load metadata about the video. - Future initialize() async { - _creatingCompleter = Completer(); - - late DataSource dataSourceDescription; - switch (dataSourceType) { - case DataSourceType.asset: - dataSourceDescription = DataSource( - sourceType: DataSourceType.asset, - asset: dataSource, - package: package, - ); - case DataSourceType.network: - dataSourceDescription = DataSource( - sourceType: DataSourceType.network, - uri: dataSource, - ); - case DataSourceType.file: - dataSourceDescription = DataSource( - sourceType: DataSourceType.file, - uri: dataSource, - ); - case DataSourceType.contentUri: - dataSourceDescription = DataSource( - sourceType: DataSourceType.contentUri, - uri: dataSource, - ); - } - - final VideoCreationOptions creationOptions = VideoCreationOptions( - dataSource: dataSourceDescription, - viewType: viewType, - ); - - _playerId = (await _platform.createWithOptions(creationOptions)) ?? - kUninitializedPlayerId; - _creatingCompleter!.complete(null); - final Completer initializingCompleter = Completer(); - - void eventListener(VideoEvent event) { - switch (event.eventType) { - case VideoEventType.initialized: - value = value.copyWith( - duration: event.duration, - rotationCorrection: event.rotationCorrection, - size: event.size, - isInitialized: event.duration != null, - ); - initializingCompleter.complete(null); - _platform.setVolume(_playerId, 1.0); - _platform.setLooping(_playerId, true); - _applyPlayPause(); - case VideoEventType.completed: - pause().then((void pauseResult) => seekTo(value.duration)); - case VideoEventType.bufferingUpdate: - value = value.copyWith(buffered: event.buffered); - case VideoEventType.bufferingStart: - value = value.copyWith(isBuffering: true); - case VideoEventType.bufferingEnd: - value = value.copyWith(isBuffering: false); - case VideoEventType.isPlayingStateUpdate: - value = value.copyWith(isPlaying: event.isPlaying); - case VideoEventType.unknown: - break; - } - } - - void errorListener(Object obj) { - final PlatformException e = obj as PlatformException; - value = VideoPlayerValue.erroneous(e.message!); - _timer?.cancel(); - if (!initializingCompleter.isCompleted) { - initializingCompleter.completeError(obj); - } - } - - _eventSubscription = _platform - .videoEventsFor(_playerId) - .listen(eventListener, onError: errorListener); - return initializingCompleter.future; - } - - @override - Future dispose() async { - if (_creatingCompleter != null) { - await _creatingCompleter!.future; - _timer?.cancel(); - await _eventSubscription?.cancel(); - await _platform.dispose(_playerId); - } - super.dispose(); - } - - /// Starts playing the video. - Future play() async { - value = value.copyWith(isPlaying: true); - await _applyPlayPause(); - } - - /// Pauses the video. - Future pause() async { - value = value.copyWith(isPlaying: false); - await _applyPlayPause(); - } - - Future _applyPlayPause() async { - _timer?.cancel(); - if (value.isPlaying) { - await _platform.play(_playerId); - - _timer = Timer.periodic(const Duration(milliseconds: 500), ( - Timer timer, - ) async { - final Duration? newPosition = await position; - if (newPosition == null) { - return; - } - _updatePosition(newPosition); - }); - await _applyPlaybackSpeed(); - } else { - await _platform.pause(_playerId); - } - } - - Future _applyPlaybackSpeed() async { - if (value.isPlaying) { - await _platform.setPlaybackSpeed(_playerId, value.playbackSpeed); - } - } - - /// The position in the current video. - Future get position async { - return _platform.getPosition(_playerId); - } - - /// Sets the video's current timestamp to be at [position]. - Future seekTo(Duration position) async { - if (position > value.duration) { - position = value.duration; - } else if (position < Duration.zero) { - position = Duration.zero; - } - await _platform.seekTo(_playerId, position); - _updatePosition(position); - } - - /// Sets the playback speed. - Future setPlaybackSpeed(double speed) async { - value = value.copyWith(playbackSpeed: speed); - await _applyPlaybackSpeed(); - } - - void _updatePosition(Duration position) { - value = value.copyWith(position: position); - } -} - -/// Widget that displays the video controlled by [controller]. -class VideoPlayer extends StatefulWidget { - /// Uses the given [controller] for all video rendered in this widget. - const VideoPlayer(this.controller, {super.key}); - - /// The [MiniController] responsible for the video being rendered in - /// this widget. - final MiniController controller; - - @override - State createState() => _VideoPlayerState(); -} - -class _VideoPlayerState extends State { - _VideoPlayerState() { - _listener = () { - final int newPlayerId = widget.controller.playerId; - if (newPlayerId != _playerId) { - setState(() { - _playerId = newPlayerId; - }); - } - }; - } - - late VoidCallback _listener; - - late int _playerId; - - @override - void initState() { - super.initState(); - _playerId = widget.controller.playerId; - // Need to listen for initialization events since the actual player ID - // becomes available after asynchronous initialization finishes. - widget.controller.addListener(_listener); - } - - @override - void didUpdateWidget(VideoPlayer oldWidget) { - super.didUpdateWidget(oldWidget); - oldWidget.controller.removeListener(_listener); - _playerId = widget.controller.playerId; - widget.controller.addListener(_listener); - } - - @override - void deactivate() { - super.deactivate(); - widget.controller.removeListener(_listener); - } - - @override - Widget build(BuildContext context) { - return _playerId == MiniController.kUninitializedPlayerId - ? Container() - : _VideoPlayerWithRotation( - rotation: widget.controller.value.rotationCorrection, - child: _platform.buildViewWithOptions( - VideoViewOptions(playerId: _playerId), - ), - ); - } -} - -class _VideoPlayerWithRotation extends StatelessWidget { - const _VideoPlayerWithRotation({required this.rotation, required this.child}); - - final int rotation; - final Widget child; - - @override - Widget build(BuildContext context) { - if (rotation == 0) { - return child; - } - return RotatedBox(quarterTurns: rotation ~/ 90, child: child); - } -} - -class _VideoScrubber extends StatefulWidget { - const _VideoScrubber({required this.child, required this.controller}); - - final Widget child; - final MiniController controller; - - @override - _VideoScrubberState createState() => _VideoScrubberState(); -} - -class _VideoScrubberState extends State<_VideoScrubber> { - MiniController get controller => widget.controller; - - @override - Widget build(BuildContext context) { - void seekToRelativePosition(Offset globalPosition) { - final RenderBox box = context.findRenderObject()! as RenderBox; - final Offset tapPos = box.globalToLocal(globalPosition); - final double relative = tapPos.dx / box.size.width; - final Duration position = controller.value.duration * relative; - controller.seekTo(position); - } - - return GestureDetector( - behavior: HitTestBehavior.opaque, - child: widget.child, - onTapDown: (TapDownDetails details) { - if (controller.value.isInitialized) { - seekToRelativePosition(details.globalPosition); - } - }, - ); - } -} - -/// Displays the play/buffering status of the video controlled by [controller]. -class VideoProgressIndicator extends StatefulWidget { - /// Construct an instance that displays the play/buffering status of the video - /// controlled by [controller]. - const VideoProgressIndicator(this.controller, {super.key}); - - /// The [MiniController] that actually associates a video with this - /// widget. - final MiniController controller; - - @override - State createState() => _VideoProgressIndicatorState(); -} - -class _VideoProgressIndicatorState extends State { - _VideoProgressIndicatorState() { - listener = () { - if (mounted) { - setState(() {}); - } - }; - } - - late VoidCallback listener; - - MiniController get controller => widget.controller; - - @override - void initState() { - super.initState(); - controller.addListener(listener); - } - - @override - void deactivate() { - controller.removeListener(listener); - super.deactivate(); - } - - @override - Widget build(BuildContext context) { - const Color playedColor = Color.fromRGBO(255, 0, 0, 0.7); - const Color bufferedColor = Color.fromRGBO(50, 50, 200, 0.2); - const Color backgroundColor = Color.fromRGBO(200, 200, 200, 0.5); - - Widget progressIndicator; - if (controller.value.isInitialized) { - final int duration = controller.value.duration.inMilliseconds; - final int position = controller.value.position.inMilliseconds; - - int maxBuffering = 0; - for (final DurationRange range in controller.value.buffered) { - final int end = range.end.inMilliseconds; - if (end > maxBuffering) { - maxBuffering = end; - } - } - - progressIndicator = Stack( - fit: StackFit.passthrough, - children: [ - LinearProgressIndicator( - value: maxBuffering / duration, - valueColor: const AlwaysStoppedAnimation(bufferedColor), - backgroundColor: backgroundColor, - ), - LinearProgressIndicator( - value: position / duration, - valueColor: const AlwaysStoppedAnimation(playedColor), - backgroundColor: Colors.transparent, - ), - ], - ); - } else { - progressIndicator = const LinearProgressIndicator( - valueColor: AlwaysStoppedAnimation(playedColor), - backgroundColor: backgroundColor, - ); - } - return _VideoScrubber( - controller: controller, - child: Padding( - padding: const EdgeInsets.only(top: 5.0), - child: progressIndicator, - ), - ); - } -} From 5291126818a2e04b4dd73f27ba1c176458a4d7a9 Mon Sep 17 00:00:00 2001 From: ArvidNy Date: Mon, 9 Jun 2025 21:22:30 +0200 Subject: [PATCH 16/16] Remove unused options field from TextureVideoPlayer --- .../flutter/plugins/videoplayer/texture/TextureVideoPlayer.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java index c44e4d77a9a..c9d18dccce4 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/texture/TextureVideoPlayer.java @@ -29,7 +29,6 @@ public final class TextureVideoPlayer extends VideoPlayer implements SurfaceProducer.Callback { // True when the ExoPlayer instance has a null surface. private boolean needsSurface = true; - @Nullable private final VideoPlayerOptions options; /** * Creates a texture video player. * @@ -70,7 +69,6 @@ public TextureVideoPlayer( super(events, mediaItem, options, surfaceProducer, exoPlayerProvider); surfaceProducer.setCallback(this); - this.options = options; Surface surface = surfaceProducer.getSurface(); this.exoPlayer.setVideoSurface(surface);