diff --git a/android/src/main/java/com/gianlucaparadise/flutter_cast_framework/HostApis.java b/android/src/main/java/com/gianlucaparadise/flutter_cast_framework/HostApis.java index 8492e39..02f4f1d 100644 --- a/android/src/main/java/com/gianlucaparadise/flutter_cast_framework/HostApis.java +++ b/android/src/main/java/com/gianlucaparadise/flutter_cast_framework/HostApis.java @@ -161,6 +161,69 @@ public class HostApis { callback.reply(null); }); } + public void onSessionStarting(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionStarting", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionStarted(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionStarted", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionStartFailed(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionStartFailed", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionEnding(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionEnding", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionEnded(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionEnded", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionResuming(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionResuming", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionResumed(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionResumed", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionResumeFailed(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionResumeFailed", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } + public void onSessionSuspended(Reply callback) { + BasicMessageChannel channel = + new BasicMessageChannel<>(binaryMessenger, "dev.flutter.pigeon.CastFlutterApi.onSessionSuspended", getCodec()); + channel.send(null, channelReply -> { + callback.reply(null); + }); + } } private static Map wrapError(Throwable exception) { Map errorMap = new HashMap<>(); diff --git a/ios/Classes/HostApis.h b/ios/Classes/HostApis.h index c56df78..54d99d3 100644 --- a/ios/Classes/HostApis.h +++ b/ios/Classes/HostApis.h @@ -32,5 +32,14 @@ NSObject *CastFlutterApiGetCodec(void); - (instancetype)initWithBinaryMessenger:(id)binaryMessenger; - (void)getSessionMessageNamespacesWithCompletion:(void(^)(NSArray *, NSError *_Nullable))completion; - (void)onCastStateChangedCastState:(NSNumber *)castState completion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionStartingWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionStartedWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionStartFailedWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionEndingWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionEndedWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionResumingWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionResumedWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionResumeFailedWithCompletion:(void(^)(NSError *_Nullable))completion; +- (void)onSessionSuspendedWithCompletion:(void(^)(NSError *_Nullable))completion; @end NS_ASSUME_NONNULL_END diff --git a/ios/Classes/HostApis.m b/ios/Classes/HostApis.m index 4e9016d..bda8fe6 100644 --- a/ios/Classes/HostApis.m +++ b/ios/Classes/HostApis.m @@ -204,4 +204,94 @@ NSObject *CastFlutterApiGetCodec() { completion(nil); }]; } +- (void)onSessionStartingWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionStarting" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionStartedWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionStarted" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionStartFailedWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionStartFailed" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionEndingWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionEnding" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionEndedWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionEnded" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionResumingWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionResuming" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionResumedWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionResumed" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionResumeFailedWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionResumeFailed" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} +- (void)onSessionSuspendedWithCompletion:(void(^)(NSError *_Nullable))completion { + FlutterBasicMessageChannel *channel = + [FlutterBasicMessageChannel + messageChannelWithName:@"dev.flutter.pigeon.CastFlutterApi.onSessionSuspended" + binaryMessenger:self.binaryMessenger + codec:CastFlutterApiGetCodec()]; + [channel sendMessage:nil reply:^(id reply) { + completion(nil); + }]; +} @end diff --git a/lib/src/HostApis.dart b/lib/src/HostApis.dart index ac5bb1a..c7d88a8 100644 --- a/lib/src/HostApis.dart +++ b/lib/src/HostApis.dart @@ -117,6 +117,15 @@ abstract class CastFlutterApi { List getSessionMessageNamespaces(); void onCastStateChanged(int castState); + void onSessionStarting(); + void onSessionStarted(); + void onSessionStartFailed(); + void onSessionEnding(); + void onSessionEnded(); + void onSessionResuming(); + void onSessionResumed(); + void onSessionResumeFailed(); + void onSessionSuspended(); static void setup(CastFlutterApi? api) { { const BasicMessageChannel channel = BasicMessageChannel( @@ -147,5 +156,122 @@ abstract class CastFlutterApi { }); } } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionStarting', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionStarting(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionStarted', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionStarted(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionStartFailed', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionStartFailed(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionEnding', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionEnding(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionEnded', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionEnded(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionResuming', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionResuming(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionResumed', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionResumed(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionResumeFailed', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionResumeFailed(); + return; + }); + } + } + { + const BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.CastFlutterApi.onSessionSuspended', codec); + if (api == null) { + channel.setMessageHandler(null); + } else { + channel.setMessageHandler((Object? message) async { + // ignore message + api.onSessionSuspended(); + return; + }); + } + } } } diff --git a/lib/src/HostApisDefinition.dart b/lib/src/HostApisDefinition.dart index 060eabe..5207c16 100644 --- a/lib/src/HostApisDefinition.dart +++ b/lib/src/HostApisDefinition.dart @@ -15,4 +15,16 @@ abstract class CastApi { abstract class CastFlutterApi { List getSessionMessageNamespaces(); void onCastStateChanged(int castState); + + //region Session State handling + void onSessionStarting(); + void onSessionStarted(); + void onSessionStartFailed(); + void onSessionEnding(); + void onSessionEnded(); + void onSessionResuming(); + void onSessionResumed(); + void onSessionResumeFailed(); + void onSessionSuspended(); + //endregion } \ No newline at end of file