From 6dd7e3b8dee250d73426646b9bf813b62ffecacb Mon Sep 17 00:00:00 2001 From: gianlucaparadise Date: Mon, 1 Nov 2021 19:38:46 +0100 Subject: [PATCH] Pigeon: Integrated `onMessageReceived` API --- .../FlutterCastFrameworkPlugin.kt | 7 ++++--- .../flutter_cast_framework/MethodNames.kt | 5 ----- .../cast/MessageCastingChannel.kt | 13 +++++-------- ios/Classes/MessageCastingChannel.swift | 18 +++++++++--------- ios/Classes/MethodNames.swift | 12 ------------ .../SwiftFlutterCastFrameworkPlugin.swift | 2 +- lib/src/MethodNames.dart | 3 --- lib/src/cast/SessionManager.dart | 6 +++--- lib/src/flutter_cast_framework.dart | 11 +++++------ 9 files changed, 27 insertions(+), 50 deletions(-) delete mode 100644 android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/MethodNames.kt delete mode 100644 ios/Classes/MethodNames.swift delete mode 100644 lib/src/MethodNames.dart diff --git a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/FlutterCastFrameworkPlugin.kt b/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/FlutterCastFrameworkPlugin.kt index c00acbb..708c401 100644 --- a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/FlutterCastFrameworkPlugin.kt +++ b/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/FlutterCastFrameworkPlugin.kt @@ -52,12 +52,13 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa methodChannel.setMethodCallHandler(this) channel = methodChannel - mMessageCastingChannel = MessageCastingChannel(methodChannel) - castApi = MyApi() HostApis.CastApi.setup(messenger, castApi) - flutterApi = HostApis.CastFlutterApi(messenger) + val castFlutterApi = HostApis.CastFlutterApi(messenger) + flutterApi = castFlutterApi + + mMessageCastingChannel = MessageCastingChannel(castFlutterApi) CastContext.getSharedInstance(applicationContext).addCastStateListener { i -> Log.d(TAG, "Cast state changed: $i") diff --git a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/MethodNames.kt b/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/MethodNames.kt deleted file mode 100644 index cce8525..0000000 --- a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/MethodNames.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.gianlucaparadise.flutter_cast_framework - -object MethodNames { - const val onMessageReceived = "CastSession.onMessageReceived" -} \ No newline at end of file diff --git a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/cast/MessageCastingChannel.kt b/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/cast/MessageCastingChannel.kt index e7f76f1..8b0a479 100644 --- a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/cast/MessageCastingChannel.kt +++ b/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/cast/MessageCastingChannel.kt @@ -2,25 +2,22 @@ package com.gianlucaparadise.flutter_cast_framework.cast import android.util.Log import com.gianlucaparadise.flutter_cast_framework.HostApis -import com.gianlucaparadise.flutter_cast_framework.MethodNames import com.google.android.gms.cast.Cast import com.google.android.gms.cast.CastDevice import com.google.android.gms.cast.framework.CastSession -import io.flutter.plugin.common.MethodChannel -class MessageCastingChannel(private val channel: MethodChannel) : Cast.MessageReceivedCallback { +class MessageCastingChannel(private val flutterApi : HostApis.CastFlutterApi) : Cast.MessageReceivedCallback { companion object { const val TAG = "MessageCastingChannel" } override fun onMessageReceived(castDevice: CastDevice?, namespace: String?, message: String?) { Log.d(TAG, "Message received: $message:") - val argsMap: HashMap = hashMapOf( - "namespace" to namespace, - "message" to message - ) + val castMessage = HostApis.CastMessage() + castMessage.namespace = namespace + castMessage.message = message - channel.invokeMethod(MethodNames.onMessageReceived, argsMap) + flutterApi.onMessageReceived(castMessage) {} } fun sendMessage(castSession: CastSession?, castMessage: HostApis.CastMessage?) { diff --git a/ios/Classes/MessageCastingChannel.swift b/ios/Classes/MessageCastingChannel.swift index 2a5e2b8..93a5d87 100644 --- a/ios/Classes/MessageCastingChannel.swift +++ b/ios/Classes/MessageCastingChannel.swift @@ -10,23 +10,23 @@ import GoogleCast class MessageCastingChannel : GCKCastChannel { - let channel: FlutterMethodChannel + let flutterApi: CastFlutterApi let namespace: String - init(namespace: String, channel: FlutterMethodChannel) { - self.channel = channel + init(namespace: String, flutterApi: CastFlutterApi) { + self.flutterApi = flutterApi self.namespace = namespace super.init(namespace: namespace) } override func didReceiveTextMessage(_ message: String) { print("Message received: .\(message)") - let argsMap: NSDictionary = [ - "namespace": namespace, - "message": message - ] - - channel.invokeMethod(MethodNames.onMessageReceived.rawValue, arguments: argsMap) + let castMessage = CastMessage.init() + castMessage.namespace = namespace + castMessage.message = message + + flutterApi.onMessageReceivedMessage(castMessage) { (_: Error?) in + } } public static func sendMessage(allCastingChannels: Dictionary, castMessage: CastMessage) { diff --git a/ios/Classes/MethodNames.swift b/ios/Classes/MethodNames.swift deleted file mode 100644 index c40dcd9..0000000 --- a/ios/Classes/MethodNames.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// MethodNames.swift -// flutter_cast_framework -// -// Created by Gianluca Paradiso on 09/11/2019. -// - -import Foundation - -enum MethodNames : String { - case onMessageReceived = "CastSession.onMessageReceived" -} diff --git a/ios/Classes/SwiftFlutterCastFrameworkPlugin.swift b/ios/Classes/SwiftFlutterCastFrameworkPlugin.swift index 67f6f59..e3631db 100644 --- a/ios/Classes/SwiftFlutterCastFrameworkPlugin.swift +++ b/ios/Classes/SwiftFlutterCastFrameworkPlugin.swift @@ -54,7 +54,7 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio } namespaces.forEach({ (namespace) in - let castingChannel = MessageCastingChannel.init(namespace: namespace, channel: self.channel) + let castingChannel = MessageCastingChannel.init(namespace: namespace, flutterApi: self.flutterApi) self.castingChannels[namespace] = castingChannel newSession?.add(castingChannel) }) diff --git a/lib/src/MethodNames.dart b/lib/src/MethodNames.dart deleted file mode 100644 index 53b6623..0000000 --- a/lib/src/MethodNames.dart +++ /dev/null @@ -1,3 +0,0 @@ -class PlatformMethodNames { - static const onMessageReceived = "CastSession.onMessageReceived"; -} \ No newline at end of file diff --git a/lib/src/cast/SessionManager.dart b/lib/src/cast/SessionManager.dart index d1287fe..a64ba88 100644 --- a/lib/src/cast/SessionManager.dart +++ b/lib/src/cast/SessionManager.dart @@ -29,12 +29,12 @@ class SessionManager { MessageReceivedCallback? onMessageReceived; - void platformOnMessageReceived(dynamic arguments) { + void platformOnMessageReceived(CastMessage castMessage) { var thisOnMessageReceived = onMessageReceived; if (thisOnMessageReceived == null) return; - final namespace = arguments['namespace']; - final message = arguments['message']; + final namespace = castMessage.namespace ?? ""; + final message = castMessage.message ?? ""; thisOnMessageReceived(namespace, message); } diff --git a/lib/src/flutter_cast_framework.dart b/lib/src/flutter_cast_framework.dart index 2837c43..15acd1d 100644 --- a/lib/src/flutter_cast_framework.dart +++ b/lib/src/flutter_cast_framework.dart @@ -3,7 +3,6 @@ import 'package:flutter/services.dart'; import 'package:flutter_cast_framework/cast.dart'; import 'HostApis.dart'; -import 'MethodNames.dart'; import 'cast/CastContext.dart'; class FlutterCastFramework { @@ -24,10 +23,6 @@ class FlutterCastFramework { debugPrint("Method call on flutter: $method $arguments"); switch (method) { - case PlatformMethodNames.onMessageReceived: - castContext.sessionManager.platformOnMessageReceived(arguments); - break; - default: debugPrint("Method not handled: $method"); break; @@ -60,10 +55,14 @@ class CastFlutterApiImpl extends CastFlutterApi { @override void onCastStateChanged(int castState) { - debugPrint("yoyo onCastStateChanged: $castState"); FlutterCastFramework.castContext.onCastStateChanged(castState); } + @override + void onMessageReceived(CastMessage castMessage) { + FlutterCastFramework.castContext.sessionManager.platformOnMessageReceived(castMessage); + } + //region Session State handling @override void onSessionEnded() {