Pigeon 3.x: Fix Android and iOS
This commit is contained in:
parent
472174f3cc
commit
6e160225be
3 changed files with 62 additions and 40 deletions
|
|
@ -312,20 +312,24 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
override fun itemsUpdatedAtIndexes(indexes: IntArray?) {
|
||||
Log.d(TAG, "MediaQueue - itemsUpdatedAtIndexes")
|
||||
super.itemsUpdatedAtIndexes(indexes)
|
||||
val longIndexes = indexes?.map { it.toLong() }
|
||||
if (indexes == null) return
|
||||
|
||||
val longIndexes = indexes.map { it.toLong() }
|
||||
flutterApi?.itemsUpdatedAtIndexes(longIndexes) { }
|
||||
}
|
||||
|
||||
override fun itemsRemovedAtIndexes(indexes: IntArray?) {
|
||||
Log.d(TAG, "MediaQueue itemsRemovedAtIndexeseWillChange")
|
||||
super.itemsRemovedAtIndexes(indexes)
|
||||
val longIndexes = indexes?.map { it.toLong() }
|
||||
if (indexes == null) return
|
||||
|
||||
val longIndexes = indexes.map { it.toLong() }
|
||||
flutterApi?.itemsRemovedAtIndexes(longIndexes) { }
|
||||
}
|
||||
}
|
||||
|
||||
private inner class MyApi : PlatformBridgeApis.CastHostApi {
|
||||
override fun sendMessage(message: PlatformBridgeApis.CastMessage?) {
|
||||
override fun sendMessage(message: PlatformBridgeApis.CastMessage) {
|
||||
mMessageCastingChannel?.sendMessage(mCastSession, message)
|
||||
}
|
||||
|
||||
|
|
@ -340,9 +344,7 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
CastDialogOpener.showCastDialog(context, activity)
|
||||
}
|
||||
|
||||
override fun loadMediaLoadRequestData(request: PlatformBridgeApis.MediaLoadRequestData?) {
|
||||
if (request == null) return
|
||||
|
||||
override fun loadMediaLoadRequestData(request: PlatformBridgeApis.MediaLoadRequestData) {
|
||||
val remoteMediaClient: RemoteMediaClient = remoteMediaClient ?: return
|
||||
|
||||
val mediaLoadRequest = getMediaLoadRequestData(request)
|
||||
|
|
@ -392,9 +394,7 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
remoteMediaClient.skipAd()
|
||||
}
|
||||
|
||||
override fun queueAppendItem(item: PlatformBridgeApis.MediaQueueItem?) {
|
||||
if (item == null) return
|
||||
|
||||
override fun queueAppendItem(item: PlatformBridgeApis.MediaQueueItem) {
|
||||
val remoteMediaClient: RemoteMediaClient = remoteMediaClient ?: return
|
||||
|
||||
val mediaQueueItem = getMediaQueueItem(item)
|
||||
|
|
@ -415,15 +415,14 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
return mediaQueue?.itemCount?.toLong() ?: -1
|
||||
}
|
||||
|
||||
override fun getQueueItemAtIndex(index: Long?): PlatformBridgeApis.MediaQueueItem {
|
||||
if (index == null || index < 0) return getFlutterMediaQueueItem(null)
|
||||
override fun getQueueItemAtIndex(index: Long): PlatformBridgeApis.MediaQueueItem {
|
||||
if (index < 0) return getFlutterMediaQueueItem(null)
|
||||
|
||||
val mediaQueueItem = mediaQueue?.getItemAtIndex(index.toInt(), true)
|
||||
return getFlutterMediaQueueItem(mediaQueueItem)
|
||||
}
|
||||
|
||||
override fun setMute(muted: Boolean?) {
|
||||
if (muted == null) return
|
||||
override fun setMute(muted: Boolean) {
|
||||
val castSession = mCastSession ?: return
|
||||
castSession.isMute = muted
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,29 +9,40 @@ import org.json.JSONObject
|
|||
fun getMediaLoadRequestData(request: PlatformBridgeApis.MediaLoadRequestData): MediaLoadRequestData {
|
||||
val mediaInfo = getMediaInfo(request.mediaInfo)
|
||||
|
||||
return MediaLoadRequestData.Builder()
|
||||
val builder = MediaLoadRequestData.Builder()
|
||||
.setMediaInfo(mediaInfo)
|
||||
.setAutoplay(request.shouldAutoplay)
|
||||
.setCurrentTime(request.currentTime)
|
||||
.build()
|
||||
|
||||
request.currentTime?.let { builder.setCurrentTime(it) }
|
||||
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
fun getMediaInfo(mediaInfo: PlatformBridgeApis.MediaInfo?): MediaInfo? {
|
||||
if (mediaInfo == null) return null
|
||||
|
||||
val streamType = getStreamType(mediaInfo.streamType)
|
||||
val metadata = getMediaMetadata(mediaInfo.mediaMetadata)
|
||||
val mediaTracks = mediaInfo.mediaTracks.map { getMediaTrack(it) }
|
||||
val streamType = getStreamType(mediaInfo.streamType
|
||||
?: throw IllegalArgumentException("streamType is a required field"))
|
||||
val customData = JSONObject(mediaInfo.customDataAsJson ?: "{}")
|
||||
|
||||
return MediaInfo.Builder(mediaInfo.contentId)
|
||||
val builder = MediaInfo.Builder(mediaInfo.contentId)
|
||||
.setStreamType(streamType)
|
||||
.setContentType(mediaInfo.contentType)
|
||||
.setMetadata(metadata)
|
||||
.setMediaTracks(mediaTracks)
|
||||
.setStreamDuration(mediaInfo.streamDuration)
|
||||
.setStreamDuration(mediaInfo.streamDuration
|
||||
?: throw IllegalArgumentException("streamDuration is a required field"))
|
||||
.setCustomData(customData)
|
||||
.build()
|
||||
|
||||
mediaInfo.mediaMetadata?.let {
|
||||
val metadata = getMediaMetadata(it)
|
||||
builder.setMetadata(metadata)
|
||||
}
|
||||
|
||||
mediaInfo.mediaTracks?.let {
|
||||
val mediaTracks = it.map { t -> getMediaTrack(t) }
|
||||
builder.setMediaTracks(mediaTracks)
|
||||
}
|
||||
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
fun getStreamType(streamType: PlatformBridgeApis.StreamType): Int {
|
||||
|
|
@ -44,15 +55,18 @@ fun getStreamType(streamType: PlatformBridgeApis.StreamType): Int {
|
|||
}
|
||||
|
||||
fun getMediaMetadata(mediaMetadata: PlatformBridgeApis.MediaMetadata): MediaMetadata {
|
||||
val mediaType = getMediaType(mediaMetadata.mediaType)
|
||||
val result = MediaMetadata(mediaType)
|
||||
val mediaType = mediaMetadata.mediaType
|
||||
val result = if (mediaType == null) MediaMetadata() else {
|
||||
val hostMediaType = getMediaType(mediaType)
|
||||
MediaMetadata(hostMediaType)
|
||||
}
|
||||
|
||||
// mediaMetadata.strings.forEach {
|
||||
// val key = getMediaMetadataKey(it.key)
|
||||
// result.putString(key, it.value)
|
||||
// }
|
||||
|
||||
mediaMetadata.webImages.forEach {
|
||||
mediaMetadata.webImages?.forEach {
|
||||
val uri = Uri.parse(it.url)
|
||||
val webImage = WebImage(uri)
|
||||
result.addImage(webImage)
|
||||
|
|
@ -107,14 +121,21 @@ fun getMediaType(mediaType: PlatformBridgeApis.MediaType): Int {
|
|||
//}
|
||||
|
||||
fun getMediaTrack(mediaTrack: PlatformBridgeApis.MediaTrack): MediaTrack {
|
||||
val trackType = getTrackType(mediaTrack.trackType)
|
||||
val trackSubtype = getTrackSubtype(mediaTrack.trackSubtype)
|
||||
val trackId = mediaTrack.id
|
||||
?: throw IllegalArgumentException("mediaTrack ID is a required field")
|
||||
val trackType = getTrackType(mediaTrack.trackType
|
||||
?: throw IllegalArgumentException("trackType is a required field"))
|
||||
|
||||
return MediaTrack.Builder(mediaTrack.id, trackType)
|
||||
val builder = MediaTrack.Builder(trackId, trackType)
|
||||
.setName(mediaTrack.name)
|
||||
.setSubtype(trackSubtype)
|
||||
.setContentId(mediaTrack.contentId)
|
||||
.build()
|
||||
|
||||
mediaTrack.trackSubtype?.let {
|
||||
val trackSubtype = getTrackSubtype(it)
|
||||
builder.setSubtype(trackSubtype)
|
||||
}
|
||||
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
fun getTrackType(trackType: PlatformBridgeApis.TrackType): Int {
|
||||
|
|
@ -143,8 +164,10 @@ fun getMediaQueueItem(item: PlatformBridgeApis.MediaQueueItem?): MediaQueueItem?
|
|||
|
||||
val mediaInfo = getMediaInfo(item.media)
|
||||
|
||||
return MediaQueueItem.Builder(mediaInfo)
|
||||
.setAutoplay(item.autoplay)
|
||||
.setPreloadTime(item.preloadTime)
|
||||
.build()
|
||||
val builder = MediaQueueItem.Builder(mediaInfo)
|
||||
|
||||
item.autoplay?.let { builder.setAutoplay(it) }
|
||||
item.preloadTime?.let { builder.setPreloadTime(it) }
|
||||
|
||||
return builder.build()
|
||||
}
|
||||
|
|
@ -39,12 +39,12 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio
|
|||
remoteMediaClient = newValue?.remoteMediaClient
|
||||
|
||||
flutterApi.getSessionMessageNamespaces { (namespaces, err) in
|
||||
debugPrint("Updating castSession - getSessionMessageNamespaces success - param: \(namespaces.joined(separator: ", "))")
|
||||
debugPrint("Updating castSession - getSessionMessageNamespaces success - param: \(String(describing: namespaces?.joined(separator: ", ")))")
|
||||
if (oldSession == nil && newSession == nil) {
|
||||
return // nothing to do here
|
||||
}
|
||||
|
||||
if (namespaces.count == 0) {
|
||||
if (namespaces == nil || namespaces?.count == 0) {
|
||||
return // nothing to do here
|
||||
}
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio
|
|||
}
|
||||
}
|
||||
|
||||
namespaces.forEach({ (namespace) in
|
||||
namespaces?.forEach({ (namespace) in
|
||||
let castingChannel = MessageCastingChannel.init(namespace: namespace, flutterApi: self.flutterApi)
|
||||
self.castingChannels[namespace] = castingChannel
|
||||
newSession?.add(castingChannel)
|
||||
|
|
@ -372,7 +372,7 @@ public class SwiftFlutterCastFrameworkPlugin: NSObject, FlutterPlugin, GCKSessio
|
|||
return NSNumber(value: itemCount)
|
||||
}
|
||||
|
||||
public func getQueueItemAtIndexIndex(_ index: NSNumber, error: AutoreleasingUnsafeMutablePointer<FlutterError?>) -> MediaQueueItem? {
|
||||
public func getQueueItem(atIndexIndex index: NSNumber, error: AutoreleasingUnsafeMutablePointer<FlutterError?>) -> MediaQueueItem? {
|
||||
if (index.intValue < 0) {
|
||||
return getFlutterMediaQueueItem(item: nil)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue