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