RemoteMediaClient GetMediaInfo for Android
This commit is contained in:
parent
d7a8bb5f90
commit
b8f8b66c00
3 changed files with 125 additions and 8 deletions
|
|
@ -9,6 +9,7 @@ import androidx.lifecycle.OnLifecycleEvent
|
||||||
import androidx.lifecycle.ProcessLifecycleOwner
|
import androidx.lifecycle.ProcessLifecycleOwner
|
||||||
import com.gianlucaparadise.flutter_cast_framework.cast.CastDialogOpener
|
import com.gianlucaparadise.flutter_cast_framework.cast.CastDialogOpener
|
||||||
import com.gianlucaparadise.flutter_cast_framework.cast.MessageCastingChannel
|
import com.gianlucaparadise.flutter_cast_framework.cast.MessageCastingChannel
|
||||||
|
import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaInfo
|
||||||
import com.gianlucaparadise.flutter_cast_framework.media.getMediaLoadRequestData
|
import com.gianlucaparadise.flutter_cast_framework.media.getMediaLoadRequestData
|
||||||
import com.google.android.gms.cast.MediaError
|
import com.google.android.gms.cast.MediaError
|
||||||
import com.google.android.gms.cast.framework.CastContext
|
import com.google.android.gms.cast.framework.CastContext
|
||||||
|
|
@ -100,7 +101,7 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
||||||
private val mSessionManagerListener = CastSessionManagerListener()
|
private val mSessionManagerListener = CastSessionManagerListener()
|
||||||
private val remoteMediaClientListener = RemoteMediaClientListener()
|
private val remoteMediaClientListener = RemoteMediaClientListener()
|
||||||
|
|
||||||
private var castApi : PlatformBridgeApis.CastHostApi? = null
|
private var castApi: PlatformBridgeApis.CastHostApi? = null
|
||||||
private var flutterApi: PlatformBridgeApis.CastFlutterApi? = null
|
private var flutterApi: PlatformBridgeApis.CastFlutterApi? = null
|
||||||
private var applicationContext: Context? = null
|
private var applicationContext: Context? = null
|
||||||
private var activity: Activity? = null
|
private var activity: Activity? = null
|
||||||
|
|
@ -171,43 +172,43 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
||||||
override fun onStatusUpdated() {
|
override fun onStatusUpdated() {
|
||||||
Log.d(TAG, "RemoteMediaClient - onStatusUpdated")
|
Log.d(TAG, "RemoteMediaClient - onStatusUpdated")
|
||||||
super.onStatusUpdated()
|
super.onStatusUpdated()
|
||||||
flutterApi?.onStatusUpdated { }
|
flutterApi?.onStatusUpdated { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMetadataUpdated() {
|
override fun onMetadataUpdated() {
|
||||||
Log.d(TAG, "RemoteMediaClient - onMetadataUpdated")
|
Log.d(TAG, "RemoteMediaClient - onMetadataUpdated")
|
||||||
super.onMetadataUpdated()
|
super.onMetadataUpdated()
|
||||||
flutterApi?.onMetadataUpdated { }
|
flutterApi?.onMetadataUpdated { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onQueueStatusUpdated() {
|
override fun onQueueStatusUpdated() {
|
||||||
Log.d(TAG, "RemoteMediaClient - onQueueStatusUpdated")
|
Log.d(TAG, "RemoteMediaClient - onQueueStatusUpdated")
|
||||||
super.onQueueStatusUpdated()
|
super.onQueueStatusUpdated()
|
||||||
flutterApi?.onQueueStatusUpdated { }
|
flutterApi?.onQueueStatusUpdated { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPreloadStatusUpdated() {
|
override fun onPreloadStatusUpdated() {
|
||||||
Log.d(TAG, "RemoteMediaClient - onPreloadStatusUpdated")
|
Log.d(TAG, "RemoteMediaClient - onPreloadStatusUpdated")
|
||||||
super.onPreloadStatusUpdated()
|
super.onPreloadStatusUpdated()
|
||||||
flutterApi?.onPreloadStatusUpdated { }
|
flutterApi?.onPreloadStatusUpdated { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSendingRemoteMediaRequest() {
|
override fun onSendingRemoteMediaRequest() {
|
||||||
Log.d(TAG, "RemoteMediaClient - onSendingRemoteMediaRequest")
|
Log.d(TAG, "RemoteMediaClient - onSendingRemoteMediaRequest")
|
||||||
super.onSendingRemoteMediaRequest()
|
super.onSendingRemoteMediaRequest()
|
||||||
flutterApi?.onSendingRemoteMediaRequest { }
|
flutterApi?.onSendingRemoteMediaRequest { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAdBreakStatusUpdated() {
|
override fun onAdBreakStatusUpdated() {
|
||||||
Log.d(TAG, "RemoteMediaClient - onAdBreakStatusUpdated")
|
Log.d(TAG, "RemoteMediaClient - onAdBreakStatusUpdated")
|
||||||
super.onAdBreakStatusUpdated()
|
super.onAdBreakStatusUpdated()
|
||||||
flutterApi?.onAdBreakStatusUpdated { }
|
flutterApi?.onAdBreakStatusUpdated { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMediaError(error: MediaError?) {
|
override fun onMediaError(error: MediaError?) {
|
||||||
Log.d(TAG, "RemoteMediaClient - onMediaError $error")
|
Log.d(TAG, "RemoteMediaClient - onMediaError $error")
|
||||||
super.onMediaError(error)
|
super.onMediaError(error)
|
||||||
flutterApi?.onMediaError { }
|
flutterApi?.onMediaError { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -235,6 +236,15 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
||||||
val mediaLoadRequest = getMediaLoadRequestData(request)
|
val mediaLoadRequest = getMediaLoadRequestData(request)
|
||||||
remoteMediaClient.load(mediaLoadRequest)
|
remoteMediaClient.load(mediaLoadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getMediaInfo(): PlatformBridgeApis.MediaInfo {
|
||||||
|
val remoteMediaClient: RemoteMediaClient = remoteMediaClient
|
||||||
|
?: return PlatformBridgeApis.MediaInfo()
|
||||||
|
|
||||||
|
val hostMediaInfo = remoteMediaClient.mediaInfo ?: return PlatformBridgeApis.MediaInfo()
|
||||||
|
|
||||||
|
return getFlutterMediaInfo(hostMediaInfo)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getOnNamespaceResult(oldSession: CastSession?, newSession: CastSession?) = PlatformBridgeApis.CastFlutterApi.Reply<MutableList<String>> { namespaces ->
|
private fun getOnNamespaceResult(oldSession: CastSession?, newSession: CastSession?) = PlatformBridgeApis.CastFlutterApi.Reply<MutableList<String>> { namespaces ->
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,107 @@
|
||||||
|
package com.gianlucaparadise.flutter_cast_framework.media
|
||||||
|
|
||||||
|
import com.gianlucaparadise.flutter_cast_framework.PlatformBridgeApis
|
||||||
|
import com.google.android.gms.cast.MediaInfo
|
||||||
|
import com.google.android.gms.cast.MediaMetadata
|
||||||
|
import com.google.android.gms.cast.MediaTrack
|
||||||
|
import com.google.android.gms.common.images.WebImage
|
||||||
|
|
||||||
|
fun getFlutterMediaInfo(mediaInfo: MediaInfo): PlatformBridgeApis.MediaInfo {
|
||||||
|
val flutterMediaMetadata = getFlutterMediaMetadata(mediaInfo.metadata)
|
||||||
|
val flutterMediaTracks = getFlutterMediaTracks(mediaInfo.mediaTracks)
|
||||||
|
val flutterStreamType = getFlutterStreamType(mediaInfo.streamType)
|
||||||
|
|
||||||
|
return PlatformBridgeApis.MediaInfo().apply {
|
||||||
|
contentId = mediaInfo.contentId
|
||||||
|
contentType = mediaInfo.contentType
|
||||||
|
customDataAsJson = mediaInfo.customData?.toString()
|
||||||
|
mediaMetadata = flutterMediaMetadata
|
||||||
|
mediaTracks = flutterMediaTracks
|
||||||
|
streamDuration = mediaInfo.streamDuration
|
||||||
|
streamType = flutterStreamType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterStreamType(streamType: Int): PlatformBridgeApis.StreamType {
|
||||||
|
return when (streamType) {
|
||||||
|
-1 -> PlatformBridgeApis.StreamType.invalid
|
||||||
|
0 -> PlatformBridgeApis.StreamType.none
|
||||||
|
1 -> PlatformBridgeApis.StreamType.buffered
|
||||||
|
2 -> PlatformBridgeApis.StreamType.live
|
||||||
|
else -> PlatformBridgeApis.StreamType.invalid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterMediaTracks(mediaTracks: List<MediaTrack>): List<PlatformBridgeApis.MediaTrack> {
|
||||||
|
return mediaTracks.map {
|
||||||
|
getFlutterMediaTrack(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterMediaTrack(mediaTrack: MediaTrack): PlatformBridgeApis.MediaTrack {
|
||||||
|
val flutterSubtype = getFlutterSubtype(mediaTrack.subtype)
|
||||||
|
val flutterType = getFlutterType(mediaTrack.type)
|
||||||
|
|
||||||
|
return PlatformBridgeApis.MediaTrack().apply {
|
||||||
|
contentId = mediaTrack.contentId
|
||||||
|
id = mediaTrack.id
|
||||||
|
language = mediaTrack.language
|
||||||
|
name = mediaTrack.name
|
||||||
|
trackSubtype = flutterSubtype
|
||||||
|
trackType = flutterType
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterType(type: Int): PlatformBridgeApis.TrackType {
|
||||||
|
return when (type) {
|
||||||
|
0 -> PlatformBridgeApis.TrackType.unknown
|
||||||
|
1 -> PlatformBridgeApis.TrackType.text
|
||||||
|
2 -> PlatformBridgeApis.TrackType.audio
|
||||||
|
3 -> PlatformBridgeApis.TrackType.video
|
||||||
|
else -> PlatformBridgeApis.TrackType.unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterSubtype(subtype: Int): PlatformBridgeApis.TrackSubtype {
|
||||||
|
return when (subtype) {
|
||||||
|
-1 -> PlatformBridgeApis.TrackSubtype.unknown
|
||||||
|
0 -> PlatformBridgeApis.TrackSubtype.none
|
||||||
|
1 -> PlatformBridgeApis.TrackSubtype.subtitles
|
||||||
|
2 -> PlatformBridgeApis.TrackSubtype.captions
|
||||||
|
3 -> PlatformBridgeApis.TrackSubtype.descriptions
|
||||||
|
4 -> PlatformBridgeApis.TrackSubtype.chapters
|
||||||
|
5 -> PlatformBridgeApis.TrackSubtype.metadata
|
||||||
|
else -> PlatformBridgeApis.TrackSubtype.unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterMediaMetadata(mediaMetadata: MediaMetadata): PlatformBridgeApis.MediaMetadata {
|
||||||
|
val flutterMediaType = getFlutterMediaType(mediaMetadata.mediaType)
|
||||||
|
val flutterWebImages = getFlutterWebImages(mediaMetadata.images)
|
||||||
|
|
||||||
|
return PlatformBridgeApis.MediaMetadata().apply {
|
||||||
|
mediaType = flutterMediaType
|
||||||
|
webImages = flutterWebImages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterWebImages(images: List<WebImage>): List<PlatformBridgeApis.WebImage> {
|
||||||
|
return images.map {
|
||||||
|
PlatformBridgeApis.WebImage().apply {
|
||||||
|
url = it.url.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFlutterMediaType(mediaType: Int): PlatformBridgeApis.MediaType {
|
||||||
|
return when (mediaType) {
|
||||||
|
0 -> PlatformBridgeApis.MediaType.generic
|
||||||
|
1 -> PlatformBridgeApis.MediaType.movie
|
||||||
|
2 -> PlatformBridgeApis.MediaType.tvShow
|
||||||
|
3 -> PlatformBridgeApis.MediaType.musicTrack
|
||||||
|
4 -> PlatformBridgeApis.MediaType.photo
|
||||||
|
5 -> PlatformBridgeApis.MediaType.audiobookChapter
|
||||||
|
100 -> PlatformBridgeApis.MediaType.user
|
||||||
|
else -> PlatformBridgeApis.MediaType.generic
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue