diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index af8606dce33..ebf0512682a 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.2+4 + +* Adds internal wrapper for Android native `AdProgressInfo`. + ## 0.2.2+3 * Adds internal wrapper for iOS native `IMAFriendlyObstruction`. diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdProgressInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdProgressInfoProxyApi.kt new file mode 100644 index 00000000000..51fbf0c54e4 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdProgressInfoProxyApi.kt @@ -0,0 +1,41 @@ +// 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. + +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdProgressInfo + +/** + * ProxyApi implementation for [AdProgressInfo]. + * + *

This class may handle instantiating native object instances that are attached to a Dart + * instance or handle method calls on the associated native class or an instance of that class. + */ +class AdProgressInfoProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiAdProgressInfo(pigeonRegistrar) { + + override fun adBreakDuration(pigeon_instance: AdProgressInfo): Double { + return pigeon_instance.adBreakDuration + } + + override fun adPeriodDuration(pigeon_instance: AdProgressInfo): Double { + return pigeon_instance.adPeriodDuration + } + + override fun adPosition(pigeon_instance: AdProgressInfo): Long { + return pigeon_instance.adPosition.toLong() + } + + override fun currentTime(pigeon_instance: AdProgressInfo): Double { + return pigeon_instance.currentTime + } + + override fun duration(pigeon_instance: AdProgressInfo): Double { + return pigeon_instance.duration + } + + override fun totalAds(pigeon_instance: AdProgressInfo): Long { + return pigeon_instance.totalAds.toLong() + } +} 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 74c520939af..08333ec3d98 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.2+3" + const val pluginVersion = "0.2.2+4" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt index 7dfd1306625..798bb41f20a 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 (v22.3.0), do not edit directly. +// Autogenerated from Pigeon (v22.4.0), do not edit directly. // See also: https://pub.dev/packages/pigeon @file:Suppress("UNCHECKED_CAST", "ArrayInDataClass", "SyntheticAccessor") @@ -543,6 +543,12 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( */ abstract fun getPigeonApiAdsRenderingSettings(): PigeonApiAdsRenderingSettings + /** + * An implementation of [PigeonApiAdProgressInfo] used to add a new Dart instance of + * `AdProgressInfo` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdProgressInfo(): PigeonApiAdProgressInfo + fun setUp() { InteractiveMediaAdsLibraryPigeonInstanceManagerApi.setUpMessageHandlers( binaryMessenger, instanceManager) @@ -681,6 +687,8 @@ private class InteractiveMediaAdsLibraryPigeonProxyApiBaseCodec( registrar.getPigeonApiAdEventListener().pigeon_newInstance(value) {} } else if (value is com.google.ads.interactivemedia.v3.api.AdsRenderingSettings) { registrar.getPigeonApiAdsRenderingSettings().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdProgressInfo) { + registrar.getPigeonApiAdProgressInfo().pigeon_newInstance(value) {} } when { @@ -4620,3 +4628,93 @@ abstract class PigeonApiAdsRenderingSettings( } } } +/** + * Represents the progress within this ad break. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdProgressInfo.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdProgressInfo( + open val pigeonRegistrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar +) { + /** Total ad break duration (in seconds). */ + abstract fun adBreakDuration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdProgressInfo + ): Double + + /** Total ad period duration (in seconds). */ + abstract fun adPeriodDuration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdProgressInfo + ): Double + + /** The position of current ad within the ad break, starting with 1. */ + abstract fun adPosition( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdProgressInfo + ): Long + + /** Current time within the ad (in seconds). */ + abstract fun currentTime( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdProgressInfo + ): Double + + /** Duration of current ad (in seconds). */ + abstract fun duration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdProgressInfo + ): Double + + /** The total number of ads in this ad break. */ + abstract fun totalAds( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdProgressInfo + ): Long + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdProgressInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdProgressInfo, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.ignoreCallsToDart) { + callback( + Result.failure( + FlutterError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) + return + } + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val adBreakDurationArg = adBreakDuration(pigeon_instanceArg) + val adPeriodDurationArg = adPeriodDuration(pigeon_instanceArg) + val adPositionArg = adPosition(pigeon_instanceArg) + val currentTimeArg = currentTime(pigeon_instanceArg) + val durationArg = duration(pigeon_instanceArg) + val totalAdsArg = totalAds(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send( + listOf( + pigeon_identifierArg, + adBreakDurationArg, + adPeriodDurationArg, + adPositionArg, + currentTimeArg, + durationArg, + totalAdsArg)) { + if (it is List<*>) { + if (it.size > 1) { + callback( + Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) + } else { + callback(Result.success(Unit)) + } + } else { + callback(Result.failure(createConnectionError(channelName))) + } + } + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt index 57667057e68..61707d049bc 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt @@ -129,4 +129,8 @@ open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Cont override fun getPigeonApiAdsRenderingSettings(): PigeonApiAdsRenderingSettings { return AdsRenderingSettingsProxyApi(this) } + + override fun getPigeonApiAdProgressInfo(): PigeonApiAdProgressInfo { + return AdProgressInfoProxyApi(this) + } } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdProgressInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdProgressInfoProxyApiTest.kt new file mode 100644 index 00000000000..8745bbf89f7 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdProgressInfoProxyApiTest.kt @@ -0,0 +1,79 @@ +// 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. + +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdProgressInfo +import kotlin.test.Test +import kotlin.test.assertEquals +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever + +class AdProgressInfoProxyApiTest { + @Test + fun adBreakDuration() { + val api = TestProxyApiRegistrar().getPigeonApiAdProgressInfo() + + val instance = mock() + val value = 1.0 + whenever(instance.adBreakDuration).thenReturn(value) + + assertEquals(value, api.adBreakDuration(instance)) + } + + @Test + fun adPeriodDuration() { + val api = TestProxyApiRegistrar().getPigeonApiAdProgressInfo() + + val instance = mock() + val value = 1.0 + whenever(instance.adPeriodDuration).thenReturn(value) + + assertEquals(value, api.adPeriodDuration(instance)) + } + + @Test + fun adPosition() { + val api = TestProxyApiRegistrar().getPigeonApiAdProgressInfo() + + val instance = mock() + val value = 0 + whenever(instance.adPosition).thenReturn(value) + + assertEquals(value.toLong(), api.adPosition(instance)) + } + + @Test + fun currentTime() { + val api = TestProxyApiRegistrar().getPigeonApiAdProgressInfo() + + val instance = mock() + val value = 1.0 + whenever(instance.currentTime).thenReturn(value) + + assertEquals(value, api.currentTime(instance)) + } + + @Test + fun duration() { + val api = TestProxyApiRegistrar().getPigeonApiAdProgressInfo() + + val instance = mock() + val value = 1.0 + whenever(instance.duration).thenReturn(value) + + assertEquals(value, api.duration(instance)) + } + + @Test + fun totalAds() { + val api = TestProxyApiRegistrar().getPigeonApiAdProgressInfo() + + val instance = mock() + val value = 0 + whenever(instance.totalAds).thenReturn(value) + + assertEquals(value.toLong(), api.totalAds(instance)) + } +} 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 e3588525018..9e3efc5a5e3 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.2+3" + static let pluginVersion = "0.2.2+4" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, 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 4a1dd1516c5..168114afa66 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 (v22.3.0), do not edit directly. +// Autogenerated from Pigeon (v22.4.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 @@ -191,6 +191,8 @@ class PigeonInstanceManager { pigeon_instanceManager: instanceManager); AdsRenderingSettings.pigeon_setUpMessageHandlers( pigeon_instanceManager: instanceManager); + AdProgressInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); return instanceManager; } @@ -1710,7 +1712,7 @@ class AdsManager extends BaseManager { /// List of content time offsets in seconds at which ad breaks are scheduled. /// /// The list will be empty if no ad breaks are scheduled. - Future> getAdCuePoints() async { + Future> getAdCuePoints() async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsManager; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -1738,7 +1740,7 @@ class AdsManager extends BaseManager { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)!.cast(); } } @@ -2020,7 +2022,7 @@ class AdEvent extends PigeonInternalProxyApiBaseClass { final AdEventType type; /// A map containing any extra ad data for the event, if needed. - final Map? adData; + final Map? adData; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, @@ -2028,7 +2030,7 @@ class AdEvent extends PigeonInternalProxyApiBaseClass { PigeonInstanceManager? pigeon_instanceManager, AdEvent Function( AdEventType type, - Map? adData, + Map? adData, )? pigeon_newInstance, }) { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = @@ -2055,8 +2057,8 @@ class AdEvent extends PigeonInternalProxyApiBaseClass { final AdEventType? arg_type = (args[1] as AdEventType?); assert(arg_type != null, 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null, expected non-null AdEventType.'); - final Map? arg_adData = - (args[2] as Map?)?.cast(); + final Map? arg_adData = + (args[2] as Map?)?.cast(); try { (pigeon_instanceManager ?? PigeonInstanceManager.instance) .addHostCreatedInstance( @@ -5203,7 +5205,7 @@ class AdsRenderingSettings extends PigeonInternalProxyApiBaseClass { } /// The SDK will prioritize the media with MIME type on the list. - Future> getMimeTypes() async { + Future> getMimeTypes() async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsRenderingSettings; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -5231,7 +5233,7 @@ class AdsRenderingSettings extends PigeonInternalProxyApiBaseClass { message: 'Host platform returned null value for non-null return value.', ); } else { - return (pigeonVar_replyList[0] as List?)!.cast(); + return (pigeonVar_replyList[0] as List?)!.cast(); } } @@ -5398,7 +5400,7 @@ class AdsRenderingSettings extends PigeonInternalProxyApiBaseClass { /// If specified, the SDK will prioritize the media with MIME type on the /// list. - Future setMimeTypes(List mimeTypes) async { + Future setMimeTypes(List mimeTypes) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsRenderingSettings; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -5455,7 +5457,7 @@ class AdsRenderingSettings extends PigeonInternalProxyApiBaseClass { } /// Sets the ad UI elements to be rendered by the IMA SDK. - Future setUiElements(List uiElements) async { + Future setUiElements(List uiElements) async { final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = _pigeonVar_codecAdsRenderingSettings; final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; @@ -5490,3 +5492,142 @@ class AdsRenderingSettings extends PigeonInternalProxyApiBaseClass { ); } } + +/// Represents the progress within this ad break. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdProgressInfo.html. +class AdProgressInfo extends PigeonInternalProxyApiBaseClass { + /// Constructs [AdProgressInfo] without creating the associated native object. + /// + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + AdProgressInfo.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.adBreakDuration, + required this.adPeriodDuration, + required this.adPosition, + required this.currentTime, + required this.duration, + required this.totalAds, + }); + + /// Total ad break duration (in seconds). + final double adBreakDuration; + + /// Total ad period duration (in seconds). + final double adPeriodDuration; + + /// The position of current ad within the ad break, starting with 1. + final int adPosition; + + /// Current time within the ad (in seconds). + final double currentTime; + + /// Duration of current ad (in seconds). + final double duration; + + /// The total number of ads in this ad break. + final int totalAds; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdProgressInfo Function( + double adBreakDuration, + double adPeriodDuration, + int adPosition, + double currentTime, + double duration, + int totalAds, + )? pigeon_newInstance, + }) { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + pigeonVar_channel.setMessageHandler(null); + } else { + pigeonVar_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null.'); + final List args = (message as List?)!; + final int? arg_pigeon_instanceIdentifier = (args[0] as int?); + assert(arg_pigeon_instanceIdentifier != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null int.'); + final double? arg_adBreakDuration = (args[1] as double?); + assert(arg_adBreakDuration != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null double.'); + final double? arg_adPeriodDuration = (args[2] as double?); + assert(arg_adPeriodDuration != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null double.'); + final int? arg_adPosition = (args[3] as int?); + assert(arg_adPosition != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null int.'); + final double? arg_currentTime = (args[4] as double?); + assert(arg_currentTime != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null double.'); + final double? arg_duration = (args[5] as double?); + assert(arg_duration != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null double.'); + final int? arg_totalAds = (args[6] as int?); + assert(arg_totalAds != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdProgressInfo.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call( + arg_adBreakDuration!, + arg_adPeriodDuration!, + arg_adPosition!, + arg_currentTime!, + arg_duration!, + arg_totalAds!) ?? + AdProgressInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adBreakDuration: arg_adBreakDuration!, + adPeriodDuration: arg_adPeriodDuration!, + adPosition: arg_adPosition!, + currentTime: arg_currentTime!, + duration: arg_duration!, + totalAds: arg_totalAds!, + ), + arg_pigeon_instanceIdentifier!, + ); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + @override + AdProgressInfo pigeon_copy() { + return AdProgressInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adBreakDuration: adBreakDuration, + adPeriodDuration: adPeriodDuration, + adPosition: adPosition, + currentTime: currentTime, + duration: duration, + totalAds: totalAds, + ); + } +} 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 f16486aff2d..fd1adb24e2b 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -834,3 +834,31 @@ abstract class AdsRenderingSettings { /// Sets the ad UI elements to be rendered by the IMA SDK. void setUiElements(List uiElements); } + +/// Represents the progress within this ad break. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdProgressInfo.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdProgressInfo', + ), +) +abstract class AdProgressInfo { + /// Total ad break duration (in seconds). + late final double adBreakDuration; + + /// Total ad period duration (in seconds). + late final double adPeriodDuration; + + /// The position of current ad within the ad break, starting with 1. + late final int adPosition; + + /// Current time within the ad (in seconds). + late final double currentTime; + + /// Duration of current ad (in seconds). + late final double duration; + + /// The total number of ads in this ad break. + late final int totalAds; +} diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index dcd422cbe4e..0fc37ddec89 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.2+3 # This must match the version in +version: 0.2.2+4 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.mocks.dart b/packages/interactive_media_ads/test/android/ads_loader_test.mocks.dart index a56865191d6..48b88129a6a 100644 --- a/packages/interactive_media_ads/test/android/ads_loader_test.mocks.dart +++ b/packages/interactive_media_ads/test/android/ads_loader_test.mocks.dart @@ -570,14 +570,14 @@ class MockAdsManager extends _i1.Mock implements _i2.AdsManager { ) as _i6.Future); @override - _i6.Future> getAdCuePoints() => (super.noSuchMethod( + _i6.Future> getAdCuePoints() => (super.noSuchMethod( Invocation.method( #getAdCuePoints, [], ), - returnValue: _i6.Future>.value([]), - returnValueForMissingStub: _i6.Future>.value([]), - ) as _i6.Future>); + returnValue: _i6.Future>.value([]), + returnValueForMissingStub: _i6.Future>.value([]), + ) as _i6.Future>); @override _i6.Future resume() => (super.noSuchMethod( diff --git a/packages/interactive_media_ads/test/android/ads_manager_test.mocks.dart b/packages/interactive_media_ads/test/android/ads_manager_test.mocks.dart index 5a70ecf2c71..bb4dc3235f0 100644 --- a/packages/interactive_media_ads/test/android/ads_manager_test.mocks.dart +++ b/packages/interactive_media_ads/test/android/ads_manager_test.mocks.dart @@ -436,14 +436,14 @@ class MockAdsManager extends _i1.Mock implements _i2.AdsManager { ) as _i4.Future); @override - _i4.Future> getAdCuePoints() => (super.noSuchMethod( + _i4.Future> getAdCuePoints() => (super.noSuchMethod( Invocation.method( #getAdCuePoints, [], ), - returnValue: _i4.Future>.value([]), - returnValueForMissingStub: _i4.Future>.value([]), - ) as _i4.Future>); + returnValue: _i4.Future>.value([]), + returnValueForMissingStub: _i4.Future>.value([]), + ) as _i4.Future>); @override _i4.Future resume() => (super.noSuchMethod( diff --git a/packages/interactive_media_ads/test/ios/ad_display_container_test.mocks.dart b/packages/interactive_media_ads/test/ios/ad_display_container_test.mocks.dart index 6d07b9fcad2..cb8c37e05dc 100644 --- a/packages/interactive_media_ads/test/ios/ad_display_container_test.mocks.dart +++ b/packages/interactive_media_ads/test/ios/ad_display_container_test.mocks.dart @@ -174,6 +174,28 @@ class MockUIViewController extends _i1.Mock implements _i2.UIViewController { ), ) as _i2.PigeonInstanceManager); + @override + _i2.UIView pigeonVar_view() => (super.noSuchMethod( + Invocation.method( + #pigeonVar_view, + [], + ), + returnValue: _FakeUIView_2( + this, + Invocation.method( + #pigeonVar_view, + [], + ), + ), + returnValueForMissingStub: _FakeUIView_2( + this, + Invocation.method( + #pigeonVar_view, + [], + ), + ), + ) as _i2.UIView); + @override _i2.UIViewController pigeon_copy() => (super.noSuchMethod( Invocation.method( diff --git a/packages/interactive_media_ads/test/ios/ads_loader_test.mocks.dart b/packages/interactive_media_ads/test/ios/ads_loader_test.mocks.dart index 2be4284c1ce..a19db9487f1 100644 --- a/packages/interactive_media_ads/test/ios/ads_loader_test.mocks.dart +++ b/packages/interactive_media_ads/test/ios/ads_loader_test.mocks.dart @@ -539,6 +539,28 @@ class MockUIViewController extends _i1.Mock implements _i2.UIViewController { ), ) as _i2.PigeonInstanceManager); + @override + _i2.UIView pigeonVar_view() => (super.noSuchMethod( + Invocation.method( + #pigeonVar_view, + [], + ), + returnValue: _FakeUIView_6( + this, + Invocation.method( + #pigeonVar_view, + [], + ), + ), + returnValueForMissingStub: _FakeUIView_6( + this, + Invocation.method( + #pigeonVar_view, + [], + ), + ), + ) as _i2.UIView); + @override _i2.UIViewController pigeon_copy() => (super.noSuchMethod( Invocation.method(