diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index b09b2a15cbdc..00f064964371 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.2+6 + +* Fixes bug where the ad would play when the app returned to foreground during content playback. + ## 0.1.2+5 * Adds internal wrapper for remaining methods of the Android native `AdsManager`. diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index 293315e7a468..d2203267c479 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.1.2+5" + const val pluginVersion = "0.1.2+6" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt index 65dd85d991a2..3ca62b9f75ef 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v21.3.0), do not edit directly. +// Autogenerated from Pigeon (v22.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon @file:Suppress("UNCHECKED_CAST", "ArrayInDataClass", "SyntheticAccessor") @@ -264,7 +264,7 @@ private class InteractiveMediaAdsLibraryPigeonInstanceManagerApi( ) { companion object { /** The codec used by InteractiveMediaAdsLibraryPigeonInstanceManagerApi. */ - val codec: MessageCodec by lazy { StandardMessageCodec() } + val codec: MessageCodec by lazy { InteractiveMediaAdsLibraryPigeonCodec() } /** * Sets up an instance of `InteractiveMediaAdsLibraryPigeonInstanceManagerApi` to handle @@ -283,7 +283,7 @@ private class InteractiveMediaAdsLibraryPigeonInstanceManagerApi( if (instanceManager != null) { channel.setMessageHandler { message, reply -> val args = message as List - val identifierArg = args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val identifierArg = args[0] as Long val wrapped: List = try { instanceManager.remove(identifierArg) @@ -348,8 +348,8 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( /** Whether APIs should ignore calling to Dart. */ public var ignoreCallsToDart = false val instanceManager: InteractiveMediaAdsLibraryPigeonInstanceManager - private var _codec: StandardMessageCodec? = null - val codec: StandardMessageCodec + private var _codec: MessageCodec? = null + val codec: MessageCodec get() { if (_codec == null) { _codec = InteractiveMediaAdsLibraryPigeonProxyApiBaseCodec(this) @@ -588,8 +588,7 @@ private class InteractiveMediaAdsLibraryPigeonProxyApiBaseCodec( override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { - return registrar.instanceManager.getInstance( - readValue(buffer).let { if (it is Int) it.toLong() else it as Long }) + return registrar.instanceManager.getInstance(readValue(buffer) as Long) } else -> super.readValueOfType(type, buffer) } @@ -858,13 +857,13 @@ private open class InteractiveMediaAdsLibraryPigeonCodec : StandardMessageCodec( override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 129.toByte() -> { - return (readValue(buffer) as Int?)?.let { AdErrorCode.ofRaw(it) } + return (readValue(buffer) as Long?)?.let { AdErrorCode.ofRaw(it.toInt()) } } 130.toByte() -> { - return (readValue(buffer) as Int?)?.let { AdErrorType.ofRaw(it) } + return (readValue(buffer) as Long?)?.let { AdErrorType.ofRaw(it.toInt()) } } 131.toByte() -> { - return (readValue(buffer) as Int?)?.let { AdEventType.ofRaw(it) } + return (readValue(buffer) as Long?)?.let { AdEventType.ofRaw(it.toInt()) } } else -> super.readValueOfType(type, buffer) } @@ -1019,7 +1018,7 @@ abstract class PigeonApiAdsLoader( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoader?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -1335,7 +1334,7 @@ abstract class PigeonApiAdsRequest( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsRequest?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -1510,7 +1509,7 @@ abstract class PigeonApiAdsManager( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsManager?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -1721,7 +1720,7 @@ abstract class PigeonApiBaseManager( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiBaseManager?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -1946,7 +1945,7 @@ abstract class PigeonApiImaSdkFactory( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -1956,8 +1955,7 @@ abstract class PigeonApiImaSdkFactory( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -2168,7 +2166,7 @@ abstract class PigeonApiVideoProgressUpdate( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -2178,11 +2176,9 @@ abstract class PigeonApiVideoProgressUpdate( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } - val currentTimeMsArg = - args[1].let { num -> if (num is Int) num.toLong() else num as Long } - val durationMsArg = args[2].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long + val currentTimeMsArg = args[1] as Long + val durationMsArg = args[2] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -2207,8 +2203,7 @@ abstract class PigeonApiVideoProgressUpdate( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -2421,7 +2416,7 @@ abstract class PigeonApiFrameLayout( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -2431,8 +2426,7 @@ abstract class PigeonApiFrameLayout( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -2505,7 +2499,7 @@ abstract class PigeonApiViewGroup( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -2586,7 +2580,7 @@ abstract class PigeonApiVideoView( abstract fun pigeon_defaultConstructor(): android.widget.VideoView /** Sets the URI of the video. */ - abstract fun setVideoUri(pigeon_instance: android.widget.VideoView, uri: String) + abstract fun setVideoUri(pigeon_instance: android.widget.VideoView, uri: String?) /** * The current position of the playing video. @@ -2598,7 +2592,7 @@ abstract class PigeonApiVideoView( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoView?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -2608,8 +2602,7 @@ abstract class PigeonApiVideoView( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -2634,7 +2627,7 @@ abstract class PigeonApiVideoView( channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.widget.VideoView - val uriArg = args[1] as String + val uriArg = args[1] as String? val wrapped: List = try { api.setVideoUri(pigeon_instanceArg, uriArg) @@ -2856,7 +2849,7 @@ abstract class PigeonApiMediaPlayer( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -2889,7 +2882,7 @@ abstract class PigeonApiMediaPlayer( channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.media.MediaPlayer - val mSecArg = args[1].let { num -> if (num is Int) num.toLong() else num as Long } + val mSecArg = args[1] as Long val wrapped: List = try { api.seekTo(pigeon_instanceArg, mSecArg) @@ -3095,7 +3088,7 @@ abstract class PigeonApiVideoAdPlayerCallback( binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayerCallback? ) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -3363,7 +3356,7 @@ abstract class PigeonApiVideoAdPlayerCallback( com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val percentageArg = args[2].let { num -> if (num is Int) num.toLong() else num as Long } + val percentageArg = args[2] as Long val wrapped: List = try { api.onVolumeChanged(pigeon_instanceArg, adMediaInfoArg, percentageArg) @@ -3446,7 +3439,7 @@ abstract class PigeonApiVideoAdPlayer( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -3456,8 +3449,7 @@ abstract class PigeonApiVideoAdPlayer( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -3483,7 +3475,7 @@ abstract class PigeonApiVideoAdPlayer( val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - val valueArg = args[1].let { num -> if (num is Int) num.toLong() else num as Long } + val valueArg = args[1] as Long val wrapped: List = try { api.setVolume(pigeon_instanceArg, valueArg) @@ -3770,7 +3762,7 @@ abstract class PigeonApiAdsLoadedListener( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoadedListener?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -3780,8 +3772,7 @@ abstract class PigeonApiAdsLoadedListener( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -3865,7 +3856,7 @@ abstract class PigeonApiAdErrorListener( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdErrorListener?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -3875,8 +3866,7 @@ abstract class PigeonApiAdErrorListener( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( @@ -3959,7 +3949,7 @@ abstract class PigeonApiAdEventListener( companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdEventListener?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() run { val channel = BasicMessageChannel( @@ -3969,8 +3959,7 @@ abstract class PigeonApiAdEventListener( if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = - args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val pigeon_identifierArg = args[0] as Long val wrapped: List = try { api.pigeonRegistrar.instanceManager.addDartCreatedInstance( diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index 983f97e7f775..a9634cb44f4f 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -28,8 +28,8 @@ class VideoViewProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : return instance } - override fun setVideoUri(pigeon_instance: VideoView, uri: String) { - pigeon_instance.setVideoURI(Uri.parse(uri)) + override fun setVideoUri(pigeon_instance: VideoView, uri: String?) { + pigeon_instance.setVideoURI(if (uri != null) Uri.parse(uri) else null) } override fun getCurrentPosition(pigeon_instance: VideoView): Long { diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index 5b2b5636be31..e22cdf10a14a 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.1.2+5" + static let pluginVersion = "0.1.2+6" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 2c5f2c8eb809..0d057bfa12a0 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -270,6 +270,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { container._stopAdProgressTracking(); + container._videoView.setVideoUri(null); container._clearMediaPlayer(); container._loadedAdMediaInfo = null; container._adDuration = null; diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart index 4a65830d91b2..271ced40aada 100644 --- a/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v21.3.0), do not edit directly. +// Autogenerated from Pigeon (v22.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers @@ -334,8 +334,7 @@ class _PigeonInternalInstanceManagerApi { final BinaryMessenger? pigeonVar_binaryMessenger; - static const MessageCodec pigeonChannelCodec = - StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); static void setUpMessageHandlers({ bool pigeon_clearHandlers = false, @@ -644,7 +643,10 @@ class _PigeonCodec extends StandardMessageCodec { const _PigeonCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { - if (value is AdErrorCode) { + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is AdErrorCode) { buffer.putUint8(129); writeValue(buffer, value.index); } else if (value is AdErrorType) { @@ -3181,7 +3183,7 @@ class VideoView extends View { } /// Sets the URI of the video. - Future setVideoUri(String uri) async { + Future setVideoUri(String? uri) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecVideoView; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart index 9bc3450514a3..be495a8cefce 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -562,7 +562,7 @@ abstract class VideoView extends View { late final void Function(MediaPlayer player, int what, int extra) onError; /// Sets the URI of the video. - void setVideoUri(String uri); + void setVideoUri(String? uri); /// The current position of the playing video. /// diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 555bbb804e8e..749ff8ddaa92 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,7 +2,7 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.1.2+5 # This must match the version in +version: 0.1.2+6 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.dart index 83694918bf3f..4071d041ac3f 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.dart @@ -514,5 +514,50 @@ void main() { verify(mockVideoView.setVideoUri(videoUrl)); }); + + test('stop ad sets video uri to null', () async { + late final void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ) stopAdCallback; + + final MockVideoView mockVideoView = MockVideoView(); + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + dynamic onError, + dynamic onPrepared, + dynamic onCompletion, + }) { + return mockVideoView; + }, + createAdDisplayContainerImaSdkFactory: (_, __) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required dynamic addCallback, + required dynamic loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required void Function(ima.VideoAdPlayer, ima.AdMediaInfo) stopAd, + }) { + stopAdCallback = stopAd; + return MockVideoAdPlayer(); + }, + ); + + AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (_) {}, + imaProxy: imaProxy, + ), + ); + + stopAdCallback(MockVideoAdPlayer(), MockAdMediaInfo()); + + verify(mockVideoView.setVideoUri(null)); + }); }); }