Pigeon: Integrated onMessageReceived API

This commit is contained in:
gianlucaparadise 2021-11-01 19:38:46 +01:00
parent 5c411c508f
commit 6dd7e3b8de
9 changed files with 27 additions and 50 deletions

View file

@ -52,12 +52,13 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
methodChannel.setMethodCallHandler(this) methodChannel.setMethodCallHandler(this)
channel = methodChannel channel = methodChannel
mMessageCastingChannel = MessageCastingChannel(methodChannel)
castApi = MyApi() castApi = MyApi()
HostApis.CastApi.setup(messenger, castApi) HostApis.CastApi.setup(messenger, castApi)
flutterApi = HostApis.CastFlutterApi(messenger) val castFlutterApi = HostApis.CastFlutterApi(messenger)
flutterApi = castFlutterApi
mMessageCastingChannel = MessageCastingChannel(castFlutterApi)
CastContext.getSharedInstance(applicationContext).addCastStateListener { i -> CastContext.getSharedInstance(applicationContext).addCastStateListener { i ->
Log.d(TAG, "Cast state changed: $i") Log.d(TAG, "Cast state changed: $i")

View file

@ -1,5 +0,0 @@
package com.gianlucaparadise.flutter_cast_framework
object MethodNames {
const val onMessageReceived = "CastSession.onMessageReceived"
}

View file

@ -2,25 +2,22 @@ package com.gianlucaparadise.flutter_cast_framework.cast
import android.util.Log import android.util.Log
import com.gianlucaparadise.flutter_cast_framework.HostApis 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.Cast
import com.google.android.gms.cast.CastDevice import com.google.android.gms.cast.CastDevice
import com.google.android.gms.cast.framework.CastSession 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 { companion object {
const val TAG = "MessageCastingChannel" const val TAG = "MessageCastingChannel"
} }
override fun onMessageReceived(castDevice: CastDevice?, namespace: String?, message: String?) { override fun onMessageReceived(castDevice: CastDevice?, namespace: String?, message: String?) {
Log.d(TAG, "Message received: $message:") Log.d(TAG, "Message received: $message:")
val argsMap: HashMap<String, String?> = hashMapOf( val castMessage = HostApis.CastMessage()
"namespace" to namespace, castMessage.namespace = namespace
"message" to message castMessage.message = message
)
channel.invokeMethod(MethodNames.onMessageReceived, argsMap) flutterApi.onMessageReceived(castMessage) {}
} }
fun sendMessage(castSession: CastSession?, castMessage: HostApis.CastMessage?) { fun sendMessage(castSession: CastSession?, castMessage: HostApis.CastMessage?) {

View file

@ -10,23 +10,23 @@ import GoogleCast
class MessageCastingChannel : GCKCastChannel { class MessageCastingChannel : GCKCastChannel {
let channel: FlutterMethodChannel let flutterApi: CastFlutterApi
let namespace: String let namespace: String
init(namespace: String, channel: FlutterMethodChannel) { init(namespace: String, flutterApi: CastFlutterApi) {
self.channel = channel self.flutterApi = flutterApi
self.namespace = namespace self.namespace = namespace
super.init(namespace: namespace) super.init(namespace: namespace)
} }
override func didReceiveTextMessage(_ message: String) { override func didReceiveTextMessage(_ message: String) {
print("Message received: .\(message)") print("Message received: .\(message)")
let argsMap: NSDictionary = [ let castMessage = CastMessage.init()
"namespace": namespace, castMessage.namespace = namespace
"message": message castMessage.message = message
]
channel.invokeMethod(MethodNames.onMessageReceived.rawValue, arguments: argsMap) flutterApi.onMessageReceivedMessage(castMessage) { (_: Error?) in
}
} }
public static func sendMessage(allCastingChannels: Dictionary<String, MessageCastingChannel>, castMessage: CastMessage) { public static func sendMessage(allCastingChannels: Dictionary<String, MessageCastingChannel>, castMessage: CastMessage) {

View file

@ -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"
}

View file

@ -54,7 +54,7 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio
} }
namespaces.forEach({ (namespace) in 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 self.castingChannels[namespace] = castingChannel
newSession?.add(castingChannel) newSession?.add(castingChannel)
}) })

View file

@ -1,3 +0,0 @@
class PlatformMethodNames {
static const onMessageReceived = "CastSession.onMessageReceived";
}

View file

@ -29,12 +29,12 @@ class SessionManager {
MessageReceivedCallback? onMessageReceived; MessageReceivedCallback? onMessageReceived;
void platformOnMessageReceived(dynamic arguments) { void platformOnMessageReceived(CastMessage castMessage) {
var thisOnMessageReceived = onMessageReceived; var thisOnMessageReceived = onMessageReceived;
if (thisOnMessageReceived == null) return; if (thisOnMessageReceived == null) return;
final namespace = arguments['namespace']; final namespace = castMessage.namespace ?? "";
final message = arguments['message']; final message = castMessage.message ?? "";
thisOnMessageReceived(namespace, message); thisOnMessageReceived(namespace, message);
} }

View file

@ -3,7 +3,6 @@ import 'package:flutter/services.dart';
import 'package:flutter_cast_framework/cast.dart'; import 'package:flutter_cast_framework/cast.dart';
import 'HostApis.dart'; import 'HostApis.dart';
import 'MethodNames.dart';
import 'cast/CastContext.dart'; import 'cast/CastContext.dart';
class FlutterCastFramework { class FlutterCastFramework {
@ -24,10 +23,6 @@ class FlutterCastFramework {
debugPrint("Method call on flutter: $method $arguments"); debugPrint("Method call on flutter: $method $arguments");
switch (method) { switch (method) {
case PlatformMethodNames.onMessageReceived:
castContext.sessionManager.platformOnMessageReceived(arguments);
break;
default: default:
debugPrint("Method not handled: $method"); debugPrint("Method not handled: $method");
break; break;
@ -60,10 +55,14 @@ class CastFlutterApiImpl extends CastFlutterApi {
@override @override
void onCastStateChanged(int castState) { void onCastStateChanged(int castState) {
debugPrint("yoyo onCastStateChanged: $castState");
FlutterCastFramework.castContext.onCastStateChanged(castState); FlutterCastFramework.castContext.onCastStateChanged(castState);
} }
@override
void onMessageReceived(CastMessage castMessage) {
FlutterCastFramework.castContext.sessionManager.platformOnMessageReceived(castMessage);
}
//region Session State handling //region Session State handling
@override @override
void onSessionEnded() { void onSessionEnded() {