From 9c8327b6abbe51f5926c6e88393bfa4f562087a6 Mon Sep 17 00:00:00 2001 From: gianlucaparadise Date: Fri, 10 Dec 2021 08:15:57 +0100 Subject: [PATCH] RemoteMediaClient tracksChooser android --- android/build.gradle | 3 +++ .../FlutterCastFrameworkPlugin.kt | 20 ++++++++++++++++++- .../MainActivity.kt | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index d67becc..06be7fc 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -49,4 +49,7 @@ dependencies { // Lifecycle implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" + + // To open TracksChooserDialogFragment + implementation "androidx.activity:activity-ktx:1.3.1" } 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 ce85895..46c32db 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 @@ -3,6 +3,7 @@ package com.gianlucaparadise.flutter_cast_framework import android.app.Activity import android.content.Context import android.util.Log +import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.OnLifecycleEvent @@ -18,6 +19,7 @@ import com.google.android.gms.cast.framework.CastSession import com.google.android.gms.cast.framework.SessionManager import com.google.android.gms.cast.framework.SessionManagerListener import com.google.android.gms.cast.framework.media.RemoteMediaClient +import com.google.android.gms.cast.framework.media.TracksChooserDialogFragment import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.activity.ActivityAware import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding @@ -250,7 +252,7 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa override fun getMediaInfo(): PlatformBridgeApis.MediaInfo { val remoteMediaClient: RemoteMediaClient = remoteMediaClient - ?: throw IllegalStateException("Missing cast session") + ?: throw IllegalStateException("Missing cast session") val hostMediaInfo = remoteMediaClient.mediaInfo ?: return PlatformBridgeApis.MediaInfo() @@ -272,6 +274,22 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa remoteMediaClient.stop() } + override fun showTracksChooserDialog() { + if (activity !is FragmentActivity) { + Log.e(TAG, "Error: no_fragment_activity, FlutterCastFramework requires activity to be a FragmentActivity.") + return + } + + val activity = activity as? FragmentActivity + if (activity == null) { + Log.d(TAG, "showTracksChooserDialog - missing context") + return + } + + TracksChooserDialogFragment.newInstance() + .show(activity.supportFragmentManager, "FlutterCastFrameworkTracksChooserDialog") + } + override fun setMute(muted: Boolean?) { if (muted == null) return val castSession = mCastSession ?: return diff --git a/example/android/app/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework_example/MainActivity.kt b/example/android/app/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework_example/MainActivity.kt index 54413de..6d245c9 100644 --- a/example/android/app/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework_example/MainActivity.kt +++ b/example/android/app/src/main/kotlin/com/gianlucaparadise/flutter_cast_framework_example/MainActivity.kt @@ -1,6 +1,6 @@ package com.gianlucaparadise.flutter_cast_framework_example -import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.android.FlutterFragmentActivity -class MainActivity: FlutterActivity() { +class MainActivity: FlutterFragmentActivity() { }