From 258cf8d607af9a229488aeed848b8d0e331c4729 Mon Sep 17 00:00:00 2001 From: gianlucaparadise Date: Mon, 1 Nov 2021 15:47:05 +0100 Subject: [PATCH] Pigeon: Integrated `sendMessage` API in Kotlin --- .../FlutterCastFrameworkPlugin.kt | 12 +++++++++++- .../flutter_cast_framework/MethodNames.kt | 1 - .../cast/MessageCastingChannel.kt | 12 +++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) 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 44bf2b4..0e823c4 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 @@ -54,6 +54,9 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa mMessageCastingChannel = MessageCastingChannel(methodChannel) + castApi = MyApi() + HostApis.CastApi.setup(messenger, castApi) + CastContext.getSharedInstance(applicationContext).addCastStateListener { i -> Log.d(TAG, "Cast state changed: $i") methodChannel.invokeMethod(MethodNames.onCastStateChanged, i) @@ -98,6 +101,7 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa private val mSessionManagerListener = CastSessionManagerListener() private var channel: MethodChannel? = null + private var castApi : HostApis.CastApi? = null private var applicationContext: Context? = null private var activity: Activity? = null @@ -163,11 +167,17 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa CastDialogOpener.showCastDialog(context, activity) } - MethodNames.sendMessage -> this.mMessageCastingChannel?.sendMessage(mCastSession, arguments) else -> result.notImplemented() } } + private inner class MyApi : HostApis.CastApi { + override fun sendMessage(message: HostApis.CastMessage?) { + mMessageCastingChannel?.sendMessage(mCastSession, message) + } + + } + private inner class NamespaceResult(val oldSession: CastSession?, val newSession: CastSession?) : Result { override fun notImplemented() { Log.d(TAG, "Updating mCastSession - notImplemented") 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 index 333db8c..70026c2 100644 --- a/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/MethodNames.kt +++ b/android/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework/MethodNames.kt @@ -18,5 +18,4 @@ object MethodNames { const val getSessionMessageNamespaces = "CastSession.getSessionMessageNamespaces" const val onMessageReceived = "CastSession.onMessageReceived" - const val sendMessage = "CastSession.sendMessage" } \ 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 309456c..e7f76f1 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 @@ -1,6 +1,7 @@ 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 @@ -22,11 +23,12 @@ class MessageCastingChannel(private val channel: MethodChannel) : Cast.MessageRe channel.invokeMethod(MethodNames.onMessageReceived, argsMap) } - fun sendMessage(castSession: CastSession?, arguments: Any) { - Log.d(TAG, "Send Message arguments: $arguments:") - val argsMap = arguments as HashMap - val namespace = argsMap["namespace"] - val message = argsMap["message"] + fun sendMessage(castSession: CastSession?, castMessage: HostApis.CastMessage?) { + Log.d(TAG, "Send Message arguments: $castMessage:") + if (castMessage == null) return + + val namespace = castMessage.namespace + val message = castMessage.message sendMessage(castSession, namespace, message) }