Pigeon: Integrated onMessageReceived API
This commit is contained in:
parent
5c411c508f
commit
6dd7e3b8de
9 changed files with 27 additions and 50 deletions
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
package com.gianlucaparadise.flutter_cast_framework
|
||||
|
||||
object MethodNames {
|
||||
const val onMessageReceived = "CastSession.onMessageReceived"
|
||||
}
|
||||
|
|
@ -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<String, String?> = 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?) {
|
||||
|
|
|
|||
|
|
@ -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<String, MessageCastingChannel>, castMessage: CastMessage) {
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
class PlatformMethodNames {
|
||||
static const onMessageReceived = "CastSession.onMessageReceived";
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue