From 57f2507c1ba2bf2eb0fb6bb0b40cb81051f3b604 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 15 Jul 2025 13:08:41 -0400 Subject: [PATCH 01/11] update pigeons --- .../interactive_media_ads_android.dart | 58 ++++++++++++- .../pigeons/interactive_media_ads_ios.dart | 84 +++++++++++++++++++ 2 files changed, 141 insertions(+), 1 deletion(-) 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 e87b292f8d0b..86d190563f4c 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -319,7 +319,7 @@ abstract class AdError { /// An object containing the data used to request ads from the server. /// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsRequest. +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/kotlin/com/google/ads/interactivemedia/v3/api/AdsRequest. @ProxyApi( kotlinOptions: KotlinProxyApiOptions( fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', @@ -332,6 +332,62 @@ abstract class AdsRequest { /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks /// based on content progress (cue points). void setContentProgressProvider(ContentProgressProvider provider); + + /// Notifies the SDK whether the player intends to start the content and ad in + /// response to a user action or whether it will be automatically played. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + void setAdWillAutoPlay(bool willAutoPlay); + + /// Notifies the SDK whether the player intends to start the content and ad + /// while muted. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + void setAdWillPlayMuted(bool willPlayMuted); + + /// Specifies a VAST, VMAP, or ad rules response to be used instead of making + /// a request through an ad tag URL. + void setAdsResponse(String? cannedAdResponse); + + /// Specifies the duration of the content in seconds to be shown. + /// + /// This optional parameter is used by AdX requests. It is recommended for AdX + /// users. + void setContentDuration(double duration); + + /// Specifies the keywords used to describe the content to be shown. + /// + /// This optional parameter is used by AdX requests and is recommended for AdX + /// users. + void setContentKeywords(List? keywords); + + /// Specifies the title of the content to be shown. + /// + /// Used in AdX requests. This optional parameter is used by AdX requests and + /// is recommended for AdX users. + void setContentTitle(String? title); + + /// Notifies the SDK whether the player intends to continuously play the + /// content videos one after another similar to TV broadcast. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + void setContinuousPlayback(bool continuousPlayback); + + /// Specifies the maximum amount of time to wait in seconds, after calling + /// requestAds, before requesting the ad tag URL. + /// + /// This can be used to stagger requests during a live-stream event, in order + /// to mitigate spikes in the number of requests. + void setLiveStreamPrefetchSeconds(double prefetchTime); + + /// Specifies the VAST load timeout in milliseconds for a single wrapper. + /// + /// This parameter is optional and will override the default timeout, + /// currently set to 5000ms. + void setVastLoadTimeout(double timeout); } /// Defines an interface to allow SDK to track progress of the content video. diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart index e1cd0d6a8c36..ebf2bac37e79 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_ios.dart @@ -481,11 +481,95 @@ abstract class IMASettings extends NSObject { abstract class IMAAdsRequest extends NSObject { /// Initializes an ads request instance with the given ad tag URL and ad /// display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. IMAAdsRequest( String adTagUrl, IMAAdDisplayContainer adDisplayContainer, IMAContentPlayhead? contentPlayhead, ); + + /// Initializes an ads request instance with the given canned ads response and + /// ad display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer`` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. + IMAAdsRequest.withAdsResponse( + String adsResponse, + IMAAdDisplayContainer adDisplayContainer, + IMAContentPlayhead? contentPlayhead, + ); + + /// Specifies the full URL to use for ads loading from an ad server. + /// + /// Required for any adsRequest. + String? getAdTagUrl(); + + /// Specifies a VAST, VMAP, or ad rules response to be used instead of making + /// a request through an ad tag URL. + String? getAdsResponse(); + + /// The ad display container. + IMAAdDisplayContainer getAdDisplayContainer(); + + /// Specifies whether the player intends to start the content and ad in + /// response to a user action or whether they will be automatically played. + /// + /// Changing this setting will have no impact on ad playback. + void setAdWillAutoPlay(bool adWillAutoPlay); + + /// Specifies whether the player intends to start the content and ad with no + /// volume. + /// + /// Changing this setting will have no impact on ad playback. + void setAdWillPlayMuted(bool adWillPlayMuted); + + /// Specifies whether the player intends to continuously play the content + /// videos one after another similar to TV broadcast. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + void setContinuousPlayback(bool continuousPlayback); + + /// Specifies the duration of the content in seconds to be shown. + /// + /// Used in AdX requests. This parameter is optional. + void setContentDuration(double duration); + + /// Specifies the keywords used to describe the content to be shown. + /// + /// Used in AdX requests. This parameter is optional. + void setContentKeywords(List? keywords); + + /// Specifies the title of the content to be shown. + /// + /// Used in AdX requests. This parameter is optional. + void setContentTitle(String? title); + + /// Specifies the universal link to the content’s screen. + /// + /// If provided, this parameter is passed to the OM SDK. See + /// [Apple documentation](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content) + /// for more information. + void setContentURL(String? contentURL); + + /// Specifies the VAST load timeout in milliseconds for the initial request + /// and any subsequent wrappers. + /// + /// This parameter is optional and will override the default timeout. + void setVastLoadTimeout(double timeout); + + /// Specifies the maximum amount of time to wait in seconds, after calling + /// requestAds, before requesting the ad tag URL. + /// + /// This can be used to stagger requests during a live-stream event, in order + /// to mitigate spikes in the number of requests. + void setLiveStreamPrefetchSeconds(double seconds); } /// Delegate object that receives state change callbacks from `IMAAdsLoader`. From 9d007dfd29cd810fba55b79c3f25d788e7e4ede7 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:01:27 -0400 Subject: [PATCH 02/11] regen --- .../InteractiveMediaAdsLibrary.g.kt | 317 ++++- .../InteractiveMediaAdsLibrary.g.swift | 335 +++++- .../src/android/interactive_media_ads.g.dart | 681 ++++++++++- .../lib/src/ios/interactive_media_ads.g.dart | 1046 ++++++++++++++++- packages/interactive_media_ads/pubspec.yaml | 2 +- 5 files changed, 2309 insertions(+), 72 deletions(-) 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 eaf4a77c1c77..acbd0c3a57a3 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 (v25.5.0), do not edit directly. +// Autogenerated from Pigeon (v26.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon @file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") @@ -1473,7 +1473,7 @@ abstract class PigeonApiAdError( * An object containing the data used to request ads from the server. * * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsRequest. + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/kotlin/com/google/ads/interactivemedia/v3/api/AdsRequest. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsRequest( @@ -1494,6 +1494,103 @@ abstract class PigeonApiAdsRequest( provider: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider ) + /** + * Notifies the SDK whether the player intends to start the content and ad in response to a user + * action or whether it will be automatically played. + * + * Not calling this function leaves the setting as unknown. Note: Changing this setting will have + * no impact on ad playback. + */ + abstract fun setAdWillAutoPlay( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + willAutoPlay: Boolean + ) + + /** + * Notifies the SDK whether the player intends to start the content and ad while muted. + * + * Not calling this function leaves the setting as unknown. Note: Changing this setting will have + * no impact on ad playback. + */ + abstract fun setAdWillPlayMuted( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + willPlayMuted: Boolean + ) + + /** + * Specifies a VAST, VMAP, or ad rules response to be used instead of making a request through an + * ad tag URL. + */ + abstract fun setAdsResponse( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + cannedAdResponse: String? + ) + + /** + * Specifies the duration of the content in seconds to be shown. + * + * This optional parameter is used by AdX requests. It is recommended for AdX users. + */ + abstract fun setContentDuration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + duration: Double + ) + + /** + * Specifies the keywords used to describe the content to be shown. + * + * This optional parameter is used by AdX requests and is recommended for AdX users. + */ + abstract fun setContentKeywords( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + keywords: List? + ) + + /** + * Specifies the title of the content to be shown. + * + * Used in AdX requests. This optional parameter is used by AdX requests and is recommended for + * AdX users. + */ + abstract fun setContentTitle( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + title: String? + ) + + /** + * Notifies the SDK whether the player intends to continuously play the content videos one after + * another similar to TV broadcast. + * + * Not calling this function leaves the setting as unknown. Note: Changing this setting will have + * no impact on ad playback. + */ + abstract fun setContinuousPlayback( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + continuousPlayback: Boolean + ) + + /** + * Specifies the maximum amount of time to wait in seconds, after calling requestAds, before + * requesting the ad tag URL. + * + * This can be used to stagger requests during a live-stream event, in order to mitigate spikes in + * the number of requests. + */ + abstract fun setLiveStreamPrefetchSeconds( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + prefetchTime: Double + ) + + /** + * Specifies the VAST load timeout in milliseconds for a single wrapper. + * + * This parameter is optional and will override the default timeout, currently set to 5000ms. + */ + abstract fun setVastLoadTimeout( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + timeout: Double + ) + companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsRequest?) { @@ -1547,6 +1644,222 @@ abstract class PigeonApiAdsRequest( channel.setMessageHandler(null) } } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdWillAutoPlay", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val willAutoPlayArg = args[1] as Boolean + val wrapped: List = + try { + api.setAdWillAutoPlay(pigeon_instanceArg, willAutoPlayArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdWillPlayMuted", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val willPlayMutedArg = args[1] as Boolean + val wrapped: List = + try { + api.setAdWillPlayMuted(pigeon_instanceArg, willPlayMutedArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdsResponse", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val cannedAdResponseArg = args[1] as String? + val wrapped: List = + try { + api.setAdsResponse(pigeon_instanceArg, cannedAdResponseArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentDuration", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val durationArg = args[1] as Double + val wrapped: List = + try { + api.setContentDuration(pigeon_instanceArg, durationArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentKeywords", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val keywordsArg = args[1] as List? + val wrapped: List = + try { + api.setContentKeywords(pigeon_instanceArg, keywordsArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentTitle", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val titleArg = args[1] as String? + val wrapped: List = + try { + api.setContentTitle(pigeon_instanceArg, titleArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContinuousPlayback", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val continuousPlaybackArg = args[1] as Boolean + val wrapped: List = + try { + api.setContinuousPlayback(pigeon_instanceArg, continuousPlaybackArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setLiveStreamPrefetchSeconds", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val prefetchTimeArg = args[1] as Double + val wrapped: List = + try { + api.setLiveStreamPrefetchSeconds(pigeon_instanceArg, prefetchTimeArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setVastLoadTimeout", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest + val timeoutArg = args[1] as Double + val wrapped: List = + try { + api.setVastLoadTimeout(pigeon_instanceArg, timeoutArg) + listOf(null) + } catch (exception: Throwable) { + InteractiveMediaAdsLibraryPigeonUtils.wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift index 4a2d1684c0d1..a7c0614893d1 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/InteractiveMediaAdsLibrary.g.swift @@ -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 (v25.5.0), do not edit directly. +// Autogenerated from Pigeon (v26.0.0), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -2339,10 +2339,93 @@ final class PigeonApiIMASettings: PigeonApiProtocolIMASettings { protocol PigeonApiDelegateIMAAdsRequest { /// Initializes an ads request instance with the given ad tag URL and ad /// display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, contentPlayhead: IMAContentPlayhead? ) throws -> IMAAdsRequest + /// Initializes an ads request instance with the given canned ads response and + /// ad display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer`` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. + func withAdsResponse( + pigeonApi: PigeonApiIMAAdsRequest, adsResponse: String, + adDisplayContainer: IMAAdDisplayContainer, contentPlayhead: IMAContentPlayhead? + ) throws -> IMAAdsRequest + /// Specifies the full URL to use for ads loading from an ad server. + /// + /// Required for any adsRequest. + func getAdTagUrl(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws + -> String? + /// Specifies a VAST, VMAP, or ad rules response to be used instead of making + /// a request through an ad tag URL. + func getAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws + -> String? + /// The ad display container. + func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) + throws -> IMAAdDisplayContainer + /// Specifies whether the player intends to start the content and ad in + /// response to a user action or whether they will be automatically played. + /// + /// Changing this setting will have no impact on ad playback. + func setAdWillAutoPlay( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillAutoPlay: Bool) throws + /// Specifies whether the player intends to start the content and ad with no + /// volume. + /// + /// Changing this setting will have no impact on ad playback. + func setAdWillPlayMuted( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillPlayMuted: Bool) throws + /// Specifies whether the player intends to continuously play the content + /// videos one after another similar to TV broadcast. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + func setContinuousPlayback( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, continuousPlayback: Bool) + throws + /// Specifies the duration of the content in seconds to be shown. + /// + /// Used in AdX requests. This parameter is optional. + func setContentDuration( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, duration: Double) throws + /// Specifies the keywords used to describe the content to be shown. + /// + /// Used in AdX requests. This parameter is optional. + func setContentKeywords( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, keywords: [String]?) throws + /// Specifies the title of the content to be shown. + /// + /// Used in AdX requests. This parameter is optional. + func setContentTitle( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, title: String?) throws + /// Specifies the universal link to the content’s screen. + /// + /// If provided, this parameter is passed to the OM SDK. See + /// [Apple documentation](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content) + /// for more information. + func setContentURL( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, contentURL: String?) throws + /// Specifies the VAST load timeout in milliseconds for the initial request + /// and any subsequent wrappers. + /// + /// This parameter is optional and will override the default timeout. + func setVastLoadTimeout( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, timeout: Double) throws + /// Specifies the maximum amount of time to wait in seconds, after calling + /// requestAds, before requesting the ad tag URL. + /// + /// This can be used to stagger requests during a live-stream event, in order + /// to mitigate spikes in the number of requests. + func setLiveStreamPrefetchSeconds( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, seconds: Double) throws } protocol PigeonApiProtocolIMAAdsRequest { @@ -2396,6 +2479,256 @@ final class PigeonApiIMAAdsRequest: PigeonApiProtocolIMAAdsRequest { } else { pigeonDefaultConstructorChannel.setMessageHandler(nil) } + let withAdsResponseChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.withAdsResponse", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + withAdsResponseChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonIdentifierArg = args[0] as! Int64 + let adsResponseArg = args[1] as! String + let adDisplayContainerArg = args[2] as! IMAAdDisplayContainer + let contentPlayheadArg: IMAContentPlayhead? = nilOrValue(args[3]) + do { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + try api.pigeonDelegate.withAdsResponse( + pigeonApi: api, adsResponse: adsResponseArg, + adDisplayContainer: adDisplayContainerArg, contentPlayhead: contentPlayheadArg), + withIdentifier: pigeonIdentifierArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + withAdsResponseChannel.setMessageHandler(nil) + } + let getAdTagUrlChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.getAdTagUrl", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getAdTagUrlChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + do { + let result = try api.pigeonDelegate.getAdTagUrl( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getAdTagUrlChannel.setMessageHandler(nil) + } + let getAdsResponseChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.getAdsResponse", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getAdsResponseChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + do { + let result = try api.pigeonDelegate.getAdsResponse( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getAdsResponseChannel.setMessageHandler(nil) + } + let getAdDisplayContainerChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.getAdDisplayContainer", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + getAdDisplayContainerChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + do { + let result = try api.pigeonDelegate.getAdDisplayContainer( + pigeonApi: api, pigeonInstance: pigeonInstanceArg) + reply(wrapResult(result)) + } catch { + reply(wrapError(error)) + } + } + } else { + getAdDisplayContainerChannel.setMessageHandler(nil) + } + let setAdWillAutoPlayChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setAdWillAutoPlay", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAdWillAutoPlayChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let adWillAutoPlayArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAdWillAutoPlay( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, adWillAutoPlay: adWillAutoPlayArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setAdWillAutoPlayChannel.setMessageHandler(nil) + } + let setAdWillPlayMutedChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setAdWillPlayMuted", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setAdWillPlayMutedChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let adWillPlayMutedArg = args[1] as! Bool + do { + try api.pigeonDelegate.setAdWillPlayMuted( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, adWillPlayMuted: adWillPlayMutedArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setAdWillPlayMutedChannel.setMessageHandler(nil) + } + let setContinuousPlaybackChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContinuousPlayback", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContinuousPlaybackChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let continuousPlaybackArg = args[1] as! Bool + do { + try api.pigeonDelegate.setContinuousPlayback( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, + continuousPlayback: continuousPlaybackArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setContinuousPlaybackChannel.setMessageHandler(nil) + } + let setContentDurationChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentDuration", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContentDurationChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let durationArg = args[1] as! Double + do { + try api.pigeonDelegate.setContentDuration( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, duration: durationArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setContentDurationChannel.setMessageHandler(nil) + } + let setContentKeywordsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentKeywords", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContentKeywordsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let keywordsArg: [String]? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setContentKeywords( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, keywords: keywordsArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setContentKeywordsChannel.setMessageHandler(nil) + } + let setContentTitleChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentTitle", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContentTitleChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let titleArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setContentTitle( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, title: titleArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setContentTitleChannel.setMessageHandler(nil) + } + let setContentURLChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentURL", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setContentURLChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let contentURLArg: String? = nilOrValue(args[1]) + do { + try api.pigeonDelegate.setContentURL( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, contentURL: contentURLArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setContentURLChannel.setMessageHandler(nil) + } + let setVastLoadTimeoutChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setVastLoadTimeout", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setVastLoadTimeoutChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let timeoutArg = args[1] as! Double + do { + try api.pigeonDelegate.setVastLoadTimeout( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, timeout: timeoutArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setVastLoadTimeoutChannel.setMessageHandler(nil) + } + let setLiveStreamPrefetchSecondsChannel = FlutterBasicMessageChannel( + name: "dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setLiveStreamPrefetchSeconds", + binaryMessenger: binaryMessenger, codec: codec) + if let api = api { + setLiveStreamPrefetchSecondsChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let pigeonInstanceArg = args[0] as! IMAAdsRequest + let secondsArg = args[1] as! Double + do { + try api.pigeonDelegate.setLiveStreamPrefetchSeconds( + pigeonApi: api, pigeonInstance: pigeonInstanceArg, seconds: secondsArg) + reply(wrapResult(nil)) + } catch { + reply(wrapError(error)) + } + } + } else { + setLiveStreamPrefetchSecondsChannel.setMessageHandler(nil) + } } ///Creates a Dart instance of IMAAdsRequest and attaches it to [pigeonInstance]. 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 9b3946995c53..ba56446598b8 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 (v25.5.0), do not edit directly. +// Autogenerated from Pigeon (v26.0.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 @@ -10,7 +10,7 @@ import 'dart:io' show Platform; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' - show ReadBuffer, WriteBuffer, immutable, protected; + show ReadBuffer, WriteBuffer, immutable, protected, visibleForTesting; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -32,6 +32,130 @@ List wrapResponse( return [error.code, error.message, error.details]; } +/// Provides overrides for the constructors and static members of each proxy +/// API. +/// +/// This is only intended to be used with unit tests to prevent errors from +/// making message calls in a unit test. +/// +/// See [PigeonOverrides.pigeon_reset] to set all overrides back to null. +@visibleForTesting +class PigeonOverrides { + /// Overrides [ContentProgressProvider.new]. + static ContentProgressProvider Function()? contentProgressProvider_new; + + /// Overrides [VideoProgressUpdate.new]. + static VideoProgressUpdate Function({ + required int currentTimeMs, + required int durationMs, + })? videoProgressUpdate_new; + + /// Overrides [FrameLayout.new]. + static FrameLayout Function()? frameLayout_new; + + /// Overrides [VideoView.new]. + static VideoView Function({ + required void Function( + VideoView pigeon_instance, + MediaPlayer player, + int what, + int extra, + ) onError, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onPrepared, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onCompletion, + })? videoView_new; + + /// Overrides [VideoAdPlayer.new]. + static VideoAdPlayer Function({ + required void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) addCallback, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + ) loadAd, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) pauseAd, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) playAd, + required void Function(VideoAdPlayer pigeon_instance) release, + required void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) removeCallback, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) stopAd, + })? videoAdPlayer_new; + + /// Overrides [AdsLoadedListener.new]. + static AdsLoadedListener Function( + {required void Function( + AdsLoadedListener pigeon_instance, + AdsManagerLoadedEvent event, + ) onAdsManagerLoaded})? adsLoadedListener_new; + + /// Overrides [AdErrorListener.new]. + static AdErrorListener Function( + {required void Function( + AdErrorListener pigeon_instance, + AdErrorEvent event, + ) onAdError})? adErrorListener_new; + + /// Overrides [AdEventListener.new]. + static AdEventListener Function( + {required void Function( + AdEventListener pigeon_instance, + AdEvent event, + ) onAdEvent})? adEventListener_new; + + /// Overrides [CompanionAdSlotClickListener.new]. + static CompanionAdSlotClickListener Function( + {required void Function(CompanionAdSlotClickListener pigeon_instance) + onCompanionAdClick})? companionAdSlotClickListener_new; + + /// Overrides [ImaSdkFactory.instance]. + static ImaSdkFactory? imaSdkFactory_instance; + + /// Overrides [VideoProgressUpdate.videoTimeNotReady]. + static VideoProgressUpdate? videoProgressUpdate_videoTimeNotReady; + + /// Overrides [ImaSdkFactory.createAdDisplayContainer]. + static Future Function( + ViewGroup, + VideoAdPlayer, + )? imaSdkFactory_createAdDisplayContainer; + + /// Sets all overridden ProxyApi class members to null. + static void pigeon_reset() { + contentProgressProvider_new = null; + imaSdkFactory_instance = null; + imaSdkFactory_createAdDisplayContainer = null; + videoProgressUpdate_new = null; + videoProgressUpdate_videoTimeNotReady = null; + frameLayout_new = null; + videoView_new = null; + videoAdPlayer_new = null; + adsLoadedListener_new = null; + adErrorListener_new = null; + adEventListener_new = null; + companionAdSlotClickListener_new = null; + } +} + /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -1344,7 +1468,7 @@ class AdError extends PigeonInternalProxyApiBaseClass { /// An object containing the data used to request ads from the server. /// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsRequest. +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/kotlin/com/google/ads/interactivemedia/v3/api/AdsRequest. class AdsRequest extends PigeonInternalProxyApiBaseClass { /// Constructs [AdsRequest] without creating the associated native object. /// @@ -1470,6 +1594,305 @@ class AdsRequest extends PigeonInternalProxyApiBaseClass { } } + /// Notifies the SDK whether the player intends to start the content and ad in + /// response to a user action or whether it will be automatically played. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + Future setAdWillAutoPlay(bool willAutoPlay) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdWillAutoPlay'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, willAutoPlay]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Notifies the SDK whether the player intends to start the content and ad + /// while muted. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + Future setAdWillPlayMuted(bool willPlayMuted) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdWillPlayMuted'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, willPlayMuted]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies a VAST, VMAP, or ad rules response to be used instead of making + /// a request through an ad tag URL. + Future setAdsResponse(String? cannedAdResponse) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdsResponse'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, cannedAdResponse]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the duration of the content in seconds to be shown. + /// + /// This optional parameter is used by AdX requests. It is recommended for AdX + /// users. + Future setContentDuration(double duration) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentDuration'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, duration]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the keywords used to describe the content to be shown. + /// + /// This optional parameter is used by AdX requests and is recommended for AdX + /// users. + Future setContentKeywords(List? keywords) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentKeywords'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, keywords]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the title of the content to be shown. + /// + /// Used in AdX requests. This optional parameter is used by AdX requests and + /// is recommended for AdX users. + Future setContentTitle(String? title) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentTitle'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, title]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Notifies the SDK whether the player intends to continuously play the + /// content videos one after another similar to TV broadcast. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + Future setContinuousPlayback(bool continuousPlayback) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContinuousPlayback'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, continuousPlayback]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the maximum amount of time to wait in seconds, after calling + /// requestAds, before requesting the ad tag URL. + /// + /// This can be used to stagger requests during a live-stream event, in order + /// to mitigate spikes in the number of requests. + Future setLiveStreamPrefetchSeconds(double prefetchTime) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setLiveStreamPrefetchSeconds'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, prefetchTime]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the VAST load timeout in milliseconds for a single wrapper. + /// + /// This parameter is optional and will override the default timeout, + /// currently set to 5000ms. + Future setVastLoadTimeout(double timeout) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setVastLoadTimeout'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, timeout]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + @override AdsRequest pigeon_copy() { return AdsRequest.pigeon_detached( @@ -1483,7 +1906,21 @@ class AdsRequest extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. class ContentProgressProvider extends PigeonInternalProxyApiBaseClass { - ContentProgressProvider({ + factory ContentProgressProvider({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) { + if (PigeonOverrides.contentProgressProvider_new != null) { + return PigeonOverrides.contentProgressProvider_new!(); + } + return ContentProgressProvider.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } + + @protected + ContentProgressProvider.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }) { @@ -2347,7 +2784,10 @@ class ImaSdkFactory extends PigeonInternalProxyApiBaseClass { late final _PigeonInternalProxyApiBaseCodec _pigeonVar_codecImaSdkFactory = _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); - static final ImaSdkFactory instance = pigeonVar_instance(); + static final ImaSdkFactory _instance = pigeonVar_instance(); + + static ImaSdkFactory get instance => + PigeonOverrides.imaSdkFactory_instance ?? _instance; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, @@ -2440,6 +2880,12 @@ class ImaSdkFactory extends PigeonInternalProxyApiBaseClass { BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, }) async { + if (PigeonOverrides.imaSdkFactory_createAdDisplayContainer != null) { + return PigeonOverrides.imaSdkFactory_createAdDisplayContainer!( + container, + player, + ); + } final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _PigeonInternalProxyApiBaseCodec( pigeon_instanceManager ?? PigeonInstanceManager.instance); @@ -3033,7 +3479,28 @@ class ImaSdkSettings extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. class VideoProgressUpdate extends PigeonInternalProxyApiBaseClass { - VideoProgressUpdate({ + factory VideoProgressUpdate({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required int currentTimeMs, + required int durationMs, + }) { + if (PigeonOverrides.videoProgressUpdate_new != null) { + return PigeonOverrides.videoProgressUpdate_new!( + currentTimeMs: currentTimeMs, + durationMs: durationMs, + ); + } + return VideoProgressUpdate.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + currentTimeMs: currentTimeMs, + durationMs: durationMs, + ); + } + + @protected + VideoProgressUpdate.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required int currentTimeMs, @@ -3087,9 +3554,15 @@ class VideoProgressUpdate extends PigeonInternalProxyApiBaseClass { /// Value to use for cases when progress is not yet defined, such as video /// initialization. - static final VideoProgressUpdate videoTimeNotReady = + static final VideoProgressUpdate _videoTimeNotReady = pigeonVar_videoTimeNotReady(); + /// Value to use for cases when progress is not yet defined, such as video + /// initialization. + static VideoProgressUpdate get videoTimeNotReady => + PigeonOverrides.videoProgressUpdate_videoTimeNotReady ?? + _videoTimeNotReady; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, @@ -3418,7 +3891,21 @@ class AdPodInfo extends PigeonInternalProxyApiBaseClass { /// /// See https://developer.android.com/reference/android/widget/FrameLayout. class FrameLayout extends ViewGroup { - FrameLayout({ + factory FrameLayout({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) { + if (PigeonOverrides.frameLayout_new != null) { + return PigeonOverrides.frameLayout_new!(); + } + return FrameLayout.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } + + @protected + FrameLayout.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }) : super.pigeon_detached() { @@ -3666,7 +4153,42 @@ class ViewGroup extends View { /// /// See https://developer.android.com/reference/android/widget/VideoView. class VideoView extends View { - VideoView({ + factory VideoView({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onPrepared, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onCompletion, + required void Function( + VideoView pigeon_instance, + MediaPlayer player, + int what, + int extra, + ) onError, + }) { + if (PigeonOverrides.videoView_new != null) { + return PigeonOverrides.videoView_new!( + onPrepared: onPrepared, + onCompletion: onCompletion, + onError: onError, + ); + } + return VideoView.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onPrepared: onPrepared, + onCompletion: onCompletion, + onError: onError, + ); + } + + @protected + VideoView.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, this.onPrepared, @@ -4694,7 +5216,62 @@ class VideoAdPlayerCallback extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. class VideoAdPlayer extends PigeonInternalProxyApiBaseClass { - VideoAdPlayer({ + factory VideoAdPlayer({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) addCallback, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + ) loadAd, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) pauseAd, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) playAd, + required void Function(VideoAdPlayer pigeon_instance) release, + required void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) removeCallback, + required void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) stopAd, + }) { + if (PigeonOverrides.videoAdPlayer_new != null) { + return PigeonOverrides.videoAdPlayer_new!( + addCallback: addCallback, + loadAd: loadAd, + pauseAd: pauseAd, + playAd: playAd, + release: release, + removeCallback: removeCallback, + stopAd: stopAd, + ); + } + return VideoAdPlayer.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + addCallback: addCallback, + loadAd: loadAd, + pauseAd: pauseAd, + playAd: playAd, + release: release, + removeCallback: removeCallback, + stopAd: stopAd, + ); + } + + @protected + VideoAdPlayer.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.addCallback, @@ -5283,7 +5860,27 @@ class VideoAdPlayer extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. class AdsLoadedListener extends PigeonInternalProxyApiBaseClass { - AdsLoadedListener({ + factory AdsLoadedListener({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function( + AdsLoadedListener pigeon_instance, + AdsManagerLoadedEvent event, + ) onAdsManagerLoaded, + }) { + if (PigeonOverrides.adsLoadedListener_new != null) { + return PigeonOverrides.adsLoadedListener_new!( + onAdsManagerLoaded: onAdsManagerLoaded); + } + return AdsLoadedListener.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onAdsManagerLoaded: onAdsManagerLoaded, + ); + } + + @protected + AdsLoadedListener.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.onAdsManagerLoaded, @@ -5423,7 +6020,26 @@ class AdsLoadedListener extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. class AdErrorListener extends PigeonInternalProxyApiBaseClass { - AdErrorListener({ + factory AdErrorListener({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function( + AdErrorListener pigeon_instance, + AdErrorEvent event, + ) onAdError, + }) { + if (PigeonOverrides.adErrorListener_new != null) { + return PigeonOverrides.adErrorListener_new!(onAdError: onAdError); + } + return AdErrorListener.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onAdError: onAdError, + ); + } + + @protected + AdErrorListener.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.onAdError, @@ -5561,7 +6177,26 @@ class AdErrorListener extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. class AdEventListener extends PigeonInternalProxyApiBaseClass { - AdEventListener({ + factory AdEventListener({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function( + AdEventListener pigeon_instance, + AdEvent event, + ) onAdEvent, + }) { + if (PigeonOverrides.adEventListener_new != null) { + return PigeonOverrides.adEventListener_new!(onAdEvent: onAdEvent); + } + return AdEventListener.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onAdEvent: onAdEvent, + ); + } + + @protected + AdEventListener.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.onAdEvent, @@ -6943,7 +7578,25 @@ class Ad extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.ClickListener.html. class CompanionAdSlotClickListener extends PigeonInternalProxyApiBaseClass { - CompanionAdSlotClickListener({ + factory CompanionAdSlotClickListener({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function(CompanionAdSlotClickListener pigeon_instance) + onCompanionAdClick, + }) { + if (PigeonOverrides.companionAdSlotClickListener_new != null) { + return PigeonOverrides.companionAdSlotClickListener_new!( + onCompanionAdClick: onCompanionAdClick); + } + return CompanionAdSlotClickListener.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onCompanionAdClick: onCompanionAdClick, + ); + } + + @protected + CompanionAdSlotClickListener.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.onCompanionAdClick, diff --git a/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart b/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart index 39db77824e95..0b3b490a6092 100644 --- a/packages/interactive_media_ads/lib/src/ios/interactive_media_ads.g.dart +++ b/packages/interactive_media_ads/lib/src/ios/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 (v25.5.0), do not edit directly. +// Autogenerated from Pigeon (v26.0.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 @@ -10,7 +10,7 @@ import 'dart:io' show Platform; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' - show ReadBuffer, WriteBuffer, immutable, protected; + show ReadBuffer, WriteBuffer, immutable, protected, visibleForTesting; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -32,6 +32,145 @@ List wrapResponse( return [error.code, error.message, error.details]; } +/// Provides overrides for the constructors and static members of each proxy +/// API. +/// +/// This is only intended to be used with unit tests to prevent errors from +/// making message calls in a unit test. +/// +/// See [PigeonOverrides.pigeon_reset] to set all overrides back to null. +@visibleForTesting +class PigeonOverrides { + /// Overrides [IMAAdDisplayContainer.new]. + static IMAAdDisplayContainer Function({ + required UIView adContainer, + List? companionSlots, + UIViewController? adContainerViewController, + })? iMAAdDisplayContainer_new; + + /// Overrides [UIView.new]. + static UIView Function()? uIView_new; + + /// Overrides [UIViewController.new]. + static UIViewController Function( + {void Function( + UIViewController pigeon_instance, + bool animated, + )? viewDidAppear})? uIViewController_new; + + /// Overrides [IMAContentPlayhead.new]. + static IMAContentPlayhead Function()? iMAContentPlayhead_new; + + /// Overrides [IMAAdsLoader.new]. + static IMAAdsLoader Function({IMASettings? settings})? iMAAdsLoader_new; + + /// Overrides [IMASettings.new]. + static IMASettings Function()? iMASettings_new; + + /// Overrides [IMAAdsRequest.new]. + static IMAAdsRequest Function({ + required String adTagUrl, + required IMAAdDisplayContainer adDisplayContainer, + IMAContentPlayhead? contentPlayhead, + })? iMAAdsRequest_new; + + /// Overrides [IMAAdsRequest.withAdsResponse]. + static IMAAdsRequest Function({ + required String adsResponse, + required IMAAdDisplayContainer adDisplayContainer, + IMAContentPlayhead? contentPlayhead, + })? iMAAdsRequest_withAdsResponse; + + /// Overrides [IMAAdsLoaderDelegate.new]. + static IMAAdsLoaderDelegate Function({ + required void Function( + IMAAdsLoaderDelegate pigeon_instance, + IMAAdsLoader loader, + IMAAdsLoadedData adsLoadedData, + ) adLoaderLoadedWith, + required void Function( + IMAAdsLoaderDelegate pigeon_instance, + IMAAdsLoader loader, + IMAAdLoadingErrorData adErrorData, + ) adsLoaderFailedWithErrorData, + })? iMAAdsLoaderDelegate_new; + + /// Overrides [IMAAdsManagerDelegate.new]. + static IMAAdsManagerDelegate Function({ + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + IMAAdEvent event, + ) didReceiveAdEvent, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + IMAAdError error, + ) didReceiveAdError, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + ) didRequestContentPause, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + ) didRequestContentResume, + })? iMAAdsManagerDelegate_new; + + /// Overrides [IMAAdsRenderingSettings.new]. + static IMAAdsRenderingSettings Function()? iMAAdsRenderingSettings_new; + + /// Overrides [IMAFriendlyObstruction.new]. + static IMAFriendlyObstruction Function({ + required UIView view, + required FriendlyObstructionPurpose purpose, + String? detailedReason, + })? iMAFriendlyObstruction_new; + + /// Overrides [IMACompanionAdSlot.new]. + static IMACompanionAdSlot Function({required UIView view})? + iMACompanionAdSlot_new; + + /// Overrides [IMACompanionAdSlot.size]. + static IMACompanionAdSlot Function({ + required UIView view, + required int width, + required int height, + })? iMACompanionAdSlot_size; + + /// Overrides [IMACompanionDelegate.new]. + static IMACompanionDelegate Function({ + void Function( + IMACompanionDelegate pigeon_instance, + IMACompanionAdSlot slot, + bool filled, + )? companionAdSlotFilled, + void Function( + IMACompanionDelegate pigeon_instance, + IMACompanionAdSlot slot, + )? companionSlotWasClicked, + })? iMACompanionDelegate_new; + + /// Sets all overridden ProxyApi class members to null. + static void pigeon_reset() { + iMAAdDisplayContainer_new = null; + uIView_new = null; + uIViewController_new = null; + iMAContentPlayhead_new = null; + iMAAdsLoader_new = null; + iMASettings_new = null; + iMAAdsRequest_new = null; + iMAAdsRequest_withAdsResponse = null; + iMAAdsLoaderDelegate_new = null; + iMAAdsManagerDelegate_new = null; + iMAAdsRenderingSettings_new = null; + iMAFriendlyObstruction_new = null; + iMACompanionAdSlot_new = null; + iMACompanionAdSlot_size = null; + iMACompanionDelegate_new = null; + } +} + /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -807,7 +946,33 @@ class _PigeonCodec extends StandardMessageCodec { class IMAAdDisplayContainer extends NSObject { /// Initializes IMAAdDisplayContainer for rendering the ad and displaying the /// sad UI. - IMAAdDisplayContainer({ + factory IMAAdDisplayContainer({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required UIView adContainer, + List? companionSlots, + UIViewController? adContainerViewController, + }) { + if (PigeonOverrides.iMAAdDisplayContainer_new != null) { + return PigeonOverrides.iMAAdDisplayContainer_new!( + adContainer: adContainer, + companionSlots: companionSlots, + adContainerViewController: adContainerViewController, + ); + } + return IMAAdDisplayContainer.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adContainer: adContainer, + companionSlots: companionSlots, + adContainerViewController: adContainerViewController, + ); + } + + /// Initializes IMAAdDisplayContainer for rendering the ad and displaying the + /// sad UI. + @protected + IMAAdDisplayContainer.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.adContainer, @@ -1073,7 +1238,21 @@ class IMAAdDisplayContainer extends NSObject { /// /// See https://developer.apple.com/documentation/uikit/uiview. class UIView extends NSObject { - UIView({ + factory UIView({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) { + if (PigeonOverrides.uIView_new != null) { + return PigeonOverrides.uIView_new!(); + } + return UIView.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } + + @protected + UIView.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }) : super.pigeon_detached() { @@ -1184,7 +1363,27 @@ class UIView extends NSObject { /// /// See https://developer.apple.com/documentation/uikit/uiviewcontroller. class UIViewController extends NSObject { - UIViewController({ + factory UIViewController({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + UIViewController pigeon_instance, + bool animated, + )? viewDidAppear, + }) { + if (PigeonOverrides.uIViewController_new != null) { + return PigeonOverrides.uIViewController_new!( + viewDidAppear: viewDidAppear); + } + return UIViewController.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + viewDidAppear: viewDidAppear, + ); + } + + @protected + UIViewController.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, this.viewDidAppear, @@ -1408,7 +1607,21 @@ class UIViewController extends NSObject { /// /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/ios/reference/Protocols/IMAContentPlayhead. class IMAContentPlayhead extends NSObject { - IMAContentPlayhead({ + factory IMAContentPlayhead({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) { + if (PigeonOverrides.iMAContentPlayhead_new != null) { + return PigeonOverrides.iMAContentPlayhead_new!(); + } + return IMAContentPlayhead.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } + + @protected + IMAContentPlayhead.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }) : super.pigeon_detached() { @@ -1550,7 +1763,23 @@ class IMAContentPlayhead extends NSObject { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAAdsLoader. class IMAAdsLoader extends NSObject { - IMAAdsLoader({ + factory IMAAdsLoader({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + IMASettings? settings, + }) { + if (PigeonOverrides.iMAAdsLoader_new != null) { + return PigeonOverrides.iMAAdsLoader_new!(settings: settings); + } + return IMAAdsLoader.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + settings: settings, + ); + } + + @protected + IMAAdsLoader.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, IMASettings? settings, @@ -1754,7 +1983,21 @@ class IMAAdsLoader extends NSObject { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMASettings.html. class IMASettings extends NSObject { - IMASettings({ + factory IMASettings({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) { + if (PigeonOverrides.iMASettings_new != null) { + return PigeonOverrides.iMASettings_new!(); + } + return IMASettings.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } + + @protected + IMASettings.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }) : super.pigeon_detached() { @@ -2262,7 +2505,43 @@ class IMASettings extends NSObject { class IMAAdsRequest extends NSObject { /// Initializes an ads request instance with the given ad tag URL and ad /// display container. - IMAAdsRequest({ + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. + factory IMAAdsRequest({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required String adTagUrl, + required IMAAdDisplayContainer adDisplayContainer, + IMAContentPlayhead? contentPlayhead, + }) { + if (PigeonOverrides.iMAAdsRequest_new != null) { + return PigeonOverrides.iMAAdsRequest_new!( + adTagUrl: adTagUrl, + adDisplayContainer: adDisplayContainer, + contentPlayhead: contentPlayhead, + ); + } + return IMAAdsRequest.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adTagUrl: adTagUrl, + adDisplayContainer: adDisplayContainer, + contentPlayhead: contentPlayhead, + ); + } + + /// Initializes an ads request instance with the given ad tag URL and ad + /// display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. + @protected + IMAAdsRequest.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required String adTagUrl, @@ -2306,6 +2585,88 @@ class IMAAdsRequest extends NSObject { }(); } + /// Initializes an ads request instance with the given canned ads response and + /// ad display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer`` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. + factory IMAAdsRequest.withAdsResponse({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required String adsResponse, + required IMAAdDisplayContainer adDisplayContainer, + IMAContentPlayhead? contentPlayhead, + }) { + if (PigeonOverrides.iMAAdsRequest_withAdsResponse != null) { + return PigeonOverrides.iMAAdsRequest_withAdsResponse!( + adsResponse: adsResponse, + adDisplayContainer: adDisplayContainer, + contentPlayhead: contentPlayhead, + ); + } + return IMAAdsRequest.pigeon_withAdsResponse( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adsResponse: adsResponse, + adDisplayContainer: adDisplayContainer, + contentPlayhead: contentPlayhead, + ); + } + + /// Initializes an ads request instance with the given canned ads response and + /// ad display container. + /// + /// Serial ad requests may reuse the same `IMAAdDisplayContainer`` by first + /// calling `IMAAdsManager.destroy` on its current adsManager. Concurrent + /// requests must use different ad containers. Does not support + /// Picture-in-Picture. + @protected + IMAAdsRequest.pigeon_withAdsResponse({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required String adsResponse, + required IMAAdDisplayContainer adDisplayContainer, + IMAContentPlayhead? contentPlayhead, + }) : super.pigeon_detached() { + final int pigeonVar_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.withAdsResponse'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel + .send([ + pigeonVar_instanceIdentifier, + adsResponse, + adDisplayContainer, + contentPlayhead + ]); + () async { + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + }(); + } + /// Constructs [IMAAdsRequest] without creating the associated native object. /// /// This should only be used by subclasses created by this library or to @@ -2368,32 +2729,46 @@ class IMAAdsRequest extends NSObject { } } - @override - IMAAdsRequest pigeon_copy() { - return IMAAdsRequest.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, + /// Specifies the full URL to use for ads loading from an ad server. + /// + /// Required for any adsRequest. + Future getAdTagUrl() async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.getAdTagUrl'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return (pigeonVar_replyList[0] as String?); + } } -} -/// Delegate object that receives state change callbacks from `IMAAdsLoader`. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Protocols/IMAAdsLoaderDelegate.html. -class IMAAdsLoaderDelegate extends NSObject { - IMAAdsLoaderDelegate({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.adLoaderLoadedWith, - required this.adsLoaderFailedWithErrorData, - }) : super.pigeon_detached() { - final int pigeonVar_instanceIdentifier = - pigeon_instanceManager.addDartCreatedInstance(this); + /// Specifies a VAST, VMAP, or ad rules response to be used instead of making + /// a request through an ad tag URL. + Future getAdsResponse() async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = - _pigeonVar_codecIMAAdsLoaderDelegate; + _pigeonVar_codecIMAAdsRequest; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; const String pigeonVar_channelName = - 'dev.flutter.pigeon.interactive_media_ads.IMAAdsLoaderDelegate.pigeon_defaultConstructor'; + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.getAdsResponse'; final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( pigeonVar_channelName, @@ -2401,25 +2776,435 @@ class IMAAdsLoaderDelegate extends NSObject { binaryMessenger: pigeonVar_binaryMessenger, ); final Future pigeonVar_sendFuture = - pigeonVar_channel.send([pigeonVar_instanceIdentifier]); - () async { - final List? pigeonVar_replyList = - await pigeonVar_sendFuture as List?; - if (pigeonVar_replyList == null) { - throw _createConnectionError(pigeonVar_channelName); - } else if (pigeonVar_replyList.length > 1) { - throw PlatformException( - code: pigeonVar_replyList[0]! as String, - message: pigeonVar_replyList[1] as String?, - details: pigeonVar_replyList[2], - ); - } else { - return; - } - }(); - } - - /// Constructs [IMAAdsLoaderDelegate] without creating the associated native object. + pigeonVar_channel.send([this]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return (pigeonVar_replyList[0] as String?); + } + } + + /// The ad display container. + Future getAdDisplayContainer() async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.getAdDisplayContainer'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as IMAAdDisplayContainer?)!; + } + } + + /// Specifies whether the player intends to start the content and ad in + /// response to a user action or whether they will be automatically played. + /// + /// Changing this setting will have no impact on ad playback. + Future setAdWillAutoPlay(bool adWillAutoPlay) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setAdWillAutoPlay'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, adWillAutoPlay]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies whether the player intends to start the content and ad with no + /// volume. + /// + /// Changing this setting will have no impact on ad playback. + Future setAdWillPlayMuted(bool adWillPlayMuted) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setAdWillPlayMuted'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, adWillPlayMuted]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies whether the player intends to continuously play the content + /// videos one after another similar to TV broadcast. + /// + /// Not calling this function leaves the setting as unknown. Note: Changing + /// this setting will have no impact on ad playback. + Future setContinuousPlayback(bool continuousPlayback) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContinuousPlayback'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, continuousPlayback]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the duration of the content in seconds to be shown. + /// + /// Used in AdX requests. This parameter is optional. + Future setContentDuration(double duration) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentDuration'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, duration]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the keywords used to describe the content to be shown. + /// + /// Used in AdX requests. This parameter is optional. + Future setContentKeywords(List? keywords) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentKeywords'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, keywords]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the title of the content to be shown. + /// + /// Used in AdX requests. This parameter is optional. + Future setContentTitle(String? title) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentTitle'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, title]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the universal link to the content’s screen. + /// + /// If provided, this parameter is passed to the OM SDK. See + /// [Apple documentation](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content) + /// for more information. + Future setContentURL(String? contentURL) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setContentURL'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, contentURL]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the VAST load timeout in milliseconds for the initial request + /// and any subsequent wrappers. + /// + /// This parameter is optional and will override the default timeout. + Future setVastLoadTimeout(double timeout) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setVastLoadTimeout'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, timeout]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Specifies the maximum amount of time to wait in seconds, after calling + /// requestAds, before requesting the ad tag URL. + /// + /// This can be used to stagger requests during a live-stream event, in order + /// to mitigate spikes in the number of requests. + Future setLiveStreamPrefetchSeconds(double seconds) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsRequest; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsRequest.setLiveStreamPrefetchSeconds'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([this, seconds]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + @override + IMAAdsRequest pigeon_copy() { + return IMAAdsRequest.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Delegate object that receives state change callbacks from `IMAAdsLoader`. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Protocols/IMAAdsLoaderDelegate.html. +class IMAAdsLoaderDelegate extends NSObject { + factory IMAAdsLoaderDelegate({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function( + IMAAdsLoaderDelegate pigeon_instance, + IMAAdsLoader loader, + IMAAdsLoadedData adsLoadedData, + ) adLoaderLoadedWith, + required void Function( + IMAAdsLoaderDelegate pigeon_instance, + IMAAdsLoader loader, + IMAAdLoadingErrorData adErrorData, + ) adsLoaderFailedWithErrorData, + }) { + if (PigeonOverrides.iMAAdsLoaderDelegate_new != null) { + return PigeonOverrides.iMAAdsLoaderDelegate_new!( + adLoaderLoadedWith: adLoaderLoadedWith, + adsLoaderFailedWithErrorData: adsLoaderFailedWithErrorData, + ); + } + return IMAAdsLoaderDelegate.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adLoaderLoadedWith: adLoaderLoadedWith, + adsLoaderFailedWithErrorData: adsLoaderFailedWithErrorData, + ); + } + + @protected + IMAAdsLoaderDelegate.pigeon_new({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.adLoaderLoadedWith, + required this.adsLoaderFailedWithErrorData, + }) : super.pigeon_detached() { + final int pigeonVar_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecIMAAdsLoaderDelegate; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.IMAAdsLoaderDelegate.pigeon_defaultConstructor'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = + pigeonVar_channel.send([pigeonVar_instanceIdentifier]); + () async { + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [IMAAdsLoaderDelegate] without creating the associated native object. /// /// This should only be used by subclasses created by this library or to /// create copies for an [PigeonInstanceManager]. @@ -3178,7 +3963,48 @@ class IMAAdsManager extends NSObject { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Protocols/IMAAdsManagerDelegate.html. class IMAAdsManagerDelegate extends NSObject { - IMAAdsManagerDelegate({ + factory IMAAdsManagerDelegate({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + IMAAdEvent event, + ) didReceiveAdEvent, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + IMAAdError error, + ) didReceiveAdError, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + ) didRequestContentPause, + required void Function( + IMAAdsManagerDelegate pigeon_instance, + IMAAdsManager adsManager, + ) didRequestContentResume, + }) { + if (PigeonOverrides.iMAAdsManagerDelegate_new != null) { + return PigeonOverrides.iMAAdsManagerDelegate_new!( + didReceiveAdEvent: didReceiveAdEvent, + didReceiveAdError: didReceiveAdError, + didRequestContentPause: didRequestContentPause, + didRequestContentResume: didRequestContentResume, + ); + } + return IMAAdsManagerDelegate.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + didReceiveAdEvent: didReceiveAdEvent, + didReceiveAdError: didReceiveAdError, + didRequestContentPause: didRequestContentPause, + didRequestContentResume: didRequestContentResume, + ); + } + + @protected + IMAAdsManagerDelegate.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.didReceiveAdEvent, @@ -3630,7 +4456,21 @@ class IMAAdEvent extends NSObject { /// /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/ios/reference/Classes/IMAAdsRenderingSettings. class IMAAdsRenderingSettings extends NSObject { - IMAAdsRenderingSettings({ + factory IMAAdsRenderingSettings({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) { + if (PigeonOverrides.iMAAdsRenderingSettings_new != null) { + return PigeonOverrides.iMAAdsRenderingSettings_new!(); + } + return IMAAdsRenderingSettings.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } + + @protected + IMAAdsRenderingSettings.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }) : super.pigeon_detached() { @@ -4037,7 +4877,32 @@ class NSObject extends PigeonInternalProxyApiBaseClass { /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/ios/reference/Classes/IMAFriendlyObstruction.html. class IMAFriendlyObstruction extends NSObject { /// Initializes a friendly obstruction. - IMAFriendlyObstruction({ + factory IMAFriendlyObstruction({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required UIView view, + required FriendlyObstructionPurpose purpose, + String? detailedReason, + }) { + if (PigeonOverrides.iMAFriendlyObstruction_new != null) { + return PigeonOverrides.iMAFriendlyObstruction_new!( + view: view, + purpose: purpose, + detailedReason: detailedReason, + ); + } + return IMAFriendlyObstruction.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + view: view, + purpose: purpose, + detailedReason: detailedReason, + ); + } + + /// Initializes a friendly obstruction. + @protected + IMAFriendlyObstruction.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.view, @@ -4302,7 +5167,24 @@ class IMACompanionAd extends NSObject { /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMACompanionAdSlot. class IMACompanionAdSlot extends PigeonInternalProxyApiBaseClass { /// Initializes an instance of a IMACompanionAdSlot with fluid size. - IMACompanionAdSlot({ + factory IMACompanionAdSlot({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required UIView view, + }) { + if (PigeonOverrides.iMACompanionAdSlot_new != null) { + return PigeonOverrides.iMACompanionAdSlot_new!(view: view); + } + return IMACompanionAdSlot.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + view: view, + ); + } + + /// Initializes an instance of a IMACompanionAdSlot with fluid size. + @protected + IMACompanionAdSlot.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.view, @@ -4343,7 +5225,35 @@ class IMACompanionAdSlot extends PigeonInternalProxyApiBaseClass { /// height. /// /// `width` and `height` are in pixels. - IMACompanionAdSlot.size({ + factory IMACompanionAdSlot.size({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + required UIView view, + required int width, + required int height, + }) { + if (PigeonOverrides.iMACompanionAdSlot_size != null) { + return PigeonOverrides.iMACompanionAdSlot_size!( + view: view, + width: width, + height: height, + ); + } + return IMACompanionAdSlot.pigeon_size( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + view: view, + width: width, + height: height, + ); + } + + /// Initializes an instance of a IMACompanionAdSlot with design ad width and + /// height. + /// + /// `width` and `height` are in pixels. + @protected + IMACompanionAdSlot.pigeon_size({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, required this.view, @@ -4572,7 +5482,35 @@ class IMACompanionAdSlot extends PigeonInternalProxyApiBaseClass { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side/reference/Protocols/IMACompanionDelegate.html. class IMACompanionDelegate extends NSObject { - IMACompanionDelegate({ + factory IMACompanionDelegate({ + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + IMACompanionDelegate pigeon_instance, + IMACompanionAdSlot slot, + bool filled, + )? companionAdSlotFilled, + void Function( + IMACompanionDelegate pigeon_instance, + IMACompanionAdSlot slot, + )? companionSlotWasClicked, + }) { + if (PigeonOverrides.iMACompanionDelegate_new != null) { + return PigeonOverrides.iMACompanionDelegate_new!( + companionAdSlotFilled: companionAdSlotFilled, + companionSlotWasClicked: companionSlotWasClicked, + ); + } + return IMACompanionDelegate.pigeon_new( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + companionAdSlotFilled: companionAdSlotFilled, + companionSlotWasClicked: companionSlotWasClicked, + ); + } + + @protected + IMACompanionDelegate.pigeon_new({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, this.companionAdSlotFilled, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index d5b2f374c7ef..94d55805b2f5 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -31,7 +31,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.4 - pigeon: ^25.5.0 + pigeon: ^26.0.0 topics: - ads From b5148f744bb4cb13d5b21c476095449b0eaa1d0f Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:03:21 -0400 Subject: [PATCH 03/11] nonnull on android actually --- .../AdsRequestProxyApi.kt | 36 +++++++++++++++++++ .../InteractiveMediaAdsLibrary.g.kt | 12 +++---- .../src/android/interactive_media_ads.g.dart | 6 ++-- .../interactive_media_ads_android.dart | 6 ++-- 4 files changed, 48 insertions(+), 12 deletions(-) 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 248fc8ada088..b2a98b8e28b9 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 @@ -39,4 +39,40 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : ) { pigeon_instance.contentProgressProvider = provider } + + override fun setAdWillAutoPlay(pigeon_instance: AdsRequest, willAutoPlay: Boolean) { + pigeon_instance.setAdWillAutoPlay(willAutoPlay) + } + + override fun setAdWillPlayMuted(pigeon_instance: AdsRequest, willPlayMuted: Boolean) { + TODO("Not yet implemented") + } + + override fun setAdsResponse(pigeon_instance: AdsRequest, cannedAdResponse: String?) { + TODO("Not yet implemented") + } + + override fun setContentDuration(pigeon_instance: AdsRequest, duration: Double) { + TODO("Not yet implemented") + } + + override fun setContentKeywords(pigeon_instance: AdsRequest, keywords: List?) { + TODO("Not yet implemented") + } + + override fun setContentTitle(pigeon_instance: AdsRequest, title: String?) { + TODO("Not yet implemented") + } + + override fun setContinuousPlayback(pigeon_instance: AdsRequest, continuousPlayback: Boolean) { + TODO("Not yet implemented") + } + + override fun setLiveStreamPrefetchSeconds(pigeon_instance: AdsRequest, prefetchTime: Double) { + TODO("Not yet implemented") + } + + override fun setVastLoadTimeout(pigeon_instance: AdsRequest, timeout: Double) { + TODO("Not yet implemented") + } } 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 acbd0c3a57a3..05c1b2f9bbea 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 @@ -1523,7 +1523,7 @@ abstract class PigeonApiAdsRequest( */ abstract fun setAdsResponse( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, - cannedAdResponse: String? + cannedAdResponse: String ) /** @@ -1543,7 +1543,7 @@ abstract class PigeonApiAdsRequest( */ abstract fun setContentKeywords( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, - keywords: List? + keywords: List ) /** @@ -1554,7 +1554,7 @@ abstract class PigeonApiAdsRequest( */ abstract fun setContentTitle( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, - title: String? + title: String ) /** @@ -1702,7 +1702,7 @@ abstract class PigeonApiAdsRequest( channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest - val cannedAdResponseArg = args[1] as String? + val cannedAdResponseArg = args[1] as String val wrapped: List = try { api.setAdsResponse(pigeon_instanceArg, cannedAdResponseArg) @@ -1750,7 +1750,7 @@ abstract class PigeonApiAdsRequest( channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest - val keywordsArg = args[1] as List? + val keywordsArg = args[1] as List val wrapped: List = try { api.setContentKeywords(pigeon_instanceArg, keywordsArg) @@ -1774,7 +1774,7 @@ abstract class PigeonApiAdsRequest( channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest - val titleArg = args[1] as String? + val titleArg = args[1] as String val wrapped: List = try { api.setContentTitle(pigeon_instanceArg, titleArg) 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 ba56446598b8..2b382216ef86 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 @@ -1664,7 +1664,7 @@ class AdsRequest extends PigeonInternalProxyApiBaseClass { /// Specifies a VAST, VMAP, or ad rules response to be used instead of making /// a request through an ad tag URL. - Future setAdsResponse(String? cannedAdResponse) async { + Future setAdsResponse(String cannedAdResponse) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsRequest; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -1730,7 +1730,7 @@ class AdsRequest extends PigeonInternalProxyApiBaseClass { /// /// This optional parameter is used by AdX requests and is recommended for AdX /// users. - Future setContentKeywords(List? keywords) async { + Future setContentKeywords(List keywords) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsRequest; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -1763,7 +1763,7 @@ class AdsRequest extends PigeonInternalProxyApiBaseClass { /// /// Used in AdX requests. This optional parameter is used by AdX requests and /// is recommended for AdX users. - Future setContentTitle(String? title) async { + Future setContentTitle(String title) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsRequest; 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 86d190563f4c..fed150aaa2d2 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -349,7 +349,7 @@ abstract class AdsRequest { /// Specifies a VAST, VMAP, or ad rules response to be used instead of making /// a request through an ad tag URL. - void setAdsResponse(String? cannedAdResponse); + void setAdsResponse(String cannedAdResponse); /// Specifies the duration of the content in seconds to be shown. /// @@ -361,13 +361,13 @@ abstract class AdsRequest { /// /// This optional parameter is used by AdX requests and is recommended for AdX /// users. - void setContentKeywords(List? keywords); + void setContentKeywords(List keywords); /// Specifies the title of the content to be shown. /// /// Used in AdX requests. This optional parameter is used by AdX requests and /// is recommended for AdX users. - void setContentTitle(String? title); + void setContentTitle(String title); /// Notifies the SDK whether the player intends to continuously play the /// content videos one after another similar to TV broadcast. From dbd55824fe4f5199ae903d443289f8a3b7d2797d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:14:09 -0400 Subject: [PATCH 04/11] android implementation --- .../AdsRequestProxyApi.kt | 22 ++--- .../AdsRequestProxyApiTest.kt | 96 ++++++++++++++++++- 2 files changed, 103 insertions(+), 15 deletions(-) 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 b2a98b8e28b9..3c75780fb161 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 @@ -45,34 +45,34 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : } override fun setAdWillPlayMuted(pigeon_instance: AdsRequest, willPlayMuted: Boolean) { - TODO("Not yet implemented") + pigeon_instance.setAdWillPlayMuted(willPlayMuted) } - override fun setAdsResponse(pigeon_instance: AdsRequest, cannedAdResponse: String?) { - TODO("Not yet implemented") + override fun setAdsResponse(pigeon_instance: AdsRequest, cannedAdResponse: String) { + pigeon_instance.adsResponse = cannedAdResponse } override fun setContentDuration(pigeon_instance: AdsRequest, duration: Double) { - TODO("Not yet implemented") + pigeon_instance.setContentDuration(duration.toFloat()) } - override fun setContentKeywords(pigeon_instance: AdsRequest, keywords: List?) { - TODO("Not yet implemented") + override fun setContentKeywords(pigeon_instance: AdsRequest, keywords: List) { + pigeon_instance.setContentKeywords(keywords) } - override fun setContentTitle(pigeon_instance: AdsRequest, title: String?) { - TODO("Not yet implemented") + override fun setContentTitle(pigeon_instance: AdsRequest, title: String) { + pigeon_instance.setContentTitle(title) } override fun setContinuousPlayback(pigeon_instance: AdsRequest, continuousPlayback: Boolean) { - TODO("Not yet implemented") + pigeon_instance.setContinuousPlayback(continuousPlayback) } override fun setLiveStreamPrefetchSeconds(pigeon_instance: AdsRequest, prefetchTime: Double) { - TODO("Not yet implemented") + pigeon_instance.setLiveStreamPrefetchSeconds(prefetchTime.toFloat()) } override fun setVastLoadTimeout(pigeon_instance: AdsRequest, timeout: Double) { - TODO("Not yet implemented") + pigeon_instance.setVastLoadTimeout(timeout.toFloat()) } } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt index e3e9e2baf557..9ca5ceb67502 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt @@ -36,13 +36,101 @@ class AdsRequestProxyApiTest { } @Test - fun setContentProgressProvider() { + fun setAdWillAutoPlay() { val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() val instance = mock() - val mockProvider = mock() - api.setContentProgressProvider(instance, mockProvider) + val willAutoPlay = true + api.setAdWillAutoPlay(instance, willAutoPlay) - verify(instance).contentProgressProvider = mockProvider + verify(instance).setAdWillAutoPlay(willAutoPlay) + } + + @Test + fun setAdWillPlayMuted() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val willPlayMuted = false + api.setAdWillPlayMuted(instance, willPlayMuted) + + verify(instance).setAdWillPlayMuted(willPlayMuted) + } + + @Test + fun setAdsResponse() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val cannedAdResponse = "response" + api.setAdsResponse(instance, cannedAdResponse) + + verify(instance).adsResponse = cannedAdResponse + } + + @Test + fun setContentDuration() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val duration = 3.0 + api.setContentDuration(instance, duration) + + verify(instance).setContentDuration(duration.toFloat()) + } + + @Test + fun setContentKeywords() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val keywords = listOf("good", "by") + api.setContentKeywords(instance, keywords) + + verify(instance).setContentKeywords(keywords) + } + + @Test + fun setContentTitle() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val title = "title" + api.setContentTitle(instance, title) + + verify(instance).setContentTitle(title) + } + + @Test + fun setContinuousPlayback() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val continuousPlayback = false + api.setContinuousPlayback(instance, continuousPlayback) + + verify(instance).setContinuousPlayback(continuousPlayback) + } + + @Test + fun setLiveStreamPrefetchSeconds() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val prefetchTime = 4.0 + api.setLiveStreamPrefetchSeconds(instance, prefetchTime) + + verify(instance).setLiveStreamPrefetchSeconds(prefetchTime.toFloat()) + } + + @Test + fun setVastLoadTimeout() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val timeout = 1.0 + api.setVastLoadTimeout(instance, timeout) + + verify(instance).setVastLoadTimeout(timeout.toFloat()) } } From 77f92b29b8b736680b1767e3c8d8fe466e3d463f Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:36:38 -0400 Subject: [PATCH 05/11] implementation of ios adsrequest methods --- .../AdsRequestProxyAPIDelegate.swift | 61 +++++++++++++++++++ .../ProxyApiDelegate.swift | 9 +++ 2 files changed, 70 insertions(+) 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 5da124822d55..daa70accb1d7 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 @@ -29,4 +29,65 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { adTagUrl: modifiedURL, adDisplayContainer: adDisplayContainer, contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil) } + + func withAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, adsResponse: String, adDisplayContainer: IMAAdDisplayContainer, contentPlayhead: (any IMAContentPlayhead)?) throws -> IMAAdsRequest { + return IMAAdsRequest(adsResponse: adsResponse, adDisplayContainer: adDisplayContainer, contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil) + } + + func getAdTagUrl(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> String? { + return pigeonInstance.adTagUrl + } + + func getAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> String? { + return pigeonInstance.adsResponse + } + + func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> IMAAdDisplayContainer { + return pigeonInstance.adDisplayContainer + } + + func setAdWillAutoPlay(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillAutoPlay: Bool) throws { + pigeonInstance.adWillAutoPlay = adWillAutoPlay + } + + func setAdWillPlayMuted(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillPlayMuted: Bool) throws { + pigeonInstance.adWillPlayMuted = adWillPlayMuted + } + + func setContinuousPlayback(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, continuousPlayback: Bool) throws { + pigeonInstance.continuousPlayback = continuousPlayback + } + + func setContentDuration(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, duration: Double) throws { + pigeonInstance.contentDuration = Float(duration) + } + + func setContentKeywords(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, keywords: [String]?) throws { + pigeonInstance.contentKeywords = keywords + } + + func setContentTitle(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, title: String?) throws { + pigeonInstance.contentTitle = title + } + + func setContentURL(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, contentURL: String?) throws { + if let contentURL = contentURL { + let url = URL(string: contentURL) + if let url = url { + pigeonInstance.contentURL = url + } else { + throw (pigeonApi.pigeonRegistrar.apiDelegate as! ProxyApiDelegate).createConstructorNullError(type: URL.Type.self, parameters: ["string": contentURL]) + } + } else { + pigeonInstance.contentURL = nil + } + } + + func setVastLoadTimeout(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, timeout: Double) throws { + pigeonInstance.vastLoadTimeout = Float(timeout) + } + + func setLiveStreamPrefetchSeconds(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, seconds: Double) throws { + pigeonInstance.liveStreamPrefetchSeconds = Float(seconds) + } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift index 8e36cc3cd2dc..22f535191362 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift @@ -13,6 +13,15 @@ open class ProxyApiDelegate: InteractiveMediaAdsLibraryPigeonProxyApiDelegate { code: "UnknownEnumError", message: "\(enumValue) doesn't represent a native value.", details: nil) } + + /// Creates an error when the constructor of a class returns null. + func createConstructorNullError(type: Any.Type, parameters: [String: Any?]) -> PigeonError { + + return PigeonError( + code: "ConstructorReturnedNullError", + message: "Failed to instantiate `\(String(describing: type))` with parameters: \(parameters)", + details: nil) + } func pigeonApiUIView(_ registrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar) -> PigeonApiUIView From 80601a5091a15dafd1531c32bcb86aacd847af8b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:44:44 -0400 Subject: [PATCH 06/11] formatting --- .../AdsRequestProxyApiTest.kt | 1 - .../AdsRequestProxyAPIDelegate.swift | 86 +++++++++++++------ .../ProxyApiDelegate.swift | 14 +-- 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt index 9ca5ceb67502..43206c648b0d 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt @@ -5,7 +5,6 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsRequest -import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify 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 daa70accb1d7..d37f7209c0ad 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 @@ -29,65 +29,95 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { adTagUrl: modifiedURL, adDisplayContainer: adDisplayContainer, contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil) } - - func withAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, adsResponse: String, adDisplayContainer: IMAAdDisplayContainer, contentPlayhead: (any IMAContentPlayhead)?) throws -> IMAAdsRequest { - return IMAAdsRequest(adsResponse: adsResponse, adDisplayContainer: adDisplayContainer, contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil) + + func withAdsResponse( + pigeonApi: PigeonApiIMAAdsRequest, adsResponse: String, + adDisplayContainer: IMAAdDisplayContainer, contentPlayhead: (any IMAContentPlayhead)? + ) throws -> IMAAdsRequest { + return IMAAdsRequest( + adsResponse: adsResponse, adDisplayContainer: adDisplayContainer, + contentPlayhead: contentPlayhead as? ContentPlayheadImpl, userContext: nil) } - - func getAdTagUrl(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> String? { + + func getAdTagUrl(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws + -> String? + { return pigeonInstance.adTagUrl } - - func getAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> String? { + + func getAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws + -> String? + { return pigeonInstance.adsResponse } - - func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> IMAAdDisplayContainer { + + func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) + throws -> IMAAdDisplayContainer + { return pigeonInstance.adDisplayContainer } - - func setAdWillAutoPlay(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillAutoPlay: Bool) throws { + + func setAdWillAutoPlay( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillAutoPlay: Bool + ) throws { pigeonInstance.adWillAutoPlay = adWillAutoPlay } - - func setAdWillPlayMuted(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillPlayMuted: Bool) throws { + + func setAdWillPlayMuted( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillPlayMuted: Bool + ) throws { pigeonInstance.adWillPlayMuted = adWillPlayMuted } - - func setContinuousPlayback(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, continuousPlayback: Bool) throws { + + func setContinuousPlayback( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, continuousPlayback: Bool + ) throws { pigeonInstance.continuousPlayback = continuousPlayback } - - func setContentDuration(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, duration: Double) throws { + + func setContentDuration( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, duration: Double + ) throws { pigeonInstance.contentDuration = Float(duration) } - - func setContentKeywords(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, keywords: [String]?) throws { + + func setContentKeywords( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, keywords: [String]? + ) throws { pigeonInstance.contentKeywords = keywords } - - func setContentTitle(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, title: String?) throws { + + func setContentTitle( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, title: String? + ) throws { pigeonInstance.contentTitle = title } - - func setContentURL(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, contentURL: String?) throws { + + func setContentURL( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, contentURL: String? + ) throws { if let contentURL = contentURL { let url = URL(string: contentURL) if let url = url { pigeonInstance.contentURL = url } else { - throw (pigeonApi.pigeonRegistrar.apiDelegate as! ProxyApiDelegate).createConstructorNullError(type: URL.Type.self, parameters: ["string": contentURL]) + throw (pigeonApi.pigeonRegistrar.apiDelegate as! ProxyApiDelegate) + .createConstructorNullError(type: URL.Type.self, parameters: ["string": contentURL]) } } else { pigeonInstance.contentURL = nil } } - - func setVastLoadTimeout(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, timeout: Double) throws { + + func setVastLoadTimeout( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, timeout: Double + ) throws { pigeonInstance.vastLoadTimeout = Float(timeout) } - - func setLiveStreamPrefetchSeconds(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, seconds: Double) throws { + + func setLiveStreamPrefetchSeconds( + pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, seconds: Double + ) throws { pigeonInstance.liveStreamPrefetchSeconds = Float(seconds) } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift index 22f535191362..8c747e9c4f71 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift @@ -13,15 +13,15 @@ open class ProxyApiDelegate: InteractiveMediaAdsLibraryPigeonProxyApiDelegate { code: "UnknownEnumError", message: "\(enumValue) doesn't represent a native value.", details: nil) } - + /// Creates an error when the constructor of a class returns null. - func createConstructorNullError(type: Any.Type, parameters: [String: Any?]) -> PigeonError { + func createConstructorNullError(type: Any.Type, parameters: [String: Any?]) -> PigeonError { - return PigeonError( - code: "ConstructorReturnedNullError", - message: "Failed to instantiate `\(String(describing: type))` with parameters: \(parameters)", - details: nil) - } + return PigeonError( + code: "ConstructorReturnedNullError", + message: "Failed to instantiate `\(String(describing: type))` with parameters: \(parameters)", + details: nil) + } func pigeonApiUIView(_ registrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar) -> PigeonApiUIView From ab670f563332d7bd0fa48d8aeb34054c77422b90 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:06:57 -0400 Subject: [PATCH 07/11] first tests pass for ios --- .../ios/RunnerTests/AdsRequestTests.swift | 31 +++++++++++++++++++ .../AdsRequestProxyAPIDelegate.swift | 12 +++---- .../ProxyApiDelegate.swift | 1 - 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift index c7b6c0b4ed63..a4d069d32580 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift @@ -49,4 +49,35 @@ final class AdsRequestTests: XCTestCase { instance?.adTagUrl, "adTag#?") } + + func testWithAdsResponse() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = try? api.pigeonDelegate.withAdsResponse( + pigeonApi: api, adsResponse: "response", adDisplayContainer: container, + contentPlayhead: contentPlayhead) + + XCTAssertNotNil(instance) + XCTAssertEqual( + instance?.adsResponse, + "response") + XCTAssertIdentical(instance?.adDisplayContainer, container) + } + + func testGetAdTagUrl() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let adTagUrl = "url" + let instance = IMAAdsRequest(adTagUrl: adTagUrl, adDisplayContainer: container, contentPlayhead: contentPlayhead, userContext: nil) + + let value = try? api.pigeonDelegate.getAdTagUrl(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, adTagUrl) + } } 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 d37f7209c0ad..64b114d924dc 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 @@ -44,6 +44,12 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { { return pigeonInstance.adTagUrl } + + func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) + throws -> IMAAdDisplayContainer + { + return pigeonInstance.adDisplayContainer + } func getAdsResponse(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> String? @@ -51,12 +57,6 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { return pigeonInstance.adsResponse } - func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) - throws -> IMAAdDisplayContainer - { - return pigeonInstance.adDisplayContainer - } - func setAdWillAutoPlay( pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest, adWillAutoPlay: Bool ) throws { diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift index 8c747e9c4f71..3a14efd82e48 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/ProxyApiDelegate.swift @@ -16,7 +16,6 @@ open class ProxyApiDelegate: InteractiveMediaAdsLibraryPigeonProxyApiDelegate { /// Creates an error when the constructor of a class returns null. func createConstructorNullError(type: Any.Type, parameters: [String: Any?]) -> PigeonError { - return PigeonError( code: "ConstructorReturnedNullError", message: "Failed to instantiate `\(String(describing: type))` with parameters: \(parameters)", From be8172676acda41014dcd1b115f1d72830029ff7 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:25:30 -0400 Subject: [PATCH 08/11] ads request test --- .../ios/RunnerTests/AdsRequestTests.swift | 196 +++++++++++++++++- .../AdsRequestProxyAPIDelegate.swift | 2 +- 2 files changed, 192 insertions(+), 6 deletions(-) diff --git a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift index a4d069d32580..dccd25a92919 100644 --- a/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift +++ b/packages/interactive_media_ads/example/ios/RunnerTests/AdsRequestTests.swift @@ -49,7 +49,7 @@ final class AdsRequestTests: XCTestCase { instance?.adTagUrl, "adTag#?") } - + func testWithAdsResponse() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) @@ -66,7 +66,7 @@ final class AdsRequestTests: XCTestCase { "response") XCTAssertIdentical(instance?.adDisplayContainer, container) } - + func testGetAdTagUrl() { let registrar = TestProxyApiRegistrar() let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) @@ -74,10 +74,196 @@ final class AdsRequestTests: XCTestCase { let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) let contentPlayhead = ContentPlayheadImpl() let adTagUrl = "url" - let instance = IMAAdsRequest(adTagUrl: adTagUrl, adDisplayContainer: container, contentPlayhead: contentPlayhead, userContext: nil) - + let instance = IMAAdsRequest( + adTagUrl: adTagUrl, adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + let value = try? api.pigeonDelegate.getAdTagUrl(pigeonApi: api, pigeonInstance: instance) - + XCTAssertEqual(value, adTagUrl) } + + func testGetAdsResponse() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let adsResponse = "url" + let instance = IMAAdsRequest( + adsResponse: adsResponse, adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let value = try? api.pigeonDelegate.getAdsResponse(pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, adsResponse) + } + + func testGetAdDisplayContainer() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let value = try? api.pigeonDelegate.getAdDisplayContainer( + pigeonApi: api, pigeonInstance: instance) + + XCTAssertEqual(value, container) + } + + func testSetAdWillAutoPlay() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let adWillAutoPlay = true + try? api.pigeonDelegate.setAdWillAutoPlay( + pigeonApi: api, pigeonInstance: instance, adWillAutoPlay: adWillAutoPlay) + + XCTAssertEqual(instance.adWillAutoPlay, adWillAutoPlay) + } + + func testSetAdWillPlayMuted() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let adWillPlayMuted = false + try? api.pigeonDelegate.setAdWillPlayMuted( + pigeonApi: api, pigeonInstance: instance, adWillPlayMuted: adWillPlayMuted) + + XCTAssertEqual(instance.adWillPlayMuted, adWillPlayMuted) + } + + func testSetContinuousPlayback() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let continuousPlayback = true + try? api.pigeonDelegate.setContinuousPlayback( + pigeonApi: api, pigeonInstance: instance, continuousPlayback: continuousPlayback) + + XCTAssertEqual(instance.continuousPlayback, continuousPlayback) + } + + func testSetContentDuration() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let duration = 3.0 + try? api.pigeonDelegate.setContentDuration( + pigeonApi: api, pigeonInstance: instance, duration: duration) + + XCTAssertEqual(instance.contentDuration, Float(duration)) + } + + func testSetContentKeywords() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let keywords = ["hello"] + try? api.pigeonDelegate.setContentKeywords( + pigeonApi: api, pigeonInstance: instance, keywords: keywords) + + XCTAssertEqual(instance.contentKeywords, keywords) + } + + func testSetContentTitle() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let title = "hello" + try? api.pigeonDelegate.setContentTitle(pigeonApi: api, pigeonInstance: instance, title: title) + + XCTAssertEqual(instance.contentTitle, title) + } + + func testSetContentURL() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let contentURL = "https://www.google.com" + try? api.pigeonDelegate.setContentURL( + pigeonApi: api, pigeonInstance: instance, contentURL: contentURL) + + XCTAssertEqual(instance.contentURL, URL(string: contentURL)) + } + + func testSetVastLoadTimeout() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let timeout = 3.0 + try? api.pigeonDelegate.setVastLoadTimeout( + pigeonApi: api, pigeonInstance: instance, timeout: timeout) + + XCTAssertEqual(instance.vastLoadTimeout, Float(timeout)) + } + + func testSetLiveStreamPrefetchSeconds() { + let registrar = TestProxyApiRegistrar() + let api = registrar.apiDelegate.pigeonApiIMAAdsRequest(registrar) + + let container = IMAAdDisplayContainer(adContainer: UIView(), viewController: nil) + let contentPlayhead = ContentPlayheadImpl() + let instance = IMAAdsRequest( + adTagUrl: "url", adDisplayContainer: container, contentPlayhead: contentPlayhead, + userContext: nil) + + let seconds = 3.0 + try? api.pigeonDelegate.setLiveStreamPrefetchSeconds( + pigeonApi: api, pigeonInstance: instance, seconds: seconds) + + XCTAssertEqual(instance.liveStreamPrefetchSeconds, Float(seconds)) + } } 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 64b114d924dc..07202f48a0db 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 @@ -44,7 +44,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { { return pigeonInstance.adTagUrl } - + func getAdDisplayContainer(pigeonApi: PigeonApiIMAAdsRequest, pigeonInstance: IMAAdsRequest) throws -> IMAAdDisplayContainer { From 9382fc774f936707dfa3bcbd0a5f0ec4953a7b19 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 22 Jul 2025 17:29:45 -0400 Subject: [PATCH 09/11] version bump --- packages/interactive_media_ads/CHANGELOG.md | 5 +++++ .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 2 +- .../interactive_media_ads/AdsRequestProxyAPIDelegate.swift | 2 +- packages/interactive_media_ads/pubspec.yaml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 9220cc30a887..5cc1d2bf54e8 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.2.4+3 + +* Adds remaining methods for internal wrapper of the Android native `AdsRequest`. +* Adds remaining methods for internal wrapper of the iOS native `IMAAdsRequest`. + ## 0.2.4+2 * Bumps gradle from 8.9.0 to 8.11.1. 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 55c36520ad62..5394fc311b6f 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.2.4+2" + const val pluginVersion = "0.2.4+3" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { 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 3c07a1b7a5ac..25c3e8cf7b24 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.2.4+2" + static let pluginVersion = "0.2.4+3" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 53024d7a1bdc..b6848645f87a 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.2.4+2 # This must match the version in +version: 0.2.4+3 # 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` From 65368f5b461643c2b4ee72172623bb88c32bfe1e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:04:16 -0400 Subject: [PATCH 10/11] add test back --- .../interactive_media_ads/AdsRequestProxyApiTest.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt index 43206c648b0d..2951a19a6901 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt @@ -5,6 +5,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsRequest +import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify @@ -34,6 +35,17 @@ class AdsRequestProxyApiTest { verify(instance).adTagUrl = "adTag?#" } + @Test + fun setContentProgressProvider() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val mockProvider = mock() + api.setContentProgressProvider(instance, mockProvider) + + verify(instance).contentProgressProvider = mockProvider + } + @Test fun setAdWillAutoPlay() { val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() From e05a81ca9a3b7f8d926df5e50af621c34a26a514 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 28 Jul 2025 13:39:11 -0400 Subject: [PATCH 11/11] fix changelog --- packages/interactive_media_ads/CHANGELOG.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 5c7c3ac4034f..1bb1057597ca 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,13 +1,11 @@ -<<<<<<< HEAD -## 0.2.4+3 +## 0.2.5+1 * Adds remaining methods for internal wrapper of the Android native `AdsRequest`. * Adds remaining methods for internal wrapper of the iOS native `IMAAdsRequest`. -======= + ## 0.2.5 * Adds support to set general SDK settings. See `ImaSettings` and `AdsLoader.settings`. ->>>>>>> 6b2e34edba3cc4b6d7198822094afc5720d9271c ## 0.2.4+2