AdBreakProgress flutter

This commit is contained in:
gianlucaparadise 2021-12-20 07:02:53 +01:00
parent cc735e6adb
commit 9269a67c4a
3 changed files with 35 additions and 0 deletions

View file

@ -5,6 +5,13 @@ import '../../cast.dart';
import '../PlatformBridgeApis.dart'; import '../PlatformBridgeApis.dart';
typedef ProgressListener = void Function(int progressMs, int durationMs); typedef ProgressListener = void Function(int progressMs, int durationMs);
typedef AdBreakClipProgressListener = void Function(
String adBreakId,
String adBreakClipId,
int progressMs,
int durationMs,
int whenSkippableMs,
);
/// Class for controlling a media player application running on a receiver. /// Class for controlling a media player application running on a receiver.
class RemoteMediaClient { class RemoteMediaClient {
@ -38,6 +45,9 @@ class RemoteMediaClient {
/// Called when receiving media error message. /// Called when receiving media error message.
VoidCallback? onMediaError; VoidCallback? onMediaError;
/// Callback to get updates on the progess of the currently playing ad break clip
AdBreakClipProgressListener? onAdBreakClipProgressUpdated;
/// Loads a new media item with specified options. /// Loads a new media item with specified options.
void load(MediaLoadRequestData request) { void load(MediaLoadRequestData request) {
_hostApi.loadMediaLoadRequestData(request); _hostApi.loadMediaLoadRequestData(request);

View file

@ -56,6 +56,8 @@ class _ExpandedControlsState extends State<ExpandedControls> {
sessionManager.remoteMediaClient.playerState sessionManager.remoteMediaClient.playerState
.addListener(_onPlayerStateChanged); .addListener(_onPlayerStateChanged);
sessionManager.remoteMediaClient.onProgressUpdated = _onProgressUpdated; sessionManager.remoteMediaClient.onProgressUpdated = _onProgressUpdated;
sessionManager.remoteMediaClient.onAdBreakClipProgressUpdated =
_onAdBreakClipProgressUpdated;
super.initState(); super.initState();
} }
@ -67,6 +69,7 @@ class _ExpandedControlsState extends State<ExpandedControls> {
sessionManager.remoteMediaClient.playerState sessionManager.remoteMediaClient.playerState
.removeListener(_onPlayerStateChanged); .removeListener(_onPlayerStateChanged);
sessionManager.remoteMediaClient.onProgressUpdated = null; sessionManager.remoteMediaClient.onProgressUpdated = null;
sessionManager.remoteMediaClient.onAdBreakClipProgressUpdated = null;
widget.controller.dispose(); widget.controller.dispose();
@ -104,6 +107,16 @@ class _ExpandedControlsState extends State<ExpandedControls> {
widget.controller.updateProgress(progress, duration); widget.controller.updateProgress(progress, duration);
} }
void _onAdBreakClipProgressUpdated(
String adBreakId,
String adBreakClipId,
int progressMs,
int durationMs,
int whenSkippableMs,
) {
widget.controller.updateProgress(progressMs, durationMs);
}
Widget _getDecoratedToolbar(MediaInfo? mediaInfo) { Widget _getDecoratedToolbar(MediaInfo? mediaInfo) {
// Title and subtitle can't be retrieved at the moment // Title and subtitle can't be retrieved at the moment
// final title = mediaInfo?.mediaMetadata?.strings[MediaMetadataKey.title] // final title = mediaInfo?.mediaMetadata?.strings[MediaMetadataKey.title]

View file

@ -149,5 +149,17 @@ class _CastFlutterApiImplementor extends CastFlutterApi {
void onProgressUpdated(int progressMs, int durationMs) { void onProgressUpdated(int progressMs, int durationMs) {
remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs); remoteMediaClient.onProgressUpdated?.call(progressMs, durationMs);
} }
@override
void onAdBreakClipProgressUpdated(String adBreakId, String adBreakClipId,
int progressMs, int durationMs, int whenSkippableMs) {
remoteMediaClient.onAdBreakClipProgressUpdated?.call(
adBreakId,
adBreakClipId,
progressMs,
durationMs,
whenSkippableMs,
);
}
//endregion //endregion
} }