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)
|
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")
|
||||||
|
|
|
||||||
|
|
@ -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 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?) {
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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
|
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)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
class PlatformMethodNames {
|
|
||||||
static const onMessageReceived = "CastSession.onMessageReceived";
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue