From 9f02730aa6c2b44fb0bc7c1d3fbcf31a8b967aec Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:35:58 -0400 Subject: [PATCH 01/76] get libraries to generate --- .../android/build.gradle | 7 +- .../GeneratedInteractiveMediaAdsLibrary.kt | 646 ++++++++++++++++ .../android/app/src/main/AndroidManifest.xml | 4 + .../src/android/interactive_media_ads.g.dart | 728 ++++++++++++++++++ .../interactive_media_ads_android.dart | 74 ++ packages/interactive_media_ads/pubspec.yaml | 5 + 6 files changed, 1463 insertions(+), 1 deletion(-) create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt create mode 100644 packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart create mode 100644 packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart diff --git a/packages/interactive_media_ads/android/build.gradle b/packages/interactive_media_ads/android/build.gradle index 3490e07ba38..46ccfe2232e 100644 --- a/packages/interactive_media_ads/android/build.gradle +++ b/packages/interactive_media_ads/android/build.gradle @@ -2,7 +2,7 @@ group 'dev.flutter.packages.interactive_media_ads' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.7.10' + ext.kotlin_version = '1.8.0' repositories { google() mavenCentral() @@ -51,10 +51,15 @@ android { dependencies { implementation 'androidx.annotation:annotation:1.5.0' + implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.jetbrains.kotlin:kotlin-test' testImplementation 'org.mockito:mockito-inline:5.1.0' testImplementation 'androidx.test:core:1.3.0' + + // org.jetbrains.kotlin:kotlin-bom artifact purpose is to align kotlin stdlib and related code versions. + // See: https://youtrack.jetbrains.com/issue/KT-55297/kotlin-stdlib-should-declare-constraints-on-kotlin-stdlib-jdk8-and-kotlin-stdlib-jdk7 + implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.10")) } lintOptions { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt new file mode 100644 index 00000000000..96f4090ffd5 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -0,0 +1,646 @@ +// Autogenerated from Pigeon (v18.1.0), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +package dev.flutter.packages.interactive_media_ads + +import android.util.Log +import io.flutter.plugin.common.BasicMessageChannel +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.MessageCodec +import io.flutter.plugin.common.StandardMessageCodec +import java.io.ByteArrayOutputStream +import java.nio.ByteBuffer + +private fun wrapResult(result: Any?): List { + return listOf(result) +} + +private fun wrapError(exception: Throwable): List { + if (exception is FlutterError) { + return listOf( + exception.code, + exception.message, + exception.details + ) + } else { + return listOf( + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception) + ) + } +} + +private fun createConnectionError(channelName: String): FlutterError { + return FlutterError("channel-error", "Unable to establish connection on channel: '$channelName'.", "")} + +/** + * Error class for passing custom error details to Flutter via a thrown PlatformException. + * @property code The error code. + * @property message The error message. + * @property details The error details. Must be a datatype supported by the api codec. + */ +class FlutterError ( + val code: String, + override val message: String? = null, + val details: Any? = null +) : Throwable() +/** + * Maintains instances used to communicate with the corresponding objects in Dart. + * + *

Objects stored in this container are represented by an object in Dart that is also stored in + * an InstanceManager with the same identifier. + * + *

When an instance is added with an identifier, either can be used to retrieve the other. + * + *

Added instances are added as a weak reference and a strong reference. When the strong + * reference is removed with [remove] and the weak reference is deallocated, the + * `finalizationListener` is made with the instance's identifier. However, if the strong reference + * is removed and then the identifier is retrieved with the intention to pass the identifier to Dart + * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the + * instance is recreated. The strong reference will then need to be removed manually again. + */ +@Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused") +class PigeonInstanceManager(private val finalizationListener: PigeonFinalizationListener) { + /** Interface for listening when a weak reference of an instance is removed from the manager. */ + interface PigeonFinalizationListener { + fun onFinalize(identifier: Long) + } + + private val identifiers = java.util.WeakHashMap() + private val weakInstances = HashMap>() + private val strongInstances = HashMap() + private val referenceQueue = java.lang.ref.ReferenceQueue() + private val weakReferencesToIdentifiers = HashMap, Long>() + private val handler = android.os.Handler(android.os.Looper.getMainLooper()) + private var nextIdentifier: Long = minHostCreatedIdentifier + private var hasFinalizationListenerStopped = false + + /** + * Modifies the time interval used to define how often this instance removes garbage collected + * weak references to native Android objects that this instance was managing. + */ + var clearFinalizedWeakReferencesInterval: Long = 3000 + set(value) { + handler.removeCallbacks { this.releaseAllFinalizedInstances() } + field = value + releaseAllFinalizedInstances() + } + + init { + handler.postDelayed( + { releaseAllFinalizedInstances() }, + clearFinalizedWeakReferencesInterval + ) + } + + companion object { + // Identifiers are locked to a specific range to avoid collisions with objects + // created simultaneously from Dart. + // Host uses identifiers >= 2^16 and Dart is expected to use values n where, + // 0 <= n < 2^16. + private const val minHostCreatedIdentifier: Long = 65536 + private const val tag = "PigeonInstanceManager" + + /** + * Instantiate a new manager. + * + * + * When the manager is no longer needed, [stopFinalizationListener] must be called. + * + * @param finalizationListener the listener for garbage collected weak references. + * @return a new `PigeonInstanceManager`. + */ + fun create(finalizationListener: PigeonFinalizationListener): PigeonInstanceManager { + return PigeonInstanceManager(finalizationListener) + } + } + + /** + * Removes `identifier` and its associated strongly referenced instance, if present, from the + * manager. + * + * @param identifier the identifier paired to an instance. + * @param the expected return type. + * @return the removed instance if the manager contains the given identifier, otherwise `null` if + * the manager doesn't contain the value. + */ + fun remove(identifier: Long): T? { + logWarningIfFinalizationListenerHasStopped() + return strongInstances.remove(identifier) as T? + } + + /** + * Retrieves the identifier paired with an instance. + * + * + * If the manager contains a strong reference to `instance`, it will return the identifier + * associated with `instance`. If the manager contains only a weak reference to `instance`, a new + * strong reference to `instance` will be added and will need to be removed again with [remove]. + * + * + * If this method returns a nonnull identifier, this method also expects the Dart + * `PigeonInstanceManager` to have, or recreate, a weak reference to the Dart instance the + * identifier is associated with. + * + * @param instance an instance that may be stored in the manager. + * @return the identifier associated with `instance` if the manager contains the value, otherwise + * `null` if the manager doesn't contain the value. + */ + fun getIdentifierForStrongReference(instance: Any?): Long? { + logWarningIfFinalizationListenerHasStopped() + val identifier = identifiers[instance] + if (identifier != null) { + strongInstances[identifier] = instance!! + } + return identifier + } + + /** + * Adds a new instance that was instantiated from Dart. + * + * + * The same instance can be added multiple times, but each identifier must be unique. This + * allows two objects that are equivalent (e.g. the `equals` method returns true and their + * hashcodes are equal) to both be added. + * + * @param instance the instance to be stored. + * @param identifier the identifier to be paired with instance. This value must be >= 0 and + * unique. + */ + fun addDartCreatedInstance(instance: Any, identifier: Long) { + logWarningIfFinalizationListenerHasStopped() + addInstance(instance, identifier) + } + + /** + * Adds a new instance that was instantiated from the host platform. + * + * @param instance the instance to be stored. This must be unique to all other added instances. + * @return the unique identifier (>= 0) stored with instance. + */ + fun addHostCreatedInstance(instance: Any): Long { + logWarningIfFinalizationListenerHasStopped() + require(!containsInstance(instance)) { "Instance of ${instance.javaClass} has already been added." } + val identifier = nextIdentifier++ + addInstance(instance, identifier) + return identifier + } + + /** + * Retrieves the instance associated with identifier. + * + * @param identifier the identifier associated with an instance. + * @param the expected return type. + * @return the instance associated with `identifier` if the manager contains the value, otherwise + * `null` if the manager doesn't contain the value. + */ + fun getInstance(identifier: Long): T? { + logWarningIfFinalizationListenerHasStopped() + val instance = weakInstances[identifier] as java.lang.ref.WeakReference? + return instance?.get() + } + + /** + * Returns whether this manager contains the given `instance`. + * + * @param instance the instance whose presence in this manager is to be tested. + * @return whether this manager contains the given `instance`. + */ + fun containsInstance(instance: Any?): Boolean { + logWarningIfFinalizationListenerHasStopped() + return identifiers.containsKey(instance) + } + + /** + * Stop the periodic run of the [PigeonFinalizationListener] for instances that have been garbage + * collected. + * + * + * The InstanceManager can continue to be used, but the [PigeonFinalizationListener] will no + * longer be called and methods will log a warning. + */ + fun stopFinalizationListener() { + handler.removeCallbacks { this.releaseAllFinalizedInstances() } + hasFinalizationListenerStopped = true + } + + /** + * Removes all of the instances from this manager. + * + * + * The manager will be empty after this call returns. + */ + fun clear() { + identifiers.clear() + weakInstances.clear() + strongInstances.clear() + weakReferencesToIdentifiers.clear() + } + + /** + * Whether the [PigeonFinalizationListener] is still being called for instances that are garbage + * collected. + * + * + * See [stopFinalizationListener]. + */ + fun hasFinalizationListenerStopped(): Boolean { + return hasFinalizationListenerStopped + } + + private fun releaseAllFinalizedInstances() { + if (hasFinalizationListenerStopped()) { + return + } + var reference: java.lang.ref.WeakReference? + while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != null) { + val identifier = weakReferencesToIdentifiers.remove(reference) + if (identifier != null) { + weakInstances.remove(identifier) + strongInstances.remove(identifier) + finalizationListener.onFinalize(identifier) + } + } + handler.postDelayed( + { releaseAllFinalizedInstances() }, + clearFinalizedWeakReferencesInterval + ) + } + + private fun addInstance(instance: Any, identifier: Long) { + require(identifier >= 0) { "Identifier must be >= 0: $identifier" } + require(!weakInstances.containsKey(identifier)) { + "Identifier has already been added: $identifier" + } + val weakReference = java.lang.ref.WeakReference(instance, referenceQueue) + identifiers[instance] = identifier + weakInstances[identifier] = weakReference + weakReferencesToIdentifiers[weakReference] = identifier + strongInstances[identifier] = instance + } + + private fun logWarningIfFinalizationListenerHasStopped() { + if (hasFinalizationListenerStopped()) { + Log.w( + tag, + "The manager was used after calls to the PigeonFinalizationListener has been stopped." + ) + } + } +} + +/** +* Generated API for managing the Dart and native `PigeonInstanceManager`s. +*/ +private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { + companion object { + /** The codec used by PigeonInstanceManagerApi. */ + private val codec: MessageCodec by lazy { + StandardMessageCodec() + } + + /** + * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the + * `binaryMessenger`. + */ + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, instanceManager: PigeonInstanceManager?) { + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", codec) + if (instanceManager != null) { + channel.setMessageHandler { message, reply -> + val identifier = message as Number + val wrapped: List = try { + instanceManager.remove(identifier.toLong()) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", codec) + if (instanceManager != null) { + channel.setMessageHandler { _, reply -> + val wrapped: List = try { + instanceManager.clear() + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { + val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(identifier) { + 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))) + } + } + } +} + +/** + * Provides implementations for each ProxyApi implementation and provides access to resources + * needed by any implementation. + */ +abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { + val instanceManager: PigeonInstanceManager + private var _codec: StandardMessageCodec? = null + val codec: StandardMessageCodec + get() { + if (_codec == null) { + _codec = PigeonProxyApiBaseCodec(this) + } + return _codec!! + } + + init { + val api = PigeonInstanceManagerApi(binaryMessenger) + instanceManager = + PigeonInstanceManager.create( + object : PigeonInstanceManager.PigeonFinalizationListener { + override fun onFinalize(identifier: Long) { + api.removeStrongReference(identifier) { + if (it.isFailure) { + Log.e( + "PigeonProxyApiRegistrar", + "Failed to remove Dart strong reference with identifier: $identifier" + ) + } + } + } + }) + } + + /** + * An implementation of [PigeonApiBaseDisplayContainer] used to add a new Dart instance of + * `BaseDisplayContainer` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer + + /** + * An implementation of [PigeonApiAdDisplayContainer] used to add a new Dart instance of + * `AdDisplayContainer` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer + + /** + * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of + * `AdsLoader` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdsLoader(): PigeonApiAdsLoader + + /** + * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of + * `AdsRequest` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdsRequest(): PigeonApiAdsRequest + + /** + * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of + * `AdsManager` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdsManager(): PigeonApiAdsManager + + fun setUp() { + PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, instanceManager) + } + fun tearDown() { + PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null) + } +} +private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : StandardMessageCodec() { + override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { + return when (type) { + 128.toByte() -> { + return registrar.instanceManager.getInstance( + readValue(buffer).let { if (it is Int) it.toLong() else it as Long }) + } + else -> super.readValueOfType(type, buffer) + } + } + + override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { + if (value is com.google.ads.interactivemedia.v3.api.AdDisplayContainer) { + registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { + registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { + registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { + registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { + registrar.getPigeonApiAdsManager().pigeon_newInstance(value) { } + } + + when { + registrar.instanceManager.containsInstance(value) -> { + stream.write(128) + writeValue(stream, registrar.instanceManager.getIdentifierForStrongReference(value)) + } + else -> super.writeValue(stream, value) + } + } +} +/** + * A base class for more specialized container interfaces. + * + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /**Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, callback: (Result) -> Unit) +{ + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + +} +/** + * A container in which to display the ads. + * + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /**Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, callback: (Result) -> Unit) +{ + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + + @Suppress("FunctionName") + /**An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ + fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer + { + return pigeonRegistrar.getPigeonApiBaseDisplayContainer() + } + +} +/** + * An object which allows publishers to request ads from ad servers or a + * dynamic ad insertion stream. + * + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /**Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, callback: (Result) -> Unit) +{ + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + +} +/** + * 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. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /**Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, callback: (Result) -> Unit) +{ + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + +} +/** + * An object which handles playing ads after they've been received from the + * server. + * + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /**Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, callback: (Result) -> Unit) +{ + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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/example/android/app/src/main/AndroidManifest.xml b/packages/interactive_media_ads/example/android/app/src/main/AndroidManifest.xml index 8733f2b862a..73dc642f81e 100644 --- a/packages/interactive_media_ads/example/android/app/src/main/AndroidManifest.xml +++ b/packages/interactive_media_ads/example/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,8 @@ + + + + wrapResponse({Object? result, PlatformException? error, bool empty = false}) { + if (empty) { + return []; + } + if (error == null) { + return [result]; + } + return [error.code, error.message, error.details]; +} +/// An immutable object that serves as the base class for all ProxyApis and +/// can provide functional copies of itself. +/// +/// All implementers are expected to be [immutable] as defined by the annotation +/// and override [pigeon_copy] returning an instance of itself. +@immutable +abstract class PigeonProxyApiBaseClass { + /// Construct a [PigeonProxyApiBaseClass]. + PigeonProxyApiBaseClass({ + this.pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) : pigeon_instanceManager = + pigeon_instanceManager ?? PigeonInstanceManager.instance; + + /// Sends and receives binary data across the Flutter platform barrier. + /// + /// If it is null, the default BinaryMessenger will be used, which routes to + /// the host platform. + @protected + final BinaryMessenger? pigeon_binaryMessenger; + + /// Maintains instances stored to communicate with native language objects. + @protected + final PigeonInstanceManager pigeon_instanceManager; + + /// Instantiates and returns a functionally identical object to oneself. + /// + /// Outside of tests, this method should only ever be called by + /// [PigeonInstanceManager]. + /// + /// Subclasses should always override their parent's implementation of this + /// method. + @protected + PigeonProxyApiBaseClass pigeon_copy(); +} + +/// Maintains instances used to communicate with the native objects they +/// represent. +/// +/// Added instances are stored as weak references and their copies are stored +/// as strong references to maintain access to their variables and callback +/// methods. Both are stored with the same identifier. +/// +/// When a weak referenced instance becomes inaccessible, +/// [onWeakReferenceRemoved] is called with its associated identifier. +/// +/// If an instance is retrieved and has the possibility to be used, +/// (e.g. calling [getInstanceWithWeakReference]) a copy of the strong reference +/// is added as a weak reference with the same identifier. This prevents a +/// scenario where the weak referenced instance was released and then later +/// returned by the host platform. +class PigeonInstanceManager { + /// Constructs a [PigeonInstanceManager]. + PigeonInstanceManager({required void Function(int) onWeakReferenceRemoved}) { + this.onWeakReferenceRemoved = (int identifier) { + _weakInstances.remove(identifier); + onWeakReferenceRemoved(identifier); + }; + _finalizer = Finalizer(this.onWeakReferenceRemoved); + } + + // Identifiers are locked to a specific range to avoid collisions with objects + // created simultaneously by the host platform. + // Host uses identifiers >= 2^16 and Dart is expected to use values n where, + // 0 <= n < 2^16. + static const int _maxDartCreatedIdentifier = 65536; + + /// The default [PigeonInstanceManager] used by ProxyApis. + /// + /// On creation, this manager makes a call to clear the native + /// InstanceManager. This is to prevent identifier conflicts after a host + /// restart. + static final PigeonInstanceManager instance = _initInstance(); + + // Expando is used because it doesn't prevent its keys from becoming + // inaccessible. This allows the manager to efficiently retrieve an identifier + // of an instance without holding a strong reference to that instance. + // + // It also doesn't use `==` to search for identifiers, which would lead to an + // infinite loop when comparing an object to its copy. (i.e. which was caused + // by calling instanceManager.getIdentifier() inside of `==` while this was a + // HashMap). + final Expando _identifiers = Expando(); + final Map> _weakInstances = + >{}; + final Map _strongInstances = {}; + late final Finalizer _finalizer; + int _nextIdentifier = 0; + + /// Called when a weak referenced instance is removed by [removeWeakReference] + /// or becomes inaccessible. + late final void Function(int) onWeakReferenceRemoved; + + static PigeonInstanceManager _initInstance() { + WidgetsFlutterBinding.ensureInitialized(); + final _PigeonInstanceManagerApi api = _PigeonInstanceManagerApi(); + // Clears the native `PigeonInstanceManager` on the initial use of the Dart one. + api.clear(); + final PigeonInstanceManager instanceManager = PigeonInstanceManager( + onWeakReferenceRemoved: (int identifier) { + api.removeStrongReference(identifier); + }, + ); + _PigeonInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); + BaseDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsLoader.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + return instanceManager; + } + + /// Adds a new instance that was instantiated by Dart. + /// + /// In other words, Dart wants to add a new instance that will represent + /// an object that will be instantiated on the host platform. + /// + /// Throws assertion error if the instance has already been added. + /// + /// Returns the randomly generated id of the [instance] added. + int addDartCreatedInstance(PigeonProxyApiBaseClass instance) { + final int identifier = _nextUniqueIdentifier(); + _addInstanceWithIdentifier(instance, identifier); + return identifier; + } + + /// Removes the instance, if present, and call [onWeakReferenceRemoved] with + /// its identifier. + /// + /// Returns the identifier associated with the removed instance. Otherwise, + /// `null` if the instance was not found in this manager. + /// + /// This does not remove the strong referenced instance associated with + /// [instance]. This can be done with [remove]. + int? removeWeakReference(PigeonProxyApiBaseClass instance) { + final int? identifier = getIdentifier(instance); + if (identifier == null) { + return null; + } + + _identifiers[instance] = null; + _finalizer.detach(instance); + onWeakReferenceRemoved(identifier); + + return identifier; + } + + /// Removes [identifier] and its associated strongly referenced instance, if + /// present, from the manager. + /// + /// Returns the strong referenced instance associated with [identifier] before + /// it was removed. Returns `null` if [identifier] was not associated with + /// any strong reference. + /// + /// This does not remove the weak referenced instance associated with + /// [identifier]. This can be done with [removeWeakReference]. + T? remove(int identifier) { + return _strongInstances.remove(identifier) as T?; + } + + /// Retrieves the instance associated with identifier. + /// + /// The value returned is chosen from the following order: + /// + /// 1. A weakly referenced instance associated with identifier. + /// 2. If the only instance associated with identifier is a strongly + /// referenced instance, a copy of the instance is added as a weak reference + /// with the same identifier. Returning the newly created copy. + /// 3. If no instance is associated with identifier, returns null. + /// + /// This method also expects the host `InstanceManager` to have a strong + /// reference to the instance the identifier is associated with. + T? getInstanceWithWeakReference(int identifier) { + final PigeonProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; + + if (weakInstance == null) { + final PigeonProxyApiBaseClass? strongInstance = _strongInstances[identifier]; + if (strongInstance != null) { + final PigeonProxyApiBaseClass copy = strongInstance.pigeon_copy(); + _identifiers[copy] = identifier; + _weakInstances[identifier] = WeakReference(copy); + _finalizer.attach(copy, identifier, detach: copy); + return copy as T; + } + return strongInstance as T?; + } + + return weakInstance as T; + } + + /// Retrieves the identifier associated with instance. + int? getIdentifier(PigeonProxyApiBaseClass instance) { + return _identifiers[instance]; + } + + /// Adds a new instance that was instantiated by the host platform. + /// + /// In other words, the host platform wants to add a new instance that + /// represents an object on the host platform. Stored with [identifier]. + /// + /// Throws assertion error if the instance or its identifier has already been + /// added. + /// + /// Returns unique identifier of the [instance] added. + void addHostCreatedInstance(PigeonProxyApiBaseClass instance, int identifier) { + _addInstanceWithIdentifier(instance, identifier); + } + + void _addInstanceWithIdentifier(PigeonProxyApiBaseClass instance, int identifier) { + assert(!containsIdentifier(identifier)); + assert(getIdentifier(instance) == null); + assert(identifier >= 0); + + _identifiers[instance] = identifier; + _weakInstances[identifier] = WeakReference(instance); + _finalizer.attach(instance, identifier, detach: instance); + + final PigeonProxyApiBaseClass copy = instance.pigeon_copy(); + _identifiers[copy] = identifier; + _strongInstances[identifier] = copy; + } + + /// Whether this manager contains the given [identifier]. + bool containsIdentifier(int identifier) { + return _weakInstances.containsKey(identifier) || + _strongInstances.containsKey(identifier); + } + + int _nextUniqueIdentifier() { + late int identifier; + do { + identifier = _nextIdentifier; + _nextIdentifier = (_nextIdentifier + 1) % _maxDartCreatedIdentifier; + } while (containsIdentifier(identifier)); + return identifier; + } +} + +/// Generated API for managing the Dart and native `PigeonInstanceManager`s. +class _PigeonInstanceManagerApi { + /// Constructor for [_PigeonInstanceManagerApi]. + _PigeonInstanceManagerApi({BinaryMessenger? binaryMessenger}) + : _binaryMessenger = binaryMessenger; + + final BinaryMessenger? _binaryMessenger; + + static const MessageCodec pigeonChannelCodec = + StandardMessageCodec(); + + static void setUpMessageHandlers({ + BinaryMessenger? binaryMessenger, + PigeonInstanceManager? instanceManager, + }) { + const String channelName = + r'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference'; + final BasicMessageChannel channel = BasicMessageChannel( + channelName, + pigeonChannelCodec, + binaryMessenger: binaryMessenger, + ); + channel.setMessageHandler((Object? message) async { + assert( + message != null, + 'Argument for $channelName was null.', + ); + final int? identifier = message as int?; + assert( + identifier != null, + r'Argument for $channelName, expected non-null int.', + ); + (instanceManager ?? PigeonInstanceManager.instance).remove(identifier!); + return; + }); + } + + Future removeStrongReference(int identifier) async { + const String channelName = + r'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference'; + final BasicMessageChannel channel = BasicMessageChannel( + channelName, + pigeonChannelCodec, + binaryMessenger: _binaryMessenger, + ); + final List? replyList = + await channel.send(identifier) as List?; + if (replyList == null) { + throw _createConnectionError(channelName); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } + + /// Clear the native `PigeonInstanceManager`. + /// + /// This is typically called after a hot restart. + Future clear() async { + const String channelName = + r'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear'; + final BasicMessageChannel channel = BasicMessageChannel( + channelName, + pigeonChannelCodec, + binaryMessenger: _binaryMessenger, + ); + final List? replyList = await channel.send(null) as List?; + if (replyList == null) { + throw _createConnectionError(channelName); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } +} +class _PigeonProxyApiBaseCodec extends StandardMessageCodec { + const _PigeonProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } +} + +/// A base class for more specialized container interfaces. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. +class BaseDisplayContainer extends PigeonProxyApiBaseClass { + /// Constructs [BaseDisplayContainer] 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 + BaseDisplayContainer.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + BaseDisplayContainer Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.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.BaseDisplayContainer.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + BaseDisplayContainer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + BaseDisplayContainer pigeon_copy() { + return BaseDisplayContainer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// A container in which to display the ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. +class AdDisplayContainer extends PigeonProxyApiBaseClass + implements BaseDisplayContainer { + /// Constructs [AdDisplayContainer] 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 + AdDisplayContainer.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdDisplayContainer Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.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.AdDisplayContainer.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + AdDisplayContainer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + AdDisplayContainer pigeon_copy() { + return AdDisplayContainer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// An object which allows publishers to request ads from ad servers or a +/// dynamic ad insertion stream. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. +class AdsLoader extends PigeonProxyApiBaseClass { + /// Constructs [AdsLoader] 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 + AdsLoader.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdsLoader Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoader.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.AdsLoader.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + AdsLoader.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + AdsLoader pigeon_copy() { + return AdsLoader.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// 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. +class AdsRequest extends PigeonProxyApiBaseClass { + /// Constructs [AdsRequest] 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 + AdsRequest.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdsRequest Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsRequest.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.AdsRequest.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + AdsRequest.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + AdsRequest pigeon_copy() { + return AdsRequest.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// An object which handles playing ads after they've been received from the +/// server. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. +class AdsManager extends PigeonProxyApiBaseClass { + /// Constructs [AdsManager] 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 + AdsManager.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdsManager Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsManager.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.AdsManager.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + AdsManager.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + AdsManager pigeon_copy() { + return AdsManager.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + diff --git a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart new file mode 100644 index 00000000000..fbef674ca72 --- /dev/null +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -0,0 +1,74 @@ +// 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. + +import 'package:pigeon/pigeon.dart'; + +@ConfigurePigeon( + PigeonOptions( + dartOut: 'lib/src/android/interactive_media_ads.g.dart', + dartOptions: DartOptions(copyrightHeader: [ + '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.', + ]), + kotlinOut: + 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt', + kotlinOptions: KotlinOptions( + package: 'dev.flutter.packages.interactive_media_ads', + ), + ), +) + +/// A base class for more specialized container interfaces. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', + ), +) +abstract class BaseDisplayContainer {} + +/// A container in which to display the ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', + ), +) +abstract class AdDisplayContainer implements BaseDisplayContainer {} + +/// An object which allows publishers to request ads from ad servers or a +/// dynamic ad insertion stream. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', + ), +) +abstract class AdsLoader {} + +/// 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. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', + ), +) +abstract class AdsRequest {} + +/// An object which handles playing ads after they've been received from the +/// server. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', + ), +) +abstract class AdsManager {} diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index a6b7b04a214..c03ab3478c8 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -26,6 +26,11 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 + pigeon: + git: + url: git@github.com:bparrishMines/packages.git + ref: pigeon_kotlin_split + path: packages/pigeon topics: - ads From 5f767fb2dc2930775358d4213e19f192add48f5d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 26 Apr 2024 18:26:09 -0400 Subject: [PATCH 02/76] add a bunch of classes --- .../AdDisplayContainerProxyApi.kt | 8 + .../AdMediaInfoProxyApi.kt | 10 + .../AdPodInfoProxyApi.kt | 30 + .../AdsLoaderProxyApi.kt | 8 + .../AdsManagerProxyApi.kt | 8 + .../AdsRequestProxyApi.kt | 8 + .../BaseDisplayContainerProxyApi.kt | 8 + .../FrameLayoutProxyApi.kt | 10 + .../GeneratedInteractiveMediaAdsLibrary.kt | 1596 ++++++++++++-- .../ImaSdkFactoryProxyApi.kt | 16 + .../InteractiveMediaAdsPlugin.kt | 46 +- .../ProxyApiRegistrar.kt | 71 + .../VideoAdPlayerCallbackProxyApi.kt | 77 + .../VideoAdPlayerProxyApi.kt | 15 + .../VideoProgressUpdateProxyApi.kt | 17 + .../VideoViewProxyApi.kt | 4 + .../ViewGroupProxyApi.kt | 11 + .../interactive_media_ads/ViewProxyApi.kt | 3 + .../android/android_ad_display_container.dart | 16 + .../src/android/interactive_media_ads.g.dart | 1864 ++++++++++++++++- .../interactive_media_ads_android.dart | 214 ++ 21 files changed, 3831 insertions(+), 209 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt create mode 100644 packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt new file mode 100644 index 00000000000..6351c508860 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt @@ -0,0 +1,8 @@ +// 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 + +class AdDisplayContainerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdDisplayContainer(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt new file mode 100644 index 00000000000..cc34e8e4671 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt @@ -0,0 +1,10 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + +class AdMediaInfoProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdMediaInfo(pigeonRegistrar) { + override fun url(pigeon_instance: AdMediaInfo): String { + return pigeon_instance.url + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt new file mode 100644 index 00000000000..751a4137b2a --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt @@ -0,0 +1,30 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdPodInfo + +class AdPodInfoProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdPodInfo(pigeonRegistrar) { + override fun adPosition(pigeon_instance: AdPodInfo): Long { + return pigeon_instance.adPosition.toLong() + } + + override fun maxDuration(pigeon_instance: AdPodInfo): Double { + return pigeon_instance.maxDuration + } + + override fun podIndex(pigeon_instance: AdPodInfo): Long { + return pigeon_instance.podIndex.toLong() + } + + override fun timeOffset(pigeon_instance: AdPodInfo): Double { + return pigeon_instance.timeOffset + } + + override fun totalAds(pigeon_instance: AdPodInfo): Long { + return pigeon_instance.totalAds.toLong() + } + + override fun isBumper(pigeon_instance: AdPodInfo): Boolean { + return pigeon_instance.isBumper + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt new file mode 100644 index 00000000000..a81918f8b6d --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt @@ -0,0 +1,8 @@ +// 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 + +class AdsLoaderProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdsLoader(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt new file mode 100644 index 00000000000..620a4b43d89 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt @@ -0,0 +1,8 @@ +// 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 + +class AdsManagerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdsManager(pigeonRegistrar) {} 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 new file mode 100644 index 00000000000..6d2991c1e6c --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -0,0 +1,8 @@ +// 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 + +class AdsRequestProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdsRequest(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt new file mode 100644 index 00000000000..719cc795121 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt @@ -0,0 +1,8 @@ +// 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 + +class BaseDisplayContainerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiBaseDisplayContainer(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt new file mode 100644 index 00000000000..02fda66ec14 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt @@ -0,0 +1,10 @@ +package dev.flutter.packages.interactive_media_ads + +import android.widget.FrameLayout + +class FrameLayoutProxyApi(pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiFrameLayout(pigeonRegistrar) { + override fun pigeon_defaultConstructor(): FrameLayout { + return FrameLayout((pigeonRegistrar as ProxyApiRegistrar).context) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index 96f4090ffd5..f77b8aa7c29 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -17,33 +17,31 @@ private fun wrapResult(result: Any?): List { private fun wrapError(exception: Throwable): List { if (exception is FlutterError) { - return listOf( - exception.code, - exception.message, - exception.details - ) + return listOf(exception.code, exception.message, exception.details) } else { return listOf( - exception.javaClass.simpleName, - exception.toString(), - "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception) - ) + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) } } private fun createConnectionError(channelName: String): FlutterError { - return FlutterError("channel-error", "Unable to establish connection on channel: '$channelName'.", "")} + return FlutterError( + "channel-error", "Unable to establish connection on channel: '$channelName'.", "") +} /** * Error class for passing custom error details to Flutter via a thrown PlatformException. + * * @property code The error code. * @property message The error message. * @property details The error details. Must be a datatype supported by the api codec. */ -class FlutterError ( - val code: String, - override val message: String? = null, - val details: Any? = null +class FlutterError( + val code: String, + override val message: String? = null, + val details: Any? = null ) : Throwable() /** * Maintains instances used to communicate with the corresponding objects in Dart. @@ -57,12 +55,12 @@ class FlutterError ( * reference is removed with [remove] and the weak reference is deallocated, the * `finalizationListener` is made with the instance's identifier. However, if the strong reference * is removed and then the identifier is retrieved with the intention to pass the identifier to Dart - * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the - * instance is recreated. The strong reference will then need to be removed manually again. + * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the instance is + * recreated. The strong reference will then need to be removed manually again. */ @Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused") class PigeonInstanceManager(private val finalizationListener: PigeonFinalizationListener) { - /** Interface for listening when a weak reference of an instance is removed from the manager. */ + /** Interface for listening when a weak reference of an instance is removed from the manager. */ interface PigeonFinalizationListener { fun onFinalize(identifier: Long) } @@ -88,10 +86,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization } init { - handler.postDelayed( - { releaseAllFinalizedInstances() }, - clearFinalizedWeakReferencesInterval - ) + handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) } companion object { @@ -105,7 +100,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Instantiate a new manager. * - * * When the manager is no longer needed, [stopFinalizationListener] must be called. * * @param finalizationListener the listener for garbage collected weak references. @@ -123,8 +117,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier paired to an instance. * @param the expected return type. * @return the removed instance if the manager contains the given identifier, otherwise `null` if - * the manager doesn't contain the value. - */ + * the manager doesn't contain the value. + */ fun remove(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() return strongInstances.remove(identifier) as T? @@ -133,19 +127,17 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Retrieves the identifier paired with an instance. * - * * If the manager contains a strong reference to `instance`, it will return the identifier * associated with `instance`. If the manager contains only a weak reference to `instance`, a new * strong reference to `instance` will be added and will need to be removed again with [remove]. * - * * If this method returns a nonnull identifier, this method also expects the Dart * `PigeonInstanceManager` to have, or recreate, a weak reference to the Dart instance the * identifier is associated with. * * @param instance an instance that may be stored in the manager. * @return the identifier associated with `instance` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. + * `null` if the manager doesn't contain the value. */ fun getIdentifierForStrongReference(instance: Any?): Long? { logWarningIfFinalizationListenerHasStopped() @@ -159,14 +151,13 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Adds a new instance that was instantiated from Dart. * - * - * The same instance can be added multiple times, but each identifier must be unique. This - * allows two objects that are equivalent (e.g. the `equals` method returns true and their - * hashcodes are equal) to both be added. + * The same instance can be added multiple times, but each identifier must be unique. This allows + * two objects that are equivalent (e.g. the `equals` method returns true and their hashcodes are + * equal) to both be added. * * @param instance the instance to be stored. * @param identifier the identifier to be paired with instance. This value must be >= 0 and - * unique. + * unique. */ fun addDartCreatedInstance(instance: Any, identifier: Long) { logWarningIfFinalizationListenerHasStopped() @@ -181,7 +172,9 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization */ fun addHostCreatedInstance(instance: Any): Long { logWarningIfFinalizationListenerHasStopped() - require(!containsInstance(instance)) { "Instance of ${instance.javaClass} has already been added." } + require(!containsInstance(instance)) { + "Instance of ${instance.javaClass} has already been added." + } val identifier = nextIdentifier++ addInstance(instance, identifier) return identifier @@ -193,8 +186,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier associated with an instance. * @param the expected return type. * @return the instance associated with `identifier` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. - */ + * `null` if the manager doesn't contain the value. + */ fun getInstance(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() val instance = weakInstances[identifier] as java.lang.ref.WeakReference? @@ -216,7 +209,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Stop the periodic run of the [PigeonFinalizationListener] for instances that have been garbage * collected. * - * * The InstanceManager can continue to be used, but the [PigeonFinalizationListener] will no * longer be called and methods will log a warning. */ @@ -228,7 +220,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Removes all of the instances from this manager. * - * * The manager will be empty after this call returns. */ fun clear() { @@ -242,7 +233,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Whether the [PigeonFinalizationListener] is still being called for instances that are garbage * collected. * - * * See [stopFinalizationListener]. */ fun hasFinalizationListenerStopped(): Boolean { @@ -254,7 +244,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization return } var reference: java.lang.ref.WeakReference? - while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != null) { + while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != + null) { val identifier = weakReferencesToIdentifiers.remove(reference) if (identifier != null) { weakInstances.remove(identifier) @@ -262,10 +253,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization finalizationListener.onFinalize(identifier) } } - handler.postDelayed( - { releaseAllFinalizedInstances() }, - clearFinalizedWeakReferencesInterval - ) + handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) } private fun addInstance(instance: Any, identifier: Long) { @@ -283,55 +271,63 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization private fun logWarningIfFinalizationListenerHasStopped() { if (hasFinalizationListenerStopped()) { Log.w( - tag, - "The manager was used after calls to the PigeonFinalizationListener has been stopped." - ) + tag, + "The manager was used after calls to the PigeonFinalizationListener has been stopped.") } } } -/** -* Generated API for managing the Dart and native `PigeonInstanceManager`s. -*/ +/** Generated API for managing the Dart and native `PigeonInstanceManager`s. */ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { companion object { /** The codec used by PigeonInstanceManagerApi. */ - private val codec: MessageCodec by lazy { - StandardMessageCodec() - } + private val codec: MessageCodec by lazy { StandardMessageCodec() } /** - * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the - * `binaryMessenger`. - */ - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, instanceManager: PigeonInstanceManager?) { + * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the + * `binaryMessenger`. + */ + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + instanceManager: PigeonInstanceManager? + ) { run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", + codec) if (instanceManager != null) { channel.setMessageHandler { message, reply -> val identifier = message as Number - val wrapped: List = try { - instanceManager.remove(identifier.toLong()) - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = + try { + instanceManager.remove(identifier.toLong()) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { channel.setMessageHandler(null) - } + } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", + codec) if (instanceManager != null) { channel.setMessageHandler { _, reply -> - val wrapped: List = try { - instanceManager.clear() - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = + try { + instanceManager.clear() + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -342,7 +338,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { - val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(identifier) { if (it is List<*>) { @@ -359,8 +356,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } /** - * Provides implementations for each ProxyApi implementation and provides access to resources - * needed by any implementation. + * Provides implementations for each ProxyApi implementation and provides access to resources needed + * by any implementation. */ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val instanceManager: PigeonInstanceManager @@ -368,7 +365,7 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val codec: StandardMessageCodec get() { if (_codec == null) { - _codec = PigeonProxyApiBaseCodec(this) + _codec = PigeonProxyApiBaseCodec(this) } return _codec!! } @@ -376,19 +373,18 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { init { val api = PigeonInstanceManagerApi(binaryMessenger) instanceManager = - PigeonInstanceManager.create( - object : PigeonInstanceManager.PigeonFinalizationListener { - override fun onFinalize(identifier: Long) { - api.removeStrongReference(identifier) { - if (it.isFailure) { - Log.e( - "PigeonProxyApiRegistrar", - "Failed to remove Dart strong reference with identifier: $identifier" - ) + PigeonInstanceManager.create( + object : PigeonInstanceManager.PigeonFinalizationListener { + override fun onFinalize(identifier: Long) { + api.removeStrongReference(identifier) { + if (it.isFailure) { + Log.e( + "PigeonProxyApiRegistrar", + "Failed to remove Dart strong reference with identifier: $identifier") + } + } } - } - } - }) + }) } /** @@ -404,31 +400,108 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer /** - * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of - * `AdsLoader` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of `AdsLoader` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdsLoader(): PigeonApiAdsLoader /** - * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of - * `AdsRequest` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of `AdsRequest` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsRequest(): PigeonApiAdsRequest /** - * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of - * `AdsManager` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsManager(): PigeonApiAdsManager + /** + * An implementation of [PigeonApiImaSdkFactory] used to add a new Dart instance of + * `ImaSdkFactory` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiImaSdkFactory(): PigeonApiImaSdkFactory + + /** + * An implementation of [PigeonApiVideoAdPlayer] used to add a new Dart instance of + * `VideoAdPlayer` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiVideoAdPlayer(): PigeonApiVideoAdPlayer + + /** + * An implementation of [PigeonApiVideoProgressUpdate] used to add a new Dart instance of + * `VideoProgressUpdate` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiVideoProgressUpdate(): PigeonApiVideoProgressUpdate + + /** + * An implementation of [PigeonApiVideoAdPlayerCallback] used to add a new Dart instance of + * `VideoAdPlayerCallback` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback + + /** + * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of `AdMediaInfo` to + * the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdMediaInfo(): PigeonApiAdMediaInfo + + /** + * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of `AdPodInfo` to the + * Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdPodInfo(): PigeonApiAdPodInfo + + /** + * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of `FrameLayout` to + * the Dart `InstanceManager`. + */ + abstract fun getPigeonApiFrameLayout(): PigeonApiFrameLayout + + /** + * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of `ViewGroup` to the + * Dart `InstanceManager`. + */ + abstract fun getPigeonApiViewGroup(): PigeonApiViewGroup + + /** + * An implementation of [PigeonApiVideoView] used to add a new Dart instance of `VideoView` to the + * Dart `InstanceManager`. + */ + abstract fun getPigeonApiVideoView(): PigeonApiVideoView + + /** + * An implementation of [PigeonApiView] used to add a new Dart instance of `View` to the Dart + * `InstanceManager`. + */ + abstract fun getPigeonApiView(): PigeonApiView + fun setUp() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, instanceManager) + PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory()) + PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayer()) + PigeonApiVideoProgressUpdate.setUpMessageHandlers( + binaryMessenger, getPigeonApiVideoProgressUpdate()) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers( + binaryMessenger, getPigeonApiVideoAdPlayerCallback()) + PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, getPigeonApiFrameLayout()) + PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, getPigeonApiViewGroup()) } + fun tearDown() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null) + PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, null) + PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, null) + PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, null) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, null) + PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, null) + PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, null) } } -private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : StandardMessageCodec() { + +private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : + StandardMessageCodec() { override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { @@ -441,19 +514,36 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { if (value is com.google.ads.interactivemedia.v3.api.AdDisplayContainer) { - registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { - registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { - registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { - registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { - registrar.getPigeonApiAdsManager().pigeon_newInstance(value) { } + registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { + registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { + registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { + registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { + registrar.getPigeonApiAdsManager().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { + registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { + registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { + registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) {} + } else if (value + is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { + registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { + registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { + registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) {} + } else if (value is android.widget.FrameLayout) { + registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) {} + } else if (value is android.view.ViewGroup) { + registrar.getPigeonApiViewGroup().pigeon_newInstance(value) {} + } else if (value is android.widget.VideoView) { + registrar.getPigeonApiVideoView().pigeon_newInstance(value) {} + } else if (value is android.view.View) { + registrar.getPigeonApiView().pigeon_newInstance(value) {} } when { @@ -468,22 +558,27 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : /** * A base class for more specialized container interfaces. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -494,30 +589,34 @@ abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApi } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * A container in which to display the ads. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -528,35 +627,37 @@ abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRe } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ - fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer - { + /** An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ + fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { return pigeonRegistrar.getPigeonApiBaseDisplayContainer() } - } /** - * An object which allows publishers to request ads from ad servers or a - * dynamic ad insertion stream. + * An object which allows publishers to request ads from ad servers or a dynamic ad insertion + * stream. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" @@ -570,27 +671,30 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * 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/com/google/ads/interactivemedia/v3/api/AdsRequest. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" @@ -604,28 +708,30 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * An object which handles playing ads after they've been received from the - * server. + * An object which handles playing ads after they've been received from the server. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" @@ -639,8 +745,1198 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } + } + } +} +/** + * Factory class for creating SDK objects. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun createAdDisplayContainer( + container: android.view.ViewGroup, + player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + ): com.google.ads.interactivemedia.v3.api.AdDisplayContainer + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val containerArg = args[0] as android.view.ViewGroup + val playerArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + var wrapped: List + try { + wrapped = listOf(api.createAdDisplayContainer(containerArg, playerArg)) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } +} +/** + * Defines the set of methods that a video player must implement to be used by the IMA SDK, as well + * as a set of callbacks that it must fire. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** The volume of the player as a percentage from 0 to 100. */ + abstract fun setVolume( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + value: Long + ) + + /** The `VideoProgressUpdate` describing playback progress of the current video. */ + abstract fun setAdProgress( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + ) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", + 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.player.VideoAdPlayer + val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.setVolume(pigeon_instanceArg, valueArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", + 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.player.VideoAdPlayer + val progressArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + var wrapped: List + try { + api.setAdProgress(pigeon_instanceArg, progressArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") + } + + /** Adds a callback. */ + fun addCallback( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callbackArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, callbackArg)) { + 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))) + } + } + } + + /** Loads a video ad hosted at AdMediaInfo. */ + fun loadAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg, adPodInfoArg)) { + 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))) + } + } + } + + /** Pauses playing the current ad. */ + fun pauseAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { + 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))) + } + } + } + + /** + * Starts or resumes playing the video ad referenced by the AdMediaInfo, provided loadAd has + * already been called for it. + */ + fun playAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { + 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))) + } + } + } + + /** Cleans up and releases all resources used by the `VideoAdPlayer`. */ + fun release( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg)) { + 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))) + } + } + } + + /** Removes a callback. */ + fun removeCallback( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callbackArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, callbackArg)) { + 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))) + } } } + /** Stops playing the current ad. */ + fun stopAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { + 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))) + } + } + } +} +/** + * Defines an update to the video's progress. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor( + currentTimeMs: Long, + durationMs: Long + ): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + + /** Value to use for cases when progress is not yet defined, such as video initialization. */ + abstract fun videoTimeNotReady(): + com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + val currentTimeMsArg = args[1].let { if (it is Int) it.toLong() else it as Long } + val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), + pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.videoTimeNotReady(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } +} +/** + * Callbacks that the player must fire. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Fire this callback periodically as ad playback occurs. */ + abstract fun onAdProgress( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + ) + + /** Fire this callback when video playback stalls waiting for data. */ + abstract fun onBuffering( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when all content has finished playing. */ + abstract fun onContentComplete( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + ) + + /** Fire this callback when the video finishes playing. */ + abstract fun onEnded( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when the video has encountered an error. */ + abstract fun onError( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when the video is ready to begin playback. */ + abstract fun onLoaded( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when the video is paused. */ + abstract fun onPause( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when the player begins playing a video. */ + abstract fun onPlay( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when the video is unpaused. */ + abstract fun onResume( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) + + /** Fire this callback when the playback volume changes. */ + abstract fun onVolumeChanged( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + percentage: Long + ) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + api: PigeonApiVideoAdPlayerCallback? + ) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val videoProgressUpdateArg = + args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + var wrapped: List + try { + api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onBuffering(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + var wrapped: List + try { + api.onContentComplete(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onEnded(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onError(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onLoaded(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onPause(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onPlay(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onResume(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.onVolumeChanged(pigeon_instanceArg, adMediaInfoArg, percentageArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } +} +/** + * The minimal information required to play an ad. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun url( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ): String + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val urlArg = url(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg, urlArg)) { + 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))) + } + } + } +} +/** + * An ad may be part of a pod of ads. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** + * The position of the ad within the pod. + * + * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the ad is not part of a + * pod, this will return 1. + */ + abstract fun adPosition(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + + /** + * The maximum duration of the pod in seconds. + * + * For unknown duration, -1 is returned. + */ + abstract fun maxDuration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo + ): Double + + /** Client side and DAI VOD: Returns the index of the ad pod. */ + abstract fun podIndex(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + + /** + * The content time offset at which the current ad pod was scheduled. + * + * For preroll pod, 0 is returned. For midrolls, the scheduled time is returned in seconds. For + * postroll, -1 is returned. Defaults to 0 if this ad is not part of a pod, or the pod is not part + * of an ad playlist. + */ + abstract fun timeOffset(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double + + /** The total number of ads contained within this pod, including bumpers. */ + abstract fun totalAds(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + + /** Returns true if the ad is a bumper ad. */ + abstract fun isBumper(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Boolean + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val adPositionArg = adPosition(pigeon_instanceArg) + val maxDurationArg = maxDuration(pigeon_instanceArg) + val podIndexArg = podIndex(pigeon_instanceArg) + val timeOffsetArg = timeOffset(pigeon_instanceArg) + val totalAdsArg = totalAds(pigeon_instanceArg) + val isBumperArg = isBumper(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send( + listOf( + pigeon_identifierArg, + adPositionArg, + maxDurationArg, + podIndexArg, + timeOffsetArg, + totalAdsArg, + isBumperArg)) { + 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))) + } + } + } +} +/** + * FrameLayout is designed to block out an area on the screen to display a single item. + * + * See https://developer.android.com/reference/android/widget/FrameLayout. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): android.widget.FrameLayout + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.widget.FrameLayout, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + + @Suppress("FunctionName") + /** An implementation of [PigeonApiViewGroup] used to access callback methods */ + fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup { + return pigeonRegistrar.getPigeonApiViewGroup() + } +} +/** + * A special view that can contain other views (called children.) + * + * See https://developer.android.com/reference/android/view/ViewGroup. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun addView(pigeon_instance: android.view.ViewGroup, view: android.view.View) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.view.ViewGroup + val viewArg = args[1] as android.view.View + var wrapped: List + try { + api.addView(pigeon_instanceArg, viewArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.view.ViewGroup, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + + @Suppress("FunctionName") + /** An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView { + return pigeonRegistrar.getPigeonApiView() + } +} +/** + * Displays a video file. + * + * See https://developer.android.com/reference/android/widget/VideoView. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.widget.VideoView, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + + @Suppress("FunctionName") + /** An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView { + return pigeonRegistrar.getPigeonApiView() + } +} +/** + * This class represents the basic building block for user interface components. + * + * See https://developer.android.com/reference/android/view/View. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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/ImaSdkFactoryProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt new file mode 100644 index 00000000000..d3a1a9f84fd --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt @@ -0,0 +1,16 @@ +package dev.flutter.packages.interactive_media_ads + +import android.view.ViewGroup +import com.google.ads.interactivemedia.v3.api.AdDisplayContainer +import com.google.ads.interactivemedia.v3.api.ImaSdkFactory +import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + +class ImaSdkFactoryProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiImaSdkFactory(pigeonRegistrar) { + override fun createAdDisplayContainer( + container: ViewGroup, + player: VideoAdPlayer + ): AdDisplayContainer { + return ImaSdkFactory.createAdDisplayContainer(container, player) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt index 50595236588..6689578f7e3 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt @@ -5,33 +5,39 @@ package dev.flutter.packages.interactive_media_ads import io.flutter.embedding.engine.plugins.FlutterPlugin -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel -import io.flutter.plugin.common.MethodChannel.MethodCallHandler -import io.flutter.plugin.common.MethodChannel.Result +import io.flutter.embedding.engine.plugins.activity.ActivityAware +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding /** InteractiveMediaAdsPlugin */ -class InteractiveMediaAdsPlugin : FlutterPlugin, MethodCallHandler { - /// The MethodChannel that will the communication between Flutter and native Android - /// - /// This local reference serves to register the plugin with the Flutter Engine and unregister it - /// when the Flutter Engine is detached from the Activity - private lateinit var channel: MethodChannel +class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { + private lateinit var pluginBinding: FlutterPlugin.FlutterPluginBinding + private lateinit var registrar: ProxyApiRegistrar override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - channel = MethodChannel(flutterPluginBinding.binaryMessenger, "interactive_media_ads") - channel.setMethodCallHandler(this) + pluginBinding = flutterPluginBinding + registrar = + ProxyApiRegistrar(pluginBinding.binaryMessenger, context = pluginBinding.applicationContext) + registrar.setUp() } - override fun onMethodCall(call: MethodCall, result: Result) { - if (call.method == "getPlatformVersion") { - result.success("Android ${android.os.Build.VERSION.RELEASE}") - } else { - result.notImplemented() - } + override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { + registrar.tearDown() + registrar.instanceManager.clear() } - override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) + override fun onAttachedToActivity(binding: ActivityPluginBinding) { + registrar.context = binding.activity + } + + override fun onDetachedFromActivityForConfigChanges() { + registrar.context = pluginBinding.applicationContext + } + + override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { + registrar.context = binding.activity + } + + override fun onDetachedFromActivity() { + registrar.context = pluginBinding.applicationContext } } 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 new file mode 100644 index 00000000000..7d5269a2c0f --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt @@ -0,0 +1,71 @@ +// 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 android.content.Context +import io.flutter.plugin.common.BinaryMessenger + +class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) : + PigeonProxyApiRegistrar(binaryMessenger) { + override fun getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { + return BaseDisplayContainerProxyApi(this) + } + + override fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer { + return AdDisplayContainerProxyApi(this) + } + + override fun getPigeonApiAdsLoader(): PigeonApiAdsLoader { + return AdsLoaderProxyApi(this) + } + + override fun getPigeonApiAdsRequest(): PigeonApiAdsRequest { + return AdsRequestProxyApi(this) + } + + override fun getPigeonApiAdsManager(): PigeonApiAdsManager { + return AdsManagerProxyApi(this) + } + + override fun getPigeonApiImaSdkFactory(): PigeonApiImaSdkFactory { + return ImaSdkFactoryProxyApi(this) + } + + override fun getPigeonApiVideoAdPlayer(): PigeonApiVideoAdPlayer { + return VideoAdPlayerProxyApi(this) + } + + override fun getPigeonApiVideoProgressUpdate(): PigeonApiVideoProgressUpdate { + return VideoProgressUpdateProxyApi(this) + } + + override fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback { + return VideoAdPlayerCallbackProxyApi(this) + } + + override fun getPigeonApiAdMediaInfo(): PigeonApiAdMediaInfo { + return AdMediaInfoProxyApi(this) + } + + override fun getPigeonApiAdPodInfo(): PigeonApiAdPodInfo { + return AdPodInfoProxyApi(this) + } + + override fun getPigeonApiFrameLayout(): PigeonApiFrameLayout { + return FrameLayoutProxyApi(this) + } + + override fun getPigeonApiViewGroup(): PigeonApiViewGroup { + return ViewGroupProxyApi(this) + } + + override fun getPigeonApiVideoView(): PigeonApiVideoView { + return VideoViewProxyApi(this) + } + + override fun getPigeonApiView(): PigeonApiView { + return ViewProxyApi(this) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt new file mode 100644 index 00000000000..1e0ce6f3c27 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt @@ -0,0 +1,77 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo +import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer +import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + +class VideoAdPlayerCallbackProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiVideoAdPlayerCallback(pigeonRegistrar) { + override fun onAdProgress( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo, + videoProgressUpdate: VideoProgressUpdate + ) { + pigeon_instance.onAdProgress(adMediaInfo, videoProgressUpdate) + } + + override fun onBuffering( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onBuffering(adMediaInfo) + } + + override fun onContentComplete(pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback) { + pigeon_instance.onContentComplete() + } + + override fun onEnded( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onEnded(adMediaInfo) + } + + override fun onError( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onEnded(adMediaInfo) + } + + override fun onLoaded( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onLoaded(adMediaInfo) + } + + override fun onPause( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onPause(adMediaInfo) + } + + override fun onPlay( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onPlay(adMediaInfo) + } + + override fun onResume( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo + ) { + pigeon_instance.onResume(adMediaInfo) + } + + override fun onVolumeChanged( + pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: AdMediaInfo, + percentage: Long + ) { + pigeon_instance.onVolumeChanged(adMediaInfo, percentage.toInt()) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt new file mode 100644 index 00000000000..626d5fa9184 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -0,0 +1,15 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer +import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + +class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiVideoAdPlayer(pigeonRegistrar) { + override fun setVolume(pigeon_instance: VideoAdPlayer, value: Long) { + TODO("Not yet implemented") + } + + override fun setAdProgress(pigeon_instance: VideoAdPlayer, progress: VideoProgressUpdate) { + TODO("Not yet implemented") + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt new file mode 100644 index 00000000000..9cf6795ba13 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt @@ -0,0 +1,17 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + +class VideoProgressUpdateProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiVideoProgressUpdate(pigeonRegistrar) { + override fun pigeon_defaultConstructor( + currentTimeMs: Long, + durationMs: Long + ): VideoProgressUpdate { + return VideoProgressUpdate(currentTimeMs, durationMs) + } + + override fun videoTimeNotReady(): VideoProgressUpdate { + return VideoProgressUpdate.VIDEO_TIME_NOT_READY + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt new file mode 100644 index 00000000000..e46bc2b8f23 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -0,0 +1,4 @@ +package dev.flutter.packages.interactive_media_ads + +class VideoViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiVideoView(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt new file mode 100644 index 00000000000..0999fd2d8d7 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt @@ -0,0 +1,11 @@ +package dev.flutter.packages.interactive_media_ads + +import android.view.View +import android.view.ViewGroup + +class ViewGroupProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiViewGroup(pigeonRegistrar) { + override fun addView(pigeon_instance: ViewGroup, view: View) { + pigeon_instance.addView(view) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt new file mode 100644 index 00000000000..489b62c166f --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt @@ -0,0 +1,3 @@ +package dev.flutter.packages.interactive_media_ads + +class ViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiView(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart new file mode 100644 index 00000000000..8299d3f7d1d --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -0,0 +1,16 @@ +// 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. + +import 'package:flutter/widgets.dart'; + +import '../platform_interface/platform_interface.dart'; + +final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { + AndroidAdDisplayContainer(super.params) : super.implementation(); + + @override + Widget build(BuildContext context) { + throw UnimplementedError(); + } +} 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 53fc9139c70..f1cb4bca418 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 @@ -8,11 +8,20 @@ import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' + show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -21,6 +30,7 @@ List wrapResponse({Object? result, PlatformException? error, bool empty } return [error.code, error.message, error.details]; } + /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -106,7 +116,8 @@ class PigeonInstanceManager { final Expando _identifiers = Expando(); final Map> _weakInstances = >{}; - final Map _strongInstances = {}; + final Map _strongInstances = + {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -124,12 +135,37 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); - BaseDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsLoader.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + _PigeonInstanceManagerApi.setUpMessageHandlers( + instanceManager: instanceManager); + BaseDisplayContainer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdDisplayContainer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsLoader.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsRequest.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsManager.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ImaSdkFactory.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoAdPlayer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoProgressUpdate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoAdPlayerCallback.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdMediaInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdPodInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + FrameLayout.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ViewGroup.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + View.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); return instanceManager; } @@ -193,15 +229,19 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference(int identifier) { - final PigeonProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference( + int identifier) { + final PigeonProxyApiBaseClass? weakInstance = + _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonProxyApiBaseClass? strongInstance = _strongInstances[identifier]; + final PigeonProxyApiBaseClass? strongInstance = + _strongInstances[identifier]; if (strongInstance != null) { final PigeonProxyApiBaseClass copy = strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = WeakReference(copy); + _weakInstances[identifier] = + WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -225,17 +265,20 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance(PigeonProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance( + PigeonProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier(PigeonProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier( + PigeonProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = WeakReference(instance); + _weakInstances[identifier] = + WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonProxyApiBaseClass copy = instance.pigeon_copy(); @@ -266,9 +309,9 @@ class _PigeonInstanceManagerApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - + static const MessageCodec pigeonChannelCodec = - StandardMessageCodec(); + StandardMessageCodec(); static void setUpMessageHandlers({ BinaryMessenger? binaryMessenger, @@ -344,28 +387,30 @@ class _PigeonInstanceManagerApi { } } } + class _PigeonProxyApiBaseCodec extends StandardMessageCodec { - const _PigeonProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } + const _PigeonProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } } /// A base class for more specialized container interfaces. @@ -726,3 +771,1744 @@ class AdsManager extends PigeonProxyApiBaseClass { } } +/// Factory class for creating SDK objects. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. +class ImaSdkFactory extends PigeonProxyApiBaseClass { + /// Constructs [ImaSdkFactory] 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 + ImaSdkFactory.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecImaSdkFactory = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + ImaSdkFactory Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.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.ImaSdkFactory.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + ImaSdkFactory.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + static Future createAdDisplayContainer( + ViewGroup container, + VideoAdPlayer player, { + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + }) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([container, player]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as AdDisplayContainer?)!; + } + } + + @override + ImaSdkFactory pigeon_copy() { + return ImaSdkFactory.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Defines the set of methods that a video player must implement to be used by +/// the IMA SDK, as well as a set of callbacks that it must fire. +/// +/// 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 PigeonProxyApiBaseClass { + /// Constructs [VideoAdPlayer] 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 + VideoAdPlayer.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.addCallback, + required this.loadAd, + required this.pauseAd, + required this.playAd, + required this.release, + required this.removeCallback, + required this.stopAd, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoAdPlayer = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Adds a callback. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// addCallback: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) addCallback; + + /// Loads a video ad hosted at AdMediaInfo. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// loadAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + ) loadAd; + + /// Pauses playing the current ad. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// pauseAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) pauseAd; + + /// Starts or resumes playing the video ad referenced by the AdMediaInfo, + /// provided loadAd has already been called for it. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// playAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) playAd; + + /// Cleans up and releases all resources used by the `VideoAdPlayer`. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// release: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function(VideoAdPlayer pigeon_instance) release; + + /// Removes a callback. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// removeCallback: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) removeCallback; + + /// Stops playing the current ad. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// stopAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) stopAd; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + )? addCallback, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + )? loadAd, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + )? pauseAd, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + )? playAd, + void Function(VideoAdPlayer pigeon_instance)? release, + void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + )? removeCallback, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + )? stopAd, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null, expected non-null VideoAdPlayer.'); + final VideoAdPlayerCallback? arg_callback = + (args[1] as VideoAdPlayerCallback?); + assert(arg_callback != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null, expected non-null VideoAdPlayerCallback.'); + try { + (addCallback ?? arg_pigeon_instance!.addCallback) + .call(arg_pigeon_instance!, arg_callback!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null AdMediaInfo.'); + final AdPodInfo? arg_adPodInfo = (args[2] as AdPodInfo?); + assert(arg_adPodInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null AdPodInfo.'); + try { + (loadAd ?? arg_pigeon_instance!.loadAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!, arg_adPodInfo!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null, expected non-null AdMediaInfo.'); + try { + (pauseAd ?? arg_pigeon_instance!.pauseAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null, expected non-null AdMediaInfo.'); + try { + (playAd ?? arg_pigeon_instance!.playAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release was null, expected non-null VideoAdPlayer.'); + try { + (release ?? arg_pigeon_instance!.release) + .call(arg_pigeon_instance!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null, expected non-null VideoAdPlayer.'); + final VideoAdPlayerCallback? arg_callback = + (args[1] as VideoAdPlayerCallback?); + assert(arg_callback != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null, expected non-null VideoAdPlayerCallback.'); + try { + (removeCallback ?? arg_pigeon_instance!.removeCallback) + .call(arg_pigeon_instance!, arg_callback!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null, expected non-null AdMediaInfo.'); + try { + (stopAd ?? arg_pigeon_instance!.stopAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + /// The volume of the player as a percentage from 0 to 100. + Future setVolume(int value) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, value]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// The `VideoProgressUpdate` describing playback progress of the current + /// video. + Future setAdProgress(VideoProgressUpdate progress) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, progress]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + VideoAdPlayer pigeon_copy() { + return VideoAdPlayer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + addCallback: addCallback, + loadAd: loadAd, + pauseAd: pauseAd, + playAd: playAd, + release: release, + removeCallback: removeCallback, + stopAd: stopAd, + ); + } +} + +/// Defines an update to the video's progress. +/// +/// 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 PigeonProxyApiBaseClass { + VideoProgressUpdate({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required int currentTimeMs, + required int durationMs, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoProgressUpdate; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel.send( + [__pigeon_instanceIdentifier, currentTimeMs, durationMs]) + as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [VideoProgressUpdate] 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 + VideoProgressUpdate.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoProgressUpdate = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Value to use for cases when progress is not yet defined, such as video + /// initialization. + static final VideoProgressUpdate videoTimeNotReady = + __pigeon_videoTimeNotReady(); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + VideoProgressUpdate Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.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.VideoProgressUpdate.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + VideoProgressUpdate.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + static VideoProgressUpdate __pigeon_videoTimeNotReady() { + final VideoProgressUpdate __pigeon_instance = + VideoProgressUpdate.pigeon_detached(); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec(PigeonInstanceManager.instance); + final BinaryMessenger __pigeon_binaryMessenger = + ServicesBinding.instance.defaultBinaryMessenger; + final int __pigeon_instanceIdentifier = PigeonInstanceManager.instance + .addDartCreatedInstance(__pigeon_instance); + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + return __pigeon_instance; + } + + @override + VideoProgressUpdate pigeon_copy() { + return VideoProgressUpdate.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Callbacks that the player must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html +class VideoAdPlayerCallback extends PigeonProxyApiBaseClass { + /// Constructs [VideoAdPlayerCallback] 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 + VideoAdPlayerCallback.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoAdPlayerCallback = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + VideoAdPlayerCallback Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.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.VideoAdPlayerCallback.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + VideoAdPlayerCallback.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + /// Fire this callback periodically as ad playback occurs. + Future onAdProgress( + AdMediaInfo adMediaInfo, + VideoProgressUpdate videoProgressUpdate, + ) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo, videoProgressUpdate]) + as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when video playback stalls waiting for data. + Future onBuffering(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when all content has finished playing. + Future onContentComplete() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the video finishes playing. + Future onEnded(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the video has encountered an error. + Future onError(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the video is ready to begin playback. + Future onLoaded(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the video is paused. + Future onPause(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the player begins playing a video. + Future onPlay(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the video is unpaused. + Future onResume(AdMediaInfo adMediaInfo) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Fire this callback when the playback volume changes. + Future onVolumeChanged( + AdMediaInfo adMediaInfo, + int percentage, + ) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayerCallback; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adMediaInfo, percentage]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + VideoAdPlayerCallback pigeon_copy() { + return VideoAdPlayerCallback.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// The minimal information required to play an ad. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. +class AdMediaInfo extends PigeonProxyApiBaseClass { + /// Constructs [AdMediaInfo] 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 + AdMediaInfo.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.url, + }); + + final String url; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdMediaInfo Function(String url)? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.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.AdMediaInfo.pigeon_newInstance was null, expected non-null int.'); + final String? arg_url = (args[1] as String?); + assert(arg_url != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance was null, expected non-null String.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_url!) ?? + AdMediaInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + url: arg_url!, + ), + 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 + AdMediaInfo pigeon_copy() { + return AdMediaInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + url: url, + ); + } +} + +/// An ad may be part of a pod of ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. +class AdPodInfo extends PigeonProxyApiBaseClass { + /// Constructs [AdPodInfo] 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 + AdPodInfo.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.adPosition, + required this.maxDuration, + required this.podIndex, + required this.timeOffset, + required this.totalAds, + required this.isBumper, + }); + + /// The position of the ad within the pod. + /// + /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the + /// ad is not part of a pod, this will return 1. + final int adPosition; + + /// The maximum duration of the pod in seconds. + /// + /// For unknown duration, -1 is returned. + final double maxDuration; + + /// Client side and DAI VOD: Returns the index of the ad pod. + final int podIndex; + + /// The content time offset at which the current ad pod was scheduled. + /// + /// For preroll pod, 0 is returned. For midrolls, the scheduled time is + /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this + /// ad is not part of a pod, or the pod is not part of an ad playlist. + final double timeOffset; + + /// The total number of ads contained within this pod, including bumpers. + final int totalAds; + + /// Returns true if the ad is a bumper ad. + final bool isBumper; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdPodInfo Function( + int adPosition, + double maxDuration, + int podIndex, + double timeOffset, + int totalAds, + bool isBumper, + )? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.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.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final int? arg_adPosition = (args[1] as int?); + assert(arg_adPosition != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final double? arg_maxDuration = (args[2] as double?); + assert(arg_maxDuration != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null double.'); + final int? arg_podIndex = (args[3] as int?); + assert(arg_podIndex != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final double? arg_timeOffset = (args[4] as double?); + assert(arg_timeOffset != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null double.'); + final int? arg_totalAds = (args[5] as int?); + assert(arg_totalAds != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final bool? arg_isBumper = (args[6] as bool?); + assert(arg_isBumper != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null bool.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call( + arg_adPosition!, + arg_maxDuration!, + arg_podIndex!, + arg_timeOffset!, + arg_totalAds!, + arg_isBumper!) ?? + AdPodInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adPosition: arg_adPosition!, + maxDuration: arg_maxDuration!, + podIndex: arg_podIndex!, + timeOffset: arg_timeOffset!, + totalAds: arg_totalAds!, + isBumper: arg_isBumper!, + ), + 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 + AdPodInfo pigeon_copy() { + return AdPodInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adPosition: adPosition, + maxDuration: maxDuration, + podIndex: podIndex, + timeOffset: timeOffset, + totalAds: totalAds, + isBumper: isBumper, + ); + } +} + +/// FrameLayout is designed to block out an area on the screen to display a +/// single item. +/// +/// See https://developer.android.com/reference/android/widget/FrameLayout. +class FrameLayout extends ViewGroup { + FrameLayout({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached() { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecFrameLayout; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [FrameLayout] 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 + FrameLayout.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached(); + + late final _PigeonProxyApiBaseCodec __pigeon_codecFrameLayout = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + FrameLayout Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.FrameLayout.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.FrameLayout.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + FrameLayout.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + FrameLayout pigeon_copy() { + return FrameLayout.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// A special view that can contain other views (called children.) +/// +/// See https://developer.android.com/reference/android/view/ViewGroup. +class ViewGroup extends View { + /// Constructs [ViewGroup] 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 + ViewGroup.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached(); + + late final _PigeonProxyApiBaseCodec __pigeon_codecViewGroup = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + ViewGroup Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.ViewGroup.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.ViewGroup.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + ViewGroup.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + Future addView(View view) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecViewGroup; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, view]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + ViewGroup pigeon_copy() { + return ViewGroup.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Displays a video file. +/// +/// See https://developer.android.com/reference/android/widget/VideoView. +class VideoView extends View { + /// Constructs [VideoView] 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 + VideoView.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached(); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + VideoView Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.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.VideoView.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + VideoView.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + VideoView pigeon_copy() { + return VideoView.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// This class represents the basic building block for user interface components. +/// +/// See https://developer.android.com/reference/android/view/View. +class View extends PigeonProxyApiBaseClass { + /// Constructs [View] 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 + View.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + View Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.View.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.View.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + View.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + View pigeon_copy() { + return View.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} 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 fbef674ca72..d88b4aeb7fb 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// ignore_for_file: avoid_unused_constructor_parameters + import 'package:pigeon/pigeon.dart'; @ConfigurePigeon( @@ -72,3 +74,215 @@ abstract class AdsRequest {} ), ) abstract class AdsManager {} + +/// Factory class for creating SDK objects. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', + ), +) +abstract class ImaSdkFactory { + @static + AdDisplayContainer createAdDisplayContainer( + ViewGroup container, + VideoAdPlayer player, + ); +} + +/// Defines the set of methods that a video player must implement to be used by +/// the IMA SDK, as well as a set of callbacks that it must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', + ), +) +abstract class VideoAdPlayer { + /// Adds a callback. + late final void Function(VideoAdPlayerCallback callback) addCallback; + + /// Loads a video ad hosted at AdMediaInfo. + late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; + + /// Pauses playing the current ad. + late final void Function(AdMediaInfo adMediaInfo) pauseAd; + + /// Starts or resumes playing the video ad referenced by the AdMediaInfo, + /// provided loadAd has already been called for it. + late final void Function(AdMediaInfo adMediaInfo) playAd; + + /// Cleans up and releases all resources used by the `VideoAdPlayer`. + late final void Function() release; + + /// Removes a callback. + late final void Function(VideoAdPlayerCallback callback) removeCallback; + + /// Stops playing the current ad. + late final void Function(AdMediaInfo adMediaInfo) stopAd; + + /// The volume of the player as a percentage from 0 to 100. + void setVolume(int value); + + /// The `VideoProgressUpdate` describing playback progress of the current + /// video. + void setAdProgress(VideoProgressUpdate progress); +} + +/// Defines an update to the video's progress. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', + ), +) +abstract class VideoProgressUpdate { + VideoProgressUpdate(int currentTimeMs, int durationMs); + + /// Value to use for cases when progress is not yet defined, such as video + /// initialization. + @static + @attached + late final VideoProgressUpdate videoTimeNotReady; +} + +/// Callbacks that the player must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', + ), +) +abstract class VideoAdPlayerCallback { + /// Fire this callback periodically as ad playback occurs. + void onAdProgress( + AdMediaInfo adMediaInfo, + VideoProgressUpdate videoProgressUpdate, + ); + + /// Fire this callback when video playback stalls waiting for data. + void onBuffering(AdMediaInfo adMediaInfo); + + /// Fire this callback when all content has finished playing. + void onContentComplete(); + + /// Fire this callback when the video finishes playing. + void onEnded(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video has encountered an error. + void onError(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is ready to begin playback. + void onLoaded(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is paused. + void onPause(AdMediaInfo adMediaInfo); + + /// Fire this callback when the player begins playing a video. + void onPlay(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is unpaused. + void onResume(AdMediaInfo adMediaInfo); + + /// Fire this callback when the playback volume changes. + void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); +} + +/// The minimal information required to play an ad. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', + ), +) +abstract class AdMediaInfo { + late final String url; +} + +/// An ad may be part of a pod of ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', + ), +) +abstract class AdPodInfo { + /// The position of the ad within the pod. + /// + /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the + /// ad is not part of a pod, this will return 1. + late final int adPosition; + + /// The maximum duration of the pod in seconds. + /// + /// For unknown duration, -1 is returned. + late final double maxDuration; + + /// Client side and DAI VOD: Returns the index of the ad pod. + late final int podIndex; + + /// The content time offset at which the current ad pod was scheduled. + /// + /// For preroll pod, 0 is returned. For midrolls, the scheduled time is + /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this + /// ad is not part of a pod, or the pod is not part of an ad playlist. + late final double timeOffset; + + /// The total number of ads contained within this pod, including bumpers. + late final int totalAds; + + /// Returns true if the ad is a bumper ad. + late final bool isBumper; +} + +/// FrameLayout is designed to block out an area on the screen to display a +/// single item. +/// +/// See https://developer.android.com/reference/android/widget/FrameLayout. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.widget.FrameLayout', + ), +) +abstract class FrameLayout extends ViewGroup { + FrameLayout(); +} + +/// A special view that can contain other views (called children.) +/// +/// See https://developer.android.com/reference/android/view/ViewGroup. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.view.ViewGroup', + ), +) +abstract class ViewGroup extends View { + void addView(View view); +} + +/// Displays a video file. +/// +/// See https://developer.android.com/reference/android/widget/VideoView. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.widget.VideoView', + ), +) +abstract class VideoView extends View {} + +/// This class represents the basic building block for user interface components. +/// +/// See https://developer.android.com/reference/android/view/View. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), +) +abstract class View {} From b3317a06bcba91f27504e6c17533101bcb66f369 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 26 Apr 2024 19:22:51 -0400 Subject: [PATCH 03/76] some more videview stuff --- .../GeneratedInteractiveMediaAdsLibrary.kt | 1258 +++++++++-------- .../MediaPlayerProxyApi.kt | 23 + .../ProxyApiRegistrar.kt | 4 + .../VideoViewProxyApi.kt | 17 +- .../android/android_ad_display_container.dart | 28 +- .../lib/src/android/android_view_widget.dart | 101 ++ .../src/android/interactive_media_ads.g.dart | 618 ++++++-- .../android/platform_views_service_proxy.dart | 49 + .../interactive_media_ads_android.dart | 45 +- 9 files changed, 1435 insertions(+), 708 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt create mode 100644 packages/interactive_media_ads/lib/src/android/android_view_widget.dart create mode 100644 packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index f77b8aa7c29..cc5ca14b40e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -17,31 +17,33 @@ private fun wrapResult(result: Any?): List { private fun wrapError(exception: Throwable): List { if (exception is FlutterError) { - return listOf(exception.code, exception.message, exception.details) + return listOf( + exception.code, + exception.message, + exception.details + ) } else { return listOf( - exception.javaClass.simpleName, - exception.toString(), - "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception) + ) } } private fun createConnectionError(channelName: String): FlutterError { - return FlutterError( - "channel-error", "Unable to establish connection on channel: '$channelName'.", "") -} + return FlutterError("channel-error", "Unable to establish connection on channel: '$channelName'.", "")} /** * Error class for passing custom error details to Flutter via a thrown PlatformException. - * * @property code The error code. * @property message The error message. * @property details The error details. Must be a datatype supported by the api codec. */ -class FlutterError( - val code: String, - override val message: String? = null, - val details: Any? = null +class FlutterError ( + val code: String, + override val message: String? = null, + val details: Any? = null ) : Throwable() /** * Maintains instances used to communicate with the corresponding objects in Dart. @@ -55,12 +57,12 @@ class FlutterError( * reference is removed with [remove] and the weak reference is deallocated, the * `finalizationListener` is made with the instance's identifier. However, if the strong reference * is removed and then the identifier is retrieved with the intention to pass the identifier to Dart - * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the instance is - * recreated. The strong reference will then need to be removed manually again. + * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the + * instance is recreated. The strong reference will then need to be removed manually again. */ @Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused") class PigeonInstanceManager(private val finalizationListener: PigeonFinalizationListener) { - /** Interface for listening when a weak reference of an instance is removed from the manager. */ + /** Interface for listening when a weak reference of an instance is removed from the manager. */ interface PigeonFinalizationListener { fun onFinalize(identifier: Long) } @@ -86,7 +88,10 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization } init { - handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) + handler.postDelayed( + { releaseAllFinalizedInstances() }, + clearFinalizedWeakReferencesInterval + ) } companion object { @@ -100,6 +105,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Instantiate a new manager. * + * * When the manager is no longer needed, [stopFinalizationListener] must be called. * * @param finalizationListener the listener for garbage collected weak references. @@ -117,8 +123,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier paired to an instance. * @param the expected return type. * @return the removed instance if the manager contains the given identifier, otherwise `null` if - * the manager doesn't contain the value. - */ + * the manager doesn't contain the value. + */ fun remove(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() return strongInstances.remove(identifier) as T? @@ -127,17 +133,19 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Retrieves the identifier paired with an instance. * + * * If the manager contains a strong reference to `instance`, it will return the identifier * associated with `instance`. If the manager contains only a weak reference to `instance`, a new * strong reference to `instance` will be added and will need to be removed again with [remove]. * + * * If this method returns a nonnull identifier, this method also expects the Dart * `PigeonInstanceManager` to have, or recreate, a weak reference to the Dart instance the * identifier is associated with. * * @param instance an instance that may be stored in the manager. * @return the identifier associated with `instance` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. + * `null` if the manager doesn't contain the value. */ fun getIdentifierForStrongReference(instance: Any?): Long? { logWarningIfFinalizationListenerHasStopped() @@ -151,13 +159,14 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Adds a new instance that was instantiated from Dart. * - * The same instance can be added multiple times, but each identifier must be unique. This allows - * two objects that are equivalent (e.g. the `equals` method returns true and their hashcodes are - * equal) to both be added. + * + * The same instance can be added multiple times, but each identifier must be unique. This + * allows two objects that are equivalent (e.g. the `equals` method returns true and their + * hashcodes are equal) to both be added. * * @param instance the instance to be stored. * @param identifier the identifier to be paired with instance. This value must be >= 0 and - * unique. + * unique. */ fun addDartCreatedInstance(instance: Any, identifier: Long) { logWarningIfFinalizationListenerHasStopped() @@ -172,9 +181,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization */ fun addHostCreatedInstance(instance: Any): Long { logWarningIfFinalizationListenerHasStopped() - require(!containsInstance(instance)) { - "Instance of ${instance.javaClass} has already been added." - } + require(!containsInstance(instance)) { "Instance of ${instance.javaClass} has already been added." } val identifier = nextIdentifier++ addInstance(instance, identifier) return identifier @@ -186,8 +193,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier associated with an instance. * @param the expected return type. * @return the instance associated with `identifier` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. - */ + * `null` if the manager doesn't contain the value. + */ fun getInstance(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() val instance = weakInstances[identifier] as java.lang.ref.WeakReference? @@ -209,6 +216,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Stop the periodic run of the [PigeonFinalizationListener] for instances that have been garbage * collected. * + * * The InstanceManager can continue to be used, but the [PigeonFinalizationListener] will no * longer be called and methods will log a warning. */ @@ -220,6 +228,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Removes all of the instances from this manager. * + * * The manager will be empty after this call returns. */ fun clear() { @@ -233,6 +242,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Whether the [PigeonFinalizationListener] is still being called for instances that are garbage * collected. * + * * See [stopFinalizationListener]. */ fun hasFinalizationListenerStopped(): Boolean { @@ -244,8 +254,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization return } var reference: java.lang.ref.WeakReference? - while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != - null) { + while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != null) { val identifier = weakReferencesToIdentifiers.remove(reference) if (identifier != null) { weakInstances.remove(identifier) @@ -253,7 +262,10 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization finalizationListener.onFinalize(identifier) } } - handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) + handler.postDelayed( + { releaseAllFinalizedInstances() }, + clearFinalizedWeakReferencesInterval + ) } private fun addInstance(instance: Any, identifier: Long) { @@ -271,63 +283,55 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization private fun logWarningIfFinalizationListenerHasStopped() { if (hasFinalizationListenerStopped()) { Log.w( - tag, - "The manager was used after calls to the PigeonFinalizationListener has been stopped.") + tag, + "The manager was used after calls to the PigeonFinalizationListener has been stopped." + ) } } } -/** Generated API for managing the Dart and native `PigeonInstanceManager`s. */ +/** +* Generated API for managing the Dart and native `PigeonInstanceManager`s. +*/ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { companion object { /** The codec used by PigeonInstanceManagerApi. */ - private val codec: MessageCodec by lazy { StandardMessageCodec() } + private val codec: MessageCodec by lazy { + StandardMessageCodec() + } /** - * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the - * `binaryMessenger`. - */ - fun setUpMessageHandlers( - binaryMessenger: BinaryMessenger, - instanceManager: PigeonInstanceManager? - ) { + * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the + * `binaryMessenger`. + */ + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, instanceManager: PigeonInstanceManager?) { run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", codec) if (instanceManager != null) { channel.setMessageHandler { message, reply -> val identifier = message as Number - val wrapped: List = - try { - instanceManager.remove(identifier.toLong()) - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = try { + instanceManager.remove(identifier.toLong()) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { channel.setMessageHandler(null) - } + } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", codec) if (instanceManager != null) { channel.setMessageHandler { _, reply -> - val wrapped: List = - try { - instanceManager.clear() - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = try { + instanceManager.clear() + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -338,8 +342,7 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { - val channelName = - "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" + val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(identifier) { if (it is List<*>) { @@ -356,8 +359,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } /** - * Provides implementations for each ProxyApi implementation and provides access to resources needed - * by any implementation. + * Provides implementations for each ProxyApi implementation and provides access to resources + * needed by any implementation. */ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val instanceManager: PigeonInstanceManager @@ -365,7 +368,7 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val codec: StandardMessageCodec get() { if (_codec == null) { - _codec = PigeonProxyApiBaseCodec(this) + _codec = PigeonProxyApiBaseCodec(this) } return _codec!! } @@ -373,18 +376,19 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { init { val api = PigeonInstanceManagerApi(binaryMessenger) instanceManager = - PigeonInstanceManager.create( - object : PigeonInstanceManager.PigeonFinalizationListener { - override fun onFinalize(identifier: Long) { - api.removeStrongReference(identifier) { - if (it.isFailure) { - Log.e( - "PigeonProxyApiRegistrar", - "Failed to remove Dart strong reference with identifier: $identifier") - } - } + PigeonInstanceManager.create( + object : PigeonInstanceManager.PigeonFinalizationListener { + override fun onFinalize(identifier: Long) { + api.removeStrongReference(identifier) { + if (it.isFailure) { + Log.e( + "PigeonProxyApiRegistrar", + "Failed to remove Dart strong reference with identifier: $identifier" + ) } - }) + } + } + }) } /** @@ -400,20 +404,20 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer /** - * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of `AdsLoader` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of + * `AdsLoader` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsLoader(): PigeonApiAdsLoader /** - * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of `AdsRequest` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of + * `AdsRequest` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsRequest(): PigeonApiAdsRequest /** - * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of + * `AdsManager` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsManager(): PigeonApiAdsManager @@ -442,53 +446,58 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback /** - * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of `AdMediaInfo` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of + * `AdMediaInfo` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdMediaInfo(): PigeonApiAdMediaInfo /** - * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of `AdPodInfo` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of + * `AdPodInfo` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdPodInfo(): PigeonApiAdPodInfo /** - * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of `FrameLayout` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of + * `FrameLayout` to the Dart `InstanceManager`. */ abstract fun getPigeonApiFrameLayout(): PigeonApiFrameLayout /** - * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of `ViewGroup` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of + * `ViewGroup` to the Dart `InstanceManager`. */ abstract fun getPigeonApiViewGroup(): PigeonApiViewGroup /** - * An implementation of [PigeonApiVideoView] used to add a new Dart instance of `VideoView` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiVideoView] used to add a new Dart instance of + * `VideoView` to the Dart `InstanceManager`. */ abstract fun getPigeonApiVideoView(): PigeonApiVideoView /** - * An implementation of [PigeonApiView] used to add a new Dart instance of `View` to the Dart - * `InstanceManager`. + * An implementation of [PigeonApiView] used to add a new Dart instance of + * `View` to the Dart `InstanceManager`. */ abstract fun getPigeonApiView(): PigeonApiView + /** + * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of + * `MediaPlayer` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiMediaPlayer(): PigeonApiMediaPlayer + fun setUp() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, instanceManager) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory()) PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayer()) - PigeonApiVideoProgressUpdate.setUpMessageHandlers( - binaryMessenger, getPigeonApiVideoProgressUpdate()) - PigeonApiVideoAdPlayerCallback.setUpMessageHandlers( - binaryMessenger, getPigeonApiVideoAdPlayerCallback()) + PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoProgressUpdate()) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayerCallback()) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, getPigeonApiFrameLayout()) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, getPigeonApiViewGroup()) + PigeonApiVideoView.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoView()) + PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiMediaPlayer()) } - fun tearDown() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, null) @@ -497,11 +506,11 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, null) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, null) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, null) + PigeonApiVideoView.setUpMessageHandlers(binaryMessenger, null) + PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, null) } } - -private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : - StandardMessageCodec() { +private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : StandardMessageCodec() { override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { @@ -514,36 +523,52 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { if (value is com.google.ads.interactivemedia.v3.api.AdDisplayContainer) { - registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { - registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { - registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { - registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { - registrar.getPigeonApiAdsManager().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { - registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { - registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { - registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) {} - } else if (value - is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { - registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { - registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { - registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) {} - } else if (value is android.widget.FrameLayout) { - registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) {} - } else if (value is android.view.ViewGroup) { - registrar.getPigeonApiViewGroup().pigeon_newInstance(value) {} - } else if (value is android.widget.VideoView) { - registrar.getPigeonApiVideoView().pigeon_newInstance(value) {} - } else if (value is android.view.View) { - registrar.getPigeonApiView().pigeon_newInstance(value) {} + registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { + registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { + registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { + registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { + registrar.getPigeonApiAdsManager().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { + registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { + registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { + registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { + registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { + registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { + registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) { } + } + else if (value is android.widget.FrameLayout) { + registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) { } + } + else if (value is android.view.ViewGroup) { + registrar.getPigeonApiViewGroup().pigeon_newInstance(value) { } + } + else if (value is android.widget.VideoView) { + registrar.getPigeonApiVideoView().pigeon_newInstance(value) { } + } + else if (value is android.view.View) { + registrar.getPigeonApiView().pigeon_newInstance(value) { } + } + else if (value is android.media.MediaPlayer) { + registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) { } } when { @@ -558,27 +583,22 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : /** * A base class for more specialized container interfaces. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -589,34 +609,30 @@ abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApi } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * A container in which to display the ads. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -627,37 +643,35 @@ abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRe } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ - fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { + /**An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ + fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer + { return pigeonRegistrar.getPigeonApiBaseDisplayContainer() } + } /** - * An object which allows publishers to request ads from ad servers or a dynamic ad insertion - * stream. + * An object which allows publishers to request ads from ad servers or a + * dynamic ad insertion stream. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" @@ -671,30 +685,27 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * 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/com/google/ads/interactivemedia/v3/api/AdsRequest. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" @@ -708,30 +719,28 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** - * An object which handles playing ads after they've been received from the server. + * An object which handles playing ads after they've been received from the + * server. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" @@ -745,33 +754,26 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Factory class for creating SDK objects. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun createAdDisplayContainer( - container: android.view.ViewGroup, - player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - ): com.google.ads.interactivemedia.v3.api.AdDisplayContainer + abstract fun createAdDisplayContainer(container: android.view.ViewGroup, player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer): com.google.ads.interactivemedia.v3.api.AdDisplayContainer companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -793,17 +795,14 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.pigeon_newInstance" @@ -817,46 +816,38 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** - * Defines the set of methods that a video player must implement to be used by the IMA SDK, as well - * as a set of callbacks that it must fire. + * Defines the set of methods that a video player must implement to be used by + * the IMA SDK, as well as a set of callbacks that it must fire. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The volume of the player as a percentage from 0 to 100. */ - abstract fun setVolume( - pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - value: Long - ) + abstract fun setVolume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, value: Long) - /** The `VideoProgressUpdate` describing playback progress of the current video. */ - abstract fun setAdProgress( - pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - ) + /** + * The `VideoProgressUpdate` describing playback progress of the current + * video. + */ + abstract fun setAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", 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.player.VideoAdPlayer + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { @@ -872,18 +863,12 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", 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.player.VideoAdPlayer - val progressArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + val progressArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { api.setAdProgress(pigeon_instanceArg, progressArg) @@ -901,26 +886,19 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException( - "Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") + throw IllegalStateException("Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") } /** Adds a callback. */ - fun addCallback( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callbackArg: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - callback: (Result) -> Unit - ) { + fun addCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback" @@ -934,17 +912,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Loads a video ad hosted at AdMediaInfo. */ - fun loadAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, - callback: (Result) -> Unit - ) { + fun loadAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd" @@ -958,16 +932,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Pauses playing the current ad. */ - fun pauseAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + fun pauseAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd" @@ -981,19 +952,16 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** - * Starts or resumes playing the video ad referenced by the AdMediaInfo, provided loadAd has - * already been called for it. + * Starts or resumes playing the video ad referenced by the AdMediaInfo, + * provided loadAd has already been called for it. */ - fun playAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + fun playAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd" @@ -1007,15 +975,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Cleans up and releases all resources used by the `VideoAdPlayer`. */ - fun release( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callback: (Result) -> Unit - ) { + fun release(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release" @@ -1029,17 +995,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Removes a callback. */ - fun removeCallback( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callbackArg: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - callback: (Result) -> Unit - ) { + fun removeCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback" @@ -1053,16 +1015,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Stops playing the current ad. */ - fun stopAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + fun stopAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd" @@ -1076,37 +1035,32 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Defines an update to the video's progress. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor( - currentTimeMs: Long, - durationMs: Long - ): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + abstract fun pigeon_defaultConstructor(currentTimeMs: Long, durationMs: Long): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - /** Value to use for cases when progress is not yet defined, such as video initialization. */ - abstract fun videoTimeNotReady(): - com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + /** + * Value to use for cases when progress is not yet defined, such as video + * initialization. + */ + abstract fun videoTimeNotReady(): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1115,9 +1069,7 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), - pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(currentTimeMsArg,durationMsArg), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1129,19 +1081,14 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.videoTimeNotReady(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.videoTimeNotReady(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1156,21 +1103,17 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -1181,113 +1124,60 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Callbacks that the player must fire. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Fire this callback periodically as ad playback occurs. */ - abstract fun onAdProgress( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - ) + abstract fun onAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) /** Fire this callback when video playback stalls waiting for data. */ - abstract fun onBuffering( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onBuffering(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when all content has finished playing. */ - abstract fun onContentComplete( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback - ) + abstract fun onContentComplete(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) /** Fire this callback when the video finishes playing. */ - abstract fun onEnded( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onEnded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video has encountered an error. */ - abstract fun onError( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onError(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video is ready to begin playback. */ - abstract fun onLoaded( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onLoaded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video is paused. */ - abstract fun onPause( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onPause(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the player begins playing a video. */ - abstract fun onPlay( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onPlay(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video is unpaused. */ - abstract fun onResume( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onResume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the playback volume changes. */ - abstract fun onVolumeChanged( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - percentage: Long - ) + abstract fun onVolumeChanged(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, percentage: Long) companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers( - binaryMessenger: BinaryMessenger, - api: PigeonApiVideoAdPlayerCallback? - ) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayerCallback?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val videoProgressUpdateArg = - args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val videoProgressUpdateArg = args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) @@ -1302,20 +1192,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onBuffering(pigeon_instanceArg, adMediaInfoArg) @@ -1330,18 +1212,11 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", 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.player.VideoAdPlayer.VideoAdPlayerCallback + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback var wrapped: List try { api.onContentComplete(pigeon_instanceArg) @@ -1356,20 +1231,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onEnded(pigeon_instanceArg, adMediaInfoArg) @@ -1384,20 +1251,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onError(pigeon_instanceArg, adMediaInfoArg) @@ -1412,20 +1271,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onLoaded(pigeon_instanceArg, adMediaInfoArg) @@ -1440,20 +1291,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onPause(pigeon_instanceArg, adMediaInfoArg) @@ -1468,20 +1311,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onPlay(pigeon_instanceArg, adMediaInfoArg) @@ -1496,20 +1331,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onResume(pigeon_instanceArg, adMediaInfoArg) @@ -1524,20 +1351,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { @@ -1556,22 +1375,17 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -1582,34 +1396,29 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * The minimal information required to play an ad. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun url( - pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ): String + abstract fun url(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo): String @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val urlArg = url(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -1624,23 +1433,23 @@ abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * An ad may be part of a pod of ads. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** * The position of the ad within the pod. * - * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the ad is not part of a - * pod, this will return 1. + * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the + * ad is not part of a pod, this will return 1. */ abstract fun adPosition(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long @@ -1649,9 +1458,7 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) * * For unknown duration, -1 is returned. */ - abstract fun maxDuration( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo - ): Double + abstract fun maxDuration(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double /** Client side and DAI VOD: Returns the index of the ad pod. */ abstract fun podIndex(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long @@ -1659,9 +1466,9 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) /** * The content time offset at which the current ad pod was scheduled. * - * For preroll pod, 0 is returned. For midrolls, the scheduled time is returned in seconds. For - * postroll, -1 is returned. Defaults to 0 if this ad is not part of a pod, or the pod is not part - * of an ad playlist. + * For preroll pod, 0 is returned. For midrolls, the scheduled time is + * returned in seconds. For postroll, -1 is returned. Defaults to 0 if this + * ad is not part of a pod, or the pod is not part of an ad playlist. */ abstract fun timeOffset(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double @@ -1672,17 +1479,14 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) abstract fun isBumper(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Boolean @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val adPositionArg = adPosition(pigeon_instanceArg) val maxDurationArg = maxDuration(pigeon_instanceArg) val podIndexArg = podIndex(pigeon_instanceArg) @@ -1693,30 +1497,23 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send( - listOf( - pigeon_identifierArg, - adPositionArg, - maxDurationArg, - podIndexArg, - timeOffsetArg, - totalAdsArg, - isBumperArg)) { - 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))) - } + channel.send(listOf(pigeon_identifierArg, adPositionArg, maxDurationArg, podIndexArg, timeOffsetArg, totalAdsArg, isBumperArg)) { + 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))) + } + } } + } /** - * FrameLayout is designed to block out an area on the screen to display a single item. + * FrameLayout is designed to block out an area on the screen to display a + * single item. * * See https://developer.android.com/reference/android/widget/FrameLayout. */ @@ -1729,19 +1526,14 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1756,17 +1548,14 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.widget.FrameLayout, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.widget.FrameLayout, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance" @@ -1780,15 +1569,17 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiViewGroup] used to access callback methods */ - fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup { + /**An implementation of [PigeonApiViewGroup] used to access callback methods */ + fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup + { return pigeonRegistrar.getPigeonApiViewGroup() } + } /** * A special view that can contain other views (called children.) @@ -1804,11 +1595,7 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1831,17 +1618,14 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.view.ViewGroup, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.ViewGroup, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance" @@ -1855,15 +1639,17 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView { + /**An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView + { return pigeonRegistrar.getPigeonApiView() } + } /** * Displays a video file. @@ -1872,23 +1658,101 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): android.widget.VideoView + + /** Sets the URI of the video. */ + abstract fun setVideoUri(pigeon_instance: android.widget.VideoView, uri: String) + + /** + * The current position of the playing video. + * + * In milliseconds. + */ + abstract fun getCurrentPosition(pigeon_instance: android.widget.VideoView): Long + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoView?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.widget.VideoView + val uriArg = args[1] as String + var wrapped: List + try { + api.setVideoUri(pigeon_instanceArg, uriArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.widget.VideoView + var wrapped: List + try { + wrapped = listOf(api.getCurrentPosition(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.widget.VideoView, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.widget.VideoView, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + throw IllegalStateException("Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") + } + + /** Callback to be invoked when the media source is ready for playback. */ + fun onPrepared(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { + channel.send(listOf(pigeon_instanceArg, playerArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -1897,15 +1761,60 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } + } + } + + /** Callback to be invoked when playback of a media source has completed. */ + fun onCompletion(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) +{ + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, playerArg)) { + 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))) + } + } + } + + /** + * Callback to be invoked when there has been an error during an asynchronous + * operation. + */ + fun onError(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, whatArg: Long, extraArg: Long, callback: (Result) -> Unit) +{ + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onError" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, playerArg, whatArg, extraArg)) { + 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))) + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView { + /**An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView + { return pigeonRegistrar.getPigeonApiView() } + } /** * This class represents the basic building block for user interface components. @@ -1915,14 +1824,14 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) @Suppress("UNCHECKED_CAST") abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { + /**Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance" @@ -1936,7 +1845,138 @@ abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { } } else { callback(Result.failure(createConnectionError(channelName))) + } + } + } + +} +/** + * MediaPlayer class can be used to control playback of audio/video files and + * streams. + * + * See https://developer.android.com/reference/android/media/MediaPlayer. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Gets the duration of the file. */ + abstract fun getDuration(pigeon_instance: android.media.MediaPlayer): Long + + /** Seeks to specified time position. */ + abstract fun seekTo(pigeon_instance: android.media.MediaPlayer, mSec: Long) + + /** Starts or resumes playback. */ + abstract fun start(pigeon_instance: android.media.MediaPlayer) + + /** Pauses playback. */ + abstract fun pause(pigeon_instance: android.media.MediaPlayer) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.media.MediaPlayer + var wrapped: List + try { + wrapped = listOf(api.getDuration(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.media.MediaPlayer + val mSecArg = args[1].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.seekTo(pigeon_instanceArg, mSecArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.media.MediaPlayer + var wrapped: List + try { + api.start(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.media.MediaPlayer + var wrapped: List + try { + api.pause(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } } } } + + @Suppress("LocalVariableName", "FunctionName") + /**Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.media.MediaPlayer, callback: (Result) -> Unit) +{ + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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/MediaPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt new file mode 100644 index 00000000000..9f0bf5668fd --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt @@ -0,0 +1,23 @@ +package dev.flutter.packages.interactive_media_ads + +import android.media.MediaPlayer + +class MediaPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiMediaPlayer( + pigeonRegistrar +) { + override fun getDuration(pigeon_instance: MediaPlayer): Long { + return pigeon_instance.duration.toLong() + } + + override fun seekTo(pigeon_instance: MediaPlayer, mSec: Long) { + pigeon_instance.seekTo(mSec.toInt()) + } + + override fun start(pigeon_instance: MediaPlayer) { + pigeon_instance.start() + } + + override fun pause(pigeon_instance: MediaPlayer) { + pigeon_instance.pause() + } +} \ No newline at end of file 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 7d5269a2c0f..ea0554aa293 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 @@ -68,4 +68,8 @@ class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) override fun getPigeonApiView(): PigeonApiView { return ViewProxyApi(this) } + + override fun getPigeonApiMediaPlayer(): PigeonApiMediaPlayer { + return MediaPlayerProxyApi(this) + } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index e46bc2b8f23..fc5015484d8 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -1,4 +1,19 @@ package dev.flutter.packages.interactive_media_ads +import android.net.Uri +import android.widget.VideoView + class VideoViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiVideoView(pigeonRegistrar) {} + PigeonApiVideoView(pigeonRegistrar) { + override fun pigeon_defaultConstructor(): VideoView { + return VideoView((pigeonRegistrar as ProxyApiRegistrar).context) + } + + override fun setVideoUri(pigeon_instance: VideoView, uri: String) { + pigeon_instance.setVideoURI(Uri.parse(uri)) + } + + override fun getCurrentPosition(pigeon_instance: VideoView): Long { + return pigeon_instance.currentPosition.toLong() + } +} diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 8299d3f7d1d..9844e9c4b01 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -5,12 +5,36 @@ import 'package:flutter/widgets.dart'; import '../platform_interface/platform_interface.dart'; +import 'android_view_widget.dart'; +import 'interactive_media_ads.g.dart'; final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { - AndroidAdDisplayContainer(super.params) : super.implementation(); + AndroidAdDisplayContainer(super.params) : super.implementation() { + final WeakReference weakThis = + WeakReference(this); + videoView = VideoView( + onError: ( + VideoView pigeonInstance, + MediaPlayer player, + int what, + int extra, + ) { + // report ad load error + }, + ); + + frameLayout.addView(videoView); + } + + final FrameLayout frameLayout = FrameLayout(); + + late final VideoView videoView; @override Widget build(BuildContext context) { - throw UnimplementedError(); + return AndroidViewWidget( + view: frameLayout, + onPlatformViewCreated: () => params.onContainerAdded(this), + ); } } diff --git a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart new file mode 100644 index 00000000000..c745983ee1a --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart @@ -0,0 +1,101 @@ +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; + +import 'interactive_media_ads.g.dart' as interactive_media_ads; +import 'platform_views_service_proxy.dart'; + +/// Represents a Flutter implementation of the Android [View](https://developer.android.com/reference/android/view/View) +/// that is created by the Android platform. +class AndroidViewWidget extends StatelessWidget { + /// Creates a [AndroidViewWidget]. + /// + /// The [AndroidViewWidget] should only be instantiated internally. + /// This constructor is visible for testing purposes only and should + /// never be called externally. + AndroidViewWidget({ + super.key, + required this.view, + this.layoutDirection = TextDirection.ltr, + this.onPlatformViewCreated, + this.displayWithHybridComposition = false, + interactive_media_ads.PigeonInstanceManager? instanceManager, + this.platformViewsServiceProxy = const PlatformViewsServiceProxy(), + }) : instanceManager = instanceManager ?? + interactive_media_ads.PigeonInstanceManager.instance; + + /// The reference to the Android native view that should be shown. + final interactive_media_ads.View view; + + /// Maintains instances used to communicate with the native objects they + /// represent. + /// + /// This field is exposed for testing purposes only and should not be used + /// outside of tests. + final interactive_media_ads.PigeonInstanceManager instanceManager; + + /// Proxy that provides access to the platform views service. + /// + /// This service allows creating and controlling platform-specific views. + final PlatformViewsServiceProxy platformViewsServiceProxy; + + /// Whether to use Hybrid Composition to display the Android View. + final bool displayWithHybridComposition; + + /// Layout direction used by the Android View. + final TextDirection layoutDirection; + + /// Callback that will get invoke after the platform view has been created. + final VoidCallback? onPlatformViewCreated; + + @override + Widget build(BuildContext context) { + return PlatformViewLink( + key: key, + viewType: 'plugins.flutter.io/webview', + surfaceFactory: ( + BuildContext context, + PlatformViewController controller, + ) { + return AndroidViewSurface( + controller: controller as AndroidViewController, + hitTestBehavior: PlatformViewHitTestBehavior.opaque, + gestureRecognizers: const >{}, + ); + }, + onCreatePlatformView: (PlatformViewCreationParams params) { + return _initAndroidView(params) + ..addOnPlatformViewCreatedListener((int id) { + params.onPlatformViewCreated(id); + onPlatformViewCreated?.call(); + }) + ..create(); + }, + ); + } + + AndroidViewController _initAndroidView(PlatformViewCreationParams params) { + const String viewType = 'interactive_media_ads.packages.flutter.dev/view'; + final int? identifier = instanceManager.getIdentifier(view); + + if (displayWithHybridComposition) { + return platformViewsServiceProxy.initExpensiveAndroidView( + id: params.id, + viewType: viewType, + layoutDirection: layoutDirection, + creationParams: identifier, + creationParamsCodec: const StandardMessageCodec(), + ); + } else { + return platformViewsServiceProxy.initSurfaceAndroidView( + id: params.id, + viewType: viewType, + layoutDirection: layoutDirection, + creationParams: identifier, + creationParamsCodec: const StandardMessageCodec(), + ); + } + } +} 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 f1cb4bca418..c012839c882 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 @@ -8,8 +8,7 @@ import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' - show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -20,8 +19,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -30,7 +28,6 @@ List wrapResponse( } return [error.code, error.message, error.details]; } - /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -116,8 +113,7 @@ class PigeonInstanceManager { final Expando _identifiers = Expando(); final Map> _weakInstances = >{}; - final Map _strongInstances = - {}; + final Map _strongInstances = {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -135,37 +131,23 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInstanceManagerApi.setUpMessageHandlers( - instanceManager: instanceManager); - BaseDisplayContainer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdDisplayContainer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsLoader.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsRequest.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsManager.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - ImaSdkFactory.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoAdPlayer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoProgressUpdate.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoAdPlayerCallback.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdMediaInfo.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdPodInfo.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - FrameLayout.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - ViewGroup.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoView.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); + _PigeonInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); + BaseDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsLoader.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + ImaSdkFactory.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoAdPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoProgressUpdate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoAdPlayerCallback.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdMediaInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdPodInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + FrameLayout.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + ViewGroup.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); View.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + MediaPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); return instanceManager; } @@ -229,19 +211,15 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference( - int identifier) { - final PigeonProxyApiBaseClass? weakInstance = - _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference(int identifier) { + final PigeonProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonProxyApiBaseClass? strongInstance = - _strongInstances[identifier]; + final PigeonProxyApiBaseClass? strongInstance = _strongInstances[identifier]; if (strongInstance != null) { final PigeonProxyApiBaseClass copy = strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = - WeakReference(copy); + _weakInstances[identifier] = WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -265,20 +243,17 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance( - PigeonProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance(PigeonProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier( - PigeonProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier(PigeonProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = - WeakReference(instance); + _weakInstances[identifier] = WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonProxyApiBaseClass copy = instance.pigeon_copy(); @@ -309,9 +284,9 @@ class _PigeonInstanceManagerApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - + static const MessageCodec pigeonChannelCodec = - StandardMessageCodec(); + StandardMessageCodec(); static void setUpMessageHandlers({ BinaryMessenger? binaryMessenger, @@ -387,30 +362,28 @@ class _PigeonInstanceManagerApi { } } } - class _PigeonProxyApiBaseCodec extends StandardMessageCodec { - const _PigeonProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } + const _PigeonProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } } /// A base class for more specialized container interfaces. @@ -2375,6 +2348,42 @@ class ViewGroup extends View { /// /// See https://developer.android.com/reference/android/widget/VideoView. class VideoView extends View { + VideoView({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + this.onPrepared, + this.onCompletion, + required this.onError, + }) : super.pigeon_detached() { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + /// Constructs [VideoView] without creating the associated native object. /// /// This should only be used by subclasses created by this library or to @@ -2383,44 +2392,167 @@ class VideoView extends View { VideoView.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, + this.onPrepared, + this.onCompletion, + required this.onError, }) : super.pigeon_detached(); + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoView = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Callback to be invoked when the media source is ready for playback. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoView instance = VideoView( + /// onPrepared: (VideoView pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onPrepared; + + /// Callback to be invoked when playback of a media source has completed. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoView instance = VideoView( + /// onCompletion: (VideoView pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onCompletion; + + /// Callback to be invoked when there has been an error during an asynchronous + /// operation. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoView instance = VideoView( + /// onError: (VideoView pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoView pigeon_instance, + MediaPlayer player, + int what, + int extra, + ) onError; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - VideoView Function()? pigeon_newInstance, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onPrepared, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onCompletion, + void Function( + VideoView pigeon_instance, + MediaPlayer player, + int what, + int extra, + )? onError, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( pigeon_instanceManager ?? PigeonInstanceManager.instance); final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { __pigeon_channel.setMessageHandler(null); } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared 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.VideoView.pigeon_newInstance was null, expected non-null int.'); + final VideoView? arg_pigeon_instance = (args[0] as VideoView?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null, expected non-null VideoView.'); + final MediaPlayer? arg_player = (args[1] as MediaPlayer?); + assert(arg_player != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null, expected non-null MediaPlayer.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - VideoView.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ), - arg_pigeon_instanceIdentifier!, - ); + (onPrepared ?? arg_pigeon_instance!.onPrepared) + ?.call(arg_pigeon_instance!, arg_player!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null.'); + final List args = (message as List?)!; + final VideoView? arg_pigeon_instance = (args[0] as VideoView?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null, expected non-null VideoView.'); + final MediaPlayer? arg_player = (args[1] as MediaPlayer?); + assert(arg_player != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null, expected non-null MediaPlayer.'); + try { + (onCompletion ?? arg_pigeon_instance!.onCompletion) + ?.call(arg_pigeon_instance!, arg_player!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2431,6 +2563,106 @@ class VideoView extends View { }); } } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoView.onError', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null.'); + final List args = (message as List?)!; + final VideoView? arg_pigeon_instance = (args[0] as VideoView?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null VideoView.'); + final MediaPlayer? arg_player = (args[1] as MediaPlayer?); + assert(arg_player != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null MediaPlayer.'); + final int? arg_what = (args[2] as int?); + assert(arg_what != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null int.'); + final int? arg_extra = (args[3] as int?); + assert(arg_extra != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null int.'); + try { + (onError ?? arg_pigeon_instance!.onError) + .call(arg_pigeon_instance!, arg_player!, arg_what!, arg_extra!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + /// Sets the URI of the video. + Future setVideoUri(String uri) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, uri]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// The current position of the playing video. + /// + /// In milliseconds. + Future getCurrentPosition() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as int?)!; + } } @override @@ -2438,6 +2670,9 @@ class VideoView extends View { return VideoView.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + onPrepared: onPrepared, + onCompletion: onCompletion, + onError: onError, ); } } @@ -2512,3 +2747,196 @@ class View extends PigeonProxyApiBaseClass { ); } } + +/// MediaPlayer class can be used to control playback of audio/video files and +/// streams. +/// +/// See https://developer.android.com/reference/android/media/MediaPlayer. +class MediaPlayer extends PigeonProxyApiBaseClass { + /// Constructs [MediaPlayer] 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 + MediaPlayer.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecMediaPlayer = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + MediaPlayer Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.MediaPlayer.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.MediaPlayer.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + MediaPlayer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + /// Gets the duration of the file. + Future getDuration() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as int?)!; + } + } + + /// Seeks to specified time position. + Future seekTo(int mSec) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, mSec]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Starts or resumes playback. + Future start() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Pauses playback. + Future pause() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + MediaPlayer pigeon_copy() { + return MediaPlayer.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + diff --git a/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart b/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart new file mode 100644 index 00000000000..b3c9d823e76 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart @@ -0,0 +1,49 @@ +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; + +/// Proxy that provides access to the platform views service. +/// +/// This service allows creating and controlling platform-specific views. +@immutable +class PlatformViewsServiceProxy { + /// Constructs a [PlatformViewsServiceProxy]. + const PlatformViewsServiceProxy(); + + /// Proxy method for [PlatformViewsService.initExpensiveAndroidView]. + ExpensiveAndroidViewController initExpensiveAndroidView({ + required int id, + required String viewType, + required TextDirection layoutDirection, + dynamic creationParams, + MessageCodec? creationParamsCodec, + VoidCallback? onFocus, + }) { + return PlatformViewsService.initExpensiveAndroidView( + id: id, + viewType: viewType, + layoutDirection: layoutDirection, + creationParams: creationParams, + creationParamsCodec: creationParamsCodec, + onFocus: onFocus, + ); + } + + /// Proxy method for [PlatformViewsService.initSurfaceAndroidView]. + SurfaceAndroidViewController initSurfaceAndroidView({ + required int id, + required String viewType, + required TextDirection layoutDirection, + dynamic creationParams, + MessageCodec? creationParamsCodec, + VoidCallback? onFocus, + }) { + return PlatformViewsService.initSurfaceAndroidView( + id: id, + viewType: viewType, + layoutDirection: layoutDirection, + creationParams: creationParams, + creationParamsCodec: creationParamsCodec, + onFocus: onFocus, + ); + } +} 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 d88b4aeb7fb..9e9443a0a29 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -277,7 +277,27 @@ abstract class ViewGroup extends View { fullClassName: 'android.widget.VideoView', ), ) -abstract class VideoView extends View {} +abstract class VideoView extends View { + VideoView(); + + /// Callback to be invoked when the media source is ready for playback. + late final void Function(MediaPlayer player)? onPrepared; + + /// Callback to be invoked when playback of a media source has completed. + late final void Function(MediaPlayer player)? onCompletion; + + /// Callback to be invoked when there has been an error during an asynchronous + /// operation. + late final void Function(MediaPlayer player, int what, int extra) onError; + + /// Sets the URI of the video. + void setVideoUri(String uri); + + /// The current position of the playing video. + /// + /// In milliseconds. + int getCurrentPosition(); +} /// This class represents the basic building block for user interface components. /// @@ -286,3 +306,26 @@ abstract class VideoView extends View {} kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), ) abstract class View {} + +/// MediaPlayer class can be used to control playback of audio/video files and +/// streams. +/// +/// See https://developer.android.com/reference/android/media/MediaPlayer. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.media.MediaPlayer', + ), +) +abstract class MediaPlayer { + /// Gets the duration of the file. + int getDuration(); + + /// Seeks to specified time position. + void seekTo(int mSec); + + /// Starts or resumes playback. + void start(); + + /// Pauses playback. + void pause(); +} From 631c1e03aaec0e3bf4efd168d9eedc6a7cd43b55 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 26 Apr 2024 20:35:12 -0400 Subject: [PATCH 04/76] some display implementation for android --- .../GeneratedInteractiveMediaAdsLibrary.kt | 43 ++++++ .../MediaPlayerProxyApi.kt | 4 + .../VideoAdPlayerProxyApi.kt | 51 +++++++- .../VideoViewProxyApi.kt | 15 ++- .../android/android_ad_display_container.dart | 122 ++++++++++++++++-- .../src/android/interactive_media_ads.g.dart | 69 ++++++++++ .../interactive_media_ads_android.dart | 5 + 7 files changed, 295 insertions(+), 14 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index cc5ca14b40e..bffc706706e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -829,6 +829,8 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + /** The volume of the player as a percentage from 0 to 100. */ abstract fun setVolume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, value: Long) @@ -842,6 +844,25 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } run { val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", codec) if (api != null) { @@ -1870,6 +1891,9 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar /** Pauses playback. */ abstract fun pause(pigeon_instance: android.media.MediaPlayer) + /** Stops playback after playback has been started or paused. */ + abstract fun stop(pigeon_instance: android.media.MediaPlayer) + companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { @@ -1950,6 +1974,25 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler(null) } } + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_instanceArg = args[0] as android.media.MediaPlayer + var wrapped: List + try { + api.stop(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt index 9f0bf5668fd..7e2ee36eb01 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt @@ -20,4 +20,8 @@ class MediaPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiM override fun pause(pigeon_instance: MediaPlayer) { pigeon_instance.pause() } + + override fun stop(pigeon_instance: MediaPlayer) { + pigeon_instance.stop() + } } \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index 626d5fa9184..7607a2c13cc 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -1,15 +1,62 @@ package dev.flutter.packages.interactive_media_ads +import com.google.ads.interactivemedia.v3.api.AdPodInfo +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiVideoAdPlayer(pigeonRegistrar) { + override fun pigeon_defaultConstructor(): VideoAdPlayer { + return VideoAdPlayerImpl(this) + } + + private class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi): VideoAdPlayer { + var volume: Int = 0; + var adProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY + + override fun getAdProgress(): VideoProgressUpdate { + return adProgress + } + + override fun getVolume(): Int { + return volume + } + + override fun addCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { + api.addCallback(this, callbackArg = callback) {} + } + + override fun loadAd(adMediaInfo: AdMediaInfo, adPodInfo: AdPodInfo) { + api.loadAd(this, adMediaInfo, adPodInfo) {} + } + + override fun pauseAd(adMediaInfo: AdMediaInfo) { + api.pauseAd(this, adMediaInfo) {} + } + + override fun playAd(adMediaInfo: AdMediaInfo) { + api.playAd(this, adMediaInfo) {} + } + + override fun release() { + api.release(this) {} + } + + override fun removeCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { + api.removeCallback(this, callbackArg = callback) {} + } + + override fun stopAd(adMediaInfo: AdMediaInfo) { + api.stopAd(this, adMediaInfo) {} + } + } + override fun setVolume(pigeon_instance: VideoAdPlayer, value: Long) { - TODO("Not yet implemented") + (pigeon_instance as VideoAdPlayerImpl).volume = value.toInt() } override fun setAdProgress(pigeon_instance: VideoAdPlayer, progress: VideoProgressUpdate) { - TODO("Not yet implemented") + (pigeon_instance as VideoAdPlayerImpl).adProgress = progress } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index fc5015484d8..777f16e835e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -1,12 +1,25 @@ package dev.flutter.packages.interactive_media_ads +import android.media.MediaPlayer import android.net.Uri import android.widget.VideoView class VideoViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiVideoView(pigeonRegistrar) { + override fun pigeon_defaultConstructor(): VideoView { - return VideoView((pigeonRegistrar as ProxyApiRegistrar).context) + val instance = VideoView((pigeonRegistrar as ProxyApiRegistrar).context) + instance.setOnPreparedListener { player: MediaPlayer -> + onPrepared(instance, player) {} + } + instance.setOnErrorListener { player: MediaPlayer, what: Int, extra: Int -> + onError(instance, player, what.toLong(), extra.toLong()) {} + true + } + instance.setOnCompletionListener { player: MediaPlayer -> + onCompletion(instance, player) {} + } + return instance } override fun setVideoUri(pigeon_instance: VideoView, uri: String) { diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 9844e9c4b01..4f75d95f440 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -12,29 +12,129 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { AndroidAdDisplayContainer(super.params) : super.implementation() { final WeakReference weakThis = WeakReference(this); - videoView = VideoView( + videoView = _setUpVideoView(weakThis); + frameLayout.addView(videoView); + _setUpAdDisplayContainer(weakThis).then((_) { + params.onContainerAdded(this); + }); + } + + final Set videoAdPlayerCallbacks = + {};g + + AdMediaInfo? loadedAdMediaInfo; + int savedAdPosition = 0; + MediaPlayer? mediaPlayer; + + late final AdDisplayContainer adDisplayContainer; + + final FrameLayout frameLayout = FrameLayout(); + + late final VideoView videoView; + + static VideoView _setUpVideoView( + WeakReference weakThis, + ) { + return VideoView( + onCompletion: ( + VideoView pigeonInstance, + MediaPlayer player, + ) { + weakThis.target?.mediaPlayer = null; + }, + onPrepared: ( + VideoView pigeonInstance, + MediaPlayer player, + ) { + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + container.mediaPlayer = player; + if (container.savedAdPosition > 0) { + player.seekTo(container.savedAdPosition); + } + } + + player.start(); + }, onError: ( VideoView pigeonInstance, MediaPlayer player, int what, int extra, ) { - // report ad load error + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + container.mediaPlayer = null; + container.savedAdPosition = 0; + for (final VideoAdPlayerCallback callback + in container.videoAdPlayerCallbacks) { + callback.onError(container.loadedAdMediaInfo!); + } + } }, ); - - frameLayout.addView(videoView); } - final FrameLayout frameLayout = FrameLayout(); - - late final VideoView videoView; + static Future _setUpAdDisplayContainer( + WeakReference weakThis, + ) async { + return ImaSdkFactory.createAdDisplayContainer( + weakThis.target!.frameLayout, + VideoAdPlayer( + addCallback: ( + VideoAdPlayer pigeonInstance, + VideoAdPlayerCallback callback, + ) { + weakThis.target?.videoAdPlayerCallbacks.add(callback); + }, + removeCallback: ( + VideoAdPlayer pigeonInstance, + VideoAdPlayerCallback callback, + ) { + weakThis.target?.videoAdPlayerCallbacks.remove(callback); + }, + loadAd: ( + VideoAdPlayer pigeonInstance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + ) { + weakThis.target?.loadedAdMediaInfo = adMediaInfo; + }, + pauseAd: ( + VideoAdPlayer pigeonInstance, + AdMediaInfo adMediaInfo, + ) async { + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + await container.mediaPlayer!.pause(); + container.savedAdPosition = + await container.videoView.getCurrentPosition(); + } + }, + playAd: ( + VideoAdPlayer pigeonInstance, + AdMediaInfo adMediaInfo, + ) { + weakThis.target?.videoView.setVideoUri(adMediaInfo.url); + }, + release: (VideoAdPlayer pigeonInstance) {}, + stopAd: ( + VideoAdPlayer pigeonInstance, + AdMediaInfo adMediaInfo, + ) { + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + container.savedAdPosition = 0; + container.mediaPlayer = null; + container.loadedAdMediaInfo = null; + } + }, + ), + ); + } @override Widget build(BuildContext context) { - return AndroidViewWidget( - view: frameLayout, - onPlatformViewCreated: () => params.onContainerAdded(this), - ); + return AndroidViewWidget(view: frameLayout); } } 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 c012839c882..fb862480b5e 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 @@ -861,6 +861,47 @@ class ImaSdkFactory extends PigeonProxyApiBaseClass { /// /// 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 PigeonProxyApiBaseClass { + VideoAdPlayer({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.addCallback, + required this.loadAd, + required this.pauseAd, + required this.playAd, + required this.release, + required this.removeCallback, + required this.stopAd, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + /// Constructs [VideoAdPlayer] without creating the associated native object. /// /// This should only be used by subclasses created by this library or to @@ -2931,6 +2972,34 @@ class MediaPlayer extends PigeonProxyApiBaseClass { } } + /// Stops playback after playback has been started or paused. + Future stop() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + @override MediaPlayer pigeon_copy() { return MediaPlayer.pigeon_detached( 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 9e9443a0a29..a1115f52cdc 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -102,6 +102,8 @@ abstract class ImaSdkFactory { ), ) abstract class VideoAdPlayer { + VideoAdPlayer(); + /// Adds a callback. late final void Function(VideoAdPlayerCallback callback) addCallback; @@ -328,4 +330,7 @@ abstract class MediaPlayer { /// Pauses playback. void pause(); + + /// Stops playback after playback has been started or paused. + void stop(); } From 35a44457b3d6b26ade162fe8f9e93793da538330 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:38:56 -0400 Subject: [PATCH 05/76] add the minimum required wrappings --- .../AdErrorEventProxyApi.kt | 11 + .../AdErrorListenerProxyApi.kt | 17 + .../interactive_media_ads/AdErrorProxyApi.kt | 32 + .../AdEventListenerProxyApi.kt | 16 + .../interactive_media_ads/AdEventProxyApi.kt | 20 + .../AdsLoadedListenerProxyApi.kt | 18 + .../AdsLoaderProxyApi.kt | 24 +- .../AdsManagerLoadedEventProxyApi.kt | 11 + .../AdsManagerProxyApi.kt | 16 +- .../AdsRequestProxyApi.kt | 16 +- .../BaseManagerProxyApi.kt | 30 + .../ContentProgressProviderProxyApi.kt | 4 + .../GeneratedInteractiveMediaAdsLibrary.kt | 2334 ++++++++++++++--- .../ImaSdkFactoryProxyApi.kt | 24 + .../ImaSdkSettingsProxyApi.kt | 4 + .../MediaPlayerProxyApi.kt | 7 +- .../ProxyApiRegistrar.kt | 40 + .../VideoAdPlayerProxyApi.kt | 5 +- .../VideoViewProxyApi.kt | 34 +- .../android/android_ad_display_container.dart | 2 +- .../src/android/interactive_media_ads.g.dart | 1759 ++++++++++++- .../interactive_media_ads_android.dart | 257 +- 22 files changed, 4124 insertions(+), 557 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt new file mode 100644 index 00000000000..ff760440ed9 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt @@ -0,0 +1,11 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdError +import com.google.ads.interactivemedia.v3.api.AdErrorEvent + +class AdErrorEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdErrorEvent(pigeonRegistrar) { + override fun error(pigeon_instance: AdErrorEvent): AdError { + return pigeon_instance.error + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt new file mode 100644 index 00000000000..c33a3a69813 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -0,0 +1,17 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdErrorEvent + +class AdErrorListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdErrorListener(pigeonRegistrar) { + private class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : + AdErrorEvent.AdErrorListener { + override fun onAdError(event: AdErrorEvent) { + api.onAdError(this, event) {} + } + } + + override fun pigeon_defaultConstructor(): AdErrorEvent.AdErrorListener { + return AdErrorListenerImpl(this) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt new file mode 100644 index 00000000000..0160609b6c0 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -0,0 +1,32 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdError + +class AdErrorProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdError(pigeonRegistrar) { + override fun errorCode(pigeon_instance: AdError): AdErrorCode { + when (pigeon_instance.errorCode) { + AdError.AdErrorCode.ADS_PLAYER_NOT_PROVIDED -> AdErrorCode.ADS_PLAYER_WAS_NOT_PROVIDED + else -> AdErrorCode.UNKNOWN_ERROR + } + + return AdErrorCode.UNKNOWN_ERROR + } + + override fun errorCodeNumber(pigeon_instance: AdError): Long { + return pigeon_instance.errorCodeNumber.toLong() + } + + override fun errorType(pigeon_instance: AdError): AdErrorType { + when (pigeon_instance.errorType) { + AdError.AdErrorType.LOAD -> AdErrorType.LOAD + AdError.AdErrorType.PLAY -> AdErrorType.PLAY + } + + return AdErrorType.UNKNOWN + } + + override fun message(pigeon_instance: AdError): String { + return pigeon_instance.message + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt new file mode 100644 index 00000000000..bb2e09bf69b --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -0,0 +1,16 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdEvent + +class AdEventListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdEventListener(pigeonRegistrar) { + private class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { + override fun onAdEvent(event: AdEvent) { + api.onAdEvent(this, event) {} + } + } + + override fun pigeon_defaultConstructor(): AdEvent.AdEventListener { + return AdEventListenerImpl(this) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt new file mode 100644 index 00000000000..6cfc8feb5a1 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt @@ -0,0 +1,20 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdEvent + +class AdEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdEvent(pigeonRegistrar) { + override fun type(pigeon_instance: AdEvent): AdEventType { + when (pigeon_instance.type) { + AdEvent.AdEventType.ALL_ADS_COMPLETED -> AdEventType.ALL_ADS_COMPLETED + AdEvent.AdEventType.COMPLETED -> AdEventType.COMPLETED + AdEvent.AdEventType.CONTENT_PAUSE_REQUESTED -> AdEventType.CONTENT_PAUSE_REQUESTED + AdEvent.AdEventType.CONTENT_RESUME_REQUESTED -> AdEventType.CONTENT_RESUME_REQUESTED + AdEvent.AdEventType.AD_BREAK_READY -> AdEventType.AD_BREAK_READY + AdEvent.AdEventType.LOADED -> AdEventType.LOADED + else -> AdEventType.UNKNOWN + } + + return AdEventType.UNKNOWN + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt new file mode 100644 index 00000000000..6676150603e --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt @@ -0,0 +1,18 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdsLoader +import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent + +class AdsLoadedListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdsLoadedListener(pigeonRegistrar) { + private class AdsLoadedListenerImpl(val api: AdsLoadedListenerProxyApi) : + AdsLoader.AdsLoadedListener { + override fun onAdsManagerLoaded(event: AdsManagerLoadedEvent) { + api.onAdsManagerLoaded(this, event) {} + } + } + + override fun pigeon_defaultConstructor(): AdsLoader.AdsLoadedListener { + return AdsLoadedListenerImpl(this) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt index a81918f8b6d..7284b6982e9 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt @@ -4,5 +4,27 @@ package dev.flutter.packages.interactive_media_ads +import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import com.google.ads.interactivemedia.v3.api.AdsLoader +import com.google.ads.interactivemedia.v3.api.AdsRequest + class AdsLoaderProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiAdsLoader(pigeonRegistrar) {} + PigeonApiAdsLoader(pigeonRegistrar) { + override fun addAdErrorListener( + pigeon_instance: AdsLoader, + listener: AdErrorEvent.AdErrorListener + ) { + pigeon_instance.addAdErrorListener(listener) + } + + override fun addAdsLoadedListener( + pigeon_instance: AdsLoader, + listener: AdsLoader.AdsLoadedListener + ) { + pigeon_instance.addAdsLoadedListener(listener) + } + + override fun requestAds(pigeon_instance: AdsLoader, request: AdsRequest) { + pigeon_instance.requestAds(request) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt new file mode 100644 index 00000000000..396d91725ca --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt @@ -0,0 +1,11 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdsManager +import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent + +class AdsManagerLoadedEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiAdsManagerLoadedEvent(pigeonRegistrar) { + override fun manager(pigeon_instance: AdsManagerLoadedEvent): AdsManager { + return pigeon_instance.adsManager + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt index 620a4b43d89..ad5a5a99f7c 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt @@ -4,5 +4,19 @@ package dev.flutter.packages.interactive_media_ads +import com.google.ads.interactivemedia.v3.api.AdsManager + class AdsManagerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiAdsManager(pigeonRegistrar) {} + PigeonApiAdsManager(pigeonRegistrar) { + override fun discardAdBreak(pigeon_instance: AdsManager) { + pigeon_instance.discardAdBreak() + } + + override fun pause(pigeon_instance: AdsManager) { + pigeon_instance.pause() + } + + override fun start(pigeon_instance: AdsManager) { + pigeon_instance.start() + } +} 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 6d2991c1e6c..ae8891957f0 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 @@ -4,5 +4,19 @@ package dev.flutter.packages.interactive_media_ads +import com.google.ads.interactivemedia.v3.api.AdsRequest +import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider + class AdsRequestProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiAdsRequest(pigeonRegistrar) {} + PigeonApiAdsRequest(pigeonRegistrar) { + override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { + pigeon_instance.adTagUrl = adTagUrl + } + + override fun setContentProgressProvider( + pigeon_instance: AdsRequest, + provider: ContentProgressProvider + ) { + pigeon_instance.contentProgressProvider = provider + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt new file mode 100644 index 00000000000..e7ae90232d9 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt @@ -0,0 +1,30 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import com.google.ads.interactivemedia.v3.api.AdEvent +import com.google.ads.interactivemedia.v3.api.BaseManager + +class BaseManagerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiBaseManager(pigeonRegistrar) { + override fun addAdErrorListener( + pigeon_instance: BaseManager, + errorListener: AdErrorEvent.AdErrorListener + ) { + pigeon_instance.addAdErrorListener(errorListener) + } + + override fun addAdEventListener( + pigeon_instance: BaseManager, + adEventListener: AdEvent.AdEventListener + ) { + pigeon_instance.addAdEventListener(adEventListener) + } + + override fun destroy(pigeon_instance: BaseManager) { + pigeon_instance.destroy() + } + + override fun init(pigeon_instance: BaseManager) { + pigeon_instance.init() + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt new file mode 100644 index 00000000000..00f9e53e19b --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt @@ -0,0 +1,4 @@ +package dev.flutter.packages.interactive_media_ads + +class ContentProgressProviderProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiContentProgressProvider(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index bffc706706e..745a29814e9 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -17,33 +17,31 @@ private fun wrapResult(result: Any?): List { private fun wrapError(exception: Throwable): List { if (exception is FlutterError) { - return listOf( - exception.code, - exception.message, - exception.details - ) + return listOf(exception.code, exception.message, exception.details) } else { return listOf( - exception.javaClass.simpleName, - exception.toString(), - "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception) - ) + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) } } private fun createConnectionError(channelName: String): FlutterError { - return FlutterError("channel-error", "Unable to establish connection on channel: '$channelName'.", "")} + return FlutterError( + "channel-error", "Unable to establish connection on channel: '$channelName'.", "") +} /** * Error class for passing custom error details to Flutter via a thrown PlatformException. + * * @property code The error code. * @property message The error message. * @property details The error details. Must be a datatype supported by the api codec. */ -class FlutterError ( - val code: String, - override val message: String? = null, - val details: Any? = null +class FlutterError( + val code: String, + override val message: String? = null, + val details: Any? = null ) : Throwable() /** * Maintains instances used to communicate with the corresponding objects in Dart. @@ -57,12 +55,12 @@ class FlutterError ( * reference is removed with [remove] and the weak reference is deallocated, the * `finalizationListener` is made with the instance's identifier. However, if the strong reference * is removed and then the identifier is retrieved with the intention to pass the identifier to Dart - * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the - * instance is recreated. The strong reference will then need to be removed manually again. + * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the instance is + * recreated. The strong reference will then need to be removed manually again. */ @Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused") class PigeonInstanceManager(private val finalizationListener: PigeonFinalizationListener) { - /** Interface for listening when a weak reference of an instance is removed from the manager. */ + /** Interface for listening when a weak reference of an instance is removed from the manager. */ interface PigeonFinalizationListener { fun onFinalize(identifier: Long) } @@ -88,10 +86,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization } init { - handler.postDelayed( - { releaseAllFinalizedInstances() }, - clearFinalizedWeakReferencesInterval - ) + handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) } companion object { @@ -105,7 +100,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Instantiate a new manager. * - * * When the manager is no longer needed, [stopFinalizationListener] must be called. * * @param finalizationListener the listener for garbage collected weak references. @@ -123,8 +117,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier paired to an instance. * @param the expected return type. * @return the removed instance if the manager contains the given identifier, otherwise `null` if - * the manager doesn't contain the value. - */ + * the manager doesn't contain the value. + */ fun remove(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() return strongInstances.remove(identifier) as T? @@ -133,19 +127,17 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Retrieves the identifier paired with an instance. * - * * If the manager contains a strong reference to `instance`, it will return the identifier * associated with `instance`. If the manager contains only a weak reference to `instance`, a new * strong reference to `instance` will be added and will need to be removed again with [remove]. * - * * If this method returns a nonnull identifier, this method also expects the Dart * `PigeonInstanceManager` to have, or recreate, a weak reference to the Dart instance the * identifier is associated with. * * @param instance an instance that may be stored in the manager. * @return the identifier associated with `instance` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. + * `null` if the manager doesn't contain the value. */ fun getIdentifierForStrongReference(instance: Any?): Long? { logWarningIfFinalizationListenerHasStopped() @@ -159,14 +151,13 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Adds a new instance that was instantiated from Dart. * - * - * The same instance can be added multiple times, but each identifier must be unique. This - * allows two objects that are equivalent (e.g. the `equals` method returns true and their - * hashcodes are equal) to both be added. + * The same instance can be added multiple times, but each identifier must be unique. This allows + * two objects that are equivalent (e.g. the `equals` method returns true and their hashcodes are + * equal) to both be added. * * @param instance the instance to be stored. * @param identifier the identifier to be paired with instance. This value must be >= 0 and - * unique. + * unique. */ fun addDartCreatedInstance(instance: Any, identifier: Long) { logWarningIfFinalizationListenerHasStopped() @@ -181,7 +172,9 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization */ fun addHostCreatedInstance(instance: Any): Long { logWarningIfFinalizationListenerHasStopped() - require(!containsInstance(instance)) { "Instance of ${instance.javaClass} has already been added." } + require(!containsInstance(instance)) { + "Instance of ${instance.javaClass} has already been added." + } val identifier = nextIdentifier++ addInstance(instance, identifier) return identifier @@ -193,8 +186,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier associated with an instance. * @param the expected return type. * @return the instance associated with `identifier` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. - */ + * `null` if the manager doesn't contain the value. + */ fun getInstance(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() val instance = weakInstances[identifier] as java.lang.ref.WeakReference? @@ -216,7 +209,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Stop the periodic run of the [PigeonFinalizationListener] for instances that have been garbage * collected. * - * * The InstanceManager can continue to be used, but the [PigeonFinalizationListener] will no * longer be called and methods will log a warning. */ @@ -228,7 +220,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Removes all of the instances from this manager. * - * * The manager will be empty after this call returns. */ fun clear() { @@ -242,7 +233,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Whether the [PigeonFinalizationListener] is still being called for instances that are garbage * collected. * - * * See [stopFinalizationListener]. */ fun hasFinalizationListenerStopped(): Boolean { @@ -254,7 +244,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization return } var reference: java.lang.ref.WeakReference? - while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != null) { + while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != + null) { val identifier = weakReferencesToIdentifiers.remove(reference) if (identifier != null) { weakInstances.remove(identifier) @@ -262,10 +253,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization finalizationListener.onFinalize(identifier) } } - handler.postDelayed( - { releaseAllFinalizedInstances() }, - clearFinalizedWeakReferencesInterval - ) + handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) } private fun addInstance(instance: Any, identifier: Long) { @@ -283,55 +271,63 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization private fun logWarningIfFinalizationListenerHasStopped() { if (hasFinalizationListenerStopped()) { Log.w( - tag, - "The manager was used after calls to the PigeonFinalizationListener has been stopped." - ) + tag, + "The manager was used after calls to the PigeonFinalizationListener has been stopped.") } } } -/** -* Generated API for managing the Dart and native `PigeonInstanceManager`s. -*/ +/** Generated API for managing the Dart and native `PigeonInstanceManager`s. */ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { companion object { /** The codec used by PigeonInstanceManagerApi. */ - private val codec: MessageCodec by lazy { - StandardMessageCodec() - } + private val codec: MessageCodec by lazy { StandardMessageCodec() } /** - * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the - * `binaryMessenger`. - */ - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, instanceManager: PigeonInstanceManager?) { + * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the + * `binaryMessenger`. + */ + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + instanceManager: PigeonInstanceManager? + ) { run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", + codec) if (instanceManager != null) { channel.setMessageHandler { message, reply -> val identifier = message as Number - val wrapped: List = try { - instanceManager.remove(identifier.toLong()) - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = + try { + instanceManager.remove(identifier.toLong()) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { channel.setMessageHandler(null) - } + } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", + codec) if (instanceManager != null) { channel.setMessageHandler { _, reply -> - val wrapped: List = try { - instanceManager.clear() - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = + try { + instanceManager.clear() + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -342,7 +338,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { - val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(identifier) { if (it is List<*>) { @@ -359,8 +356,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } /** - * Provides implementations for each ProxyApi implementation and provides access to resources - * needed by any implementation. + * Provides implementations for each ProxyApi implementation and provides access to resources needed + * by any implementation. */ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val instanceManager: PigeonInstanceManager @@ -368,7 +365,7 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val codec: StandardMessageCodec get() { if (_codec == null) { - _codec = PigeonProxyApiBaseCodec(this) + _codec = PigeonProxyApiBaseCodec(this) } return _codec!! } @@ -376,19 +373,18 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { init { val api = PigeonInstanceManagerApi(binaryMessenger) instanceManager = - PigeonInstanceManager.create( - object : PigeonInstanceManager.PigeonFinalizationListener { - override fun onFinalize(identifier: Long) { - api.removeStrongReference(identifier) { - if (it.isFailure) { - Log.e( - "PigeonProxyApiRegistrar", - "Failed to remove Dart strong reference with identifier: $identifier" - ) + PigeonInstanceManager.create( + object : PigeonInstanceManager.PigeonFinalizationListener { + override fun onFinalize(identifier: Long) { + api.removeStrongReference(identifier) { + if (it.isFailure) { + Log.e( + "PigeonProxyApiRegistrar", + "Failed to remove Dart strong reference with identifier: $identifier") + } + } } - } - } - }) + }) } /** @@ -404,29 +400,89 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer /** - * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of - * `AdsLoader` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of `AdsLoader` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdsLoader(): PigeonApiAdsLoader /** - * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of - * `AdsRequest` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsManagerLoadedEvent] used to add a new Dart instance of + * `AdsManagerLoadedEvent` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdsManagerLoadedEvent(): PigeonApiAdsManagerLoadedEvent + + /** + * An implementation of [PigeonApiAdsLoadedListener] used to add a new Dart instance of + * `AdsLoadedListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdsLoadedListener(): PigeonApiAdsLoadedListener + + /** + * An implementation of [PigeonApiAdErrorListener] used to add a new Dart instance of + * `AdErrorListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdErrorListener(): PigeonApiAdErrorListener + + /** + * An implementation of [PigeonApiAdErrorEvent] used to add a new Dart instance of `AdErrorEvent` + * to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdErrorEvent(): PigeonApiAdErrorEvent + + /** + * An implementation of [PigeonApiAdError] used to add a new Dart instance of `AdError` to the + * Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdError(): PigeonApiAdError + + /** + * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of `AdsRequest` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsRequest(): PigeonApiAdsRequest /** - * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of - * `AdsManager` to the Dart `InstanceManager`. + * An implementation of [PigeonApiContentProgressProvider] used to add a new Dart instance of + * `ContentProgressProvider` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider + + /** + * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsManager(): PigeonApiAdsManager + /** + * An implementation of [PigeonApiBaseManager] used to add a new Dart instance of `BaseManager` to + * the Dart `InstanceManager`. + */ + abstract fun getPigeonApiBaseManager(): PigeonApiBaseManager + + /** + * An implementation of [PigeonApiAdEventListener] used to add a new Dart instance of + * `AdEventListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdEventListener(): PigeonApiAdEventListener + + /** + * An implementation of [PigeonApiAdEvent] used to add a new Dart instance of `AdEvent` to the + * Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdEvent(): PigeonApiAdEvent + /** * An implementation of [PigeonApiImaSdkFactory] used to add a new Dart instance of * `ImaSdkFactory` to the Dart `InstanceManager`. */ abstract fun getPigeonApiImaSdkFactory(): PigeonApiImaSdkFactory + /** + * An implementation of [PigeonApiImaSdkSettings] used to add a new Dart instance of + * `ImaSdkSettings` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings + /** * An implementation of [PigeonApiVideoAdPlayer] used to add a new Dart instance of * `VideoAdPlayer` to the Dart `InstanceManager`. @@ -446,60 +502,78 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback /** - * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of - * `AdMediaInfo` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of `AdMediaInfo` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdMediaInfo(): PigeonApiAdMediaInfo /** - * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of - * `AdPodInfo` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of `AdPodInfo` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdPodInfo(): PigeonApiAdPodInfo /** - * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of - * `FrameLayout` to the Dart `InstanceManager`. + * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of `FrameLayout` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiFrameLayout(): PigeonApiFrameLayout /** - * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of - * `ViewGroup` to the Dart `InstanceManager`. + * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of `ViewGroup` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiViewGroup(): PigeonApiViewGroup /** - * An implementation of [PigeonApiVideoView] used to add a new Dart instance of - * `VideoView` to the Dart `InstanceManager`. + * An implementation of [PigeonApiVideoView] used to add a new Dart instance of `VideoView` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiVideoView(): PigeonApiVideoView /** - * An implementation of [PigeonApiView] used to add a new Dart instance of - * `View` to the Dart `InstanceManager`. + * An implementation of [PigeonApiView] used to add a new Dart instance of `View` to the Dart + * `InstanceManager`. */ abstract fun getPigeonApiView(): PigeonApiView /** - * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of - * `MediaPlayer` to the Dart `InstanceManager`. + * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of `MediaPlayer` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiMediaPlayer(): PigeonApiMediaPlayer fun setUp() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, instanceManager) + PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsLoader()) + PigeonApiAdsLoadedListener.setUpMessageHandlers( + binaryMessenger, getPigeonApiAdsLoadedListener()) + PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdErrorListener()) + PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsRequest()) + PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsManager()) + PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, getPigeonApiBaseManager()) + PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdEventListener()) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory()) PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayer()) - PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoProgressUpdate()) - PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayerCallback()) + PigeonApiVideoProgressUpdate.setUpMessageHandlers( + binaryMessenger, getPigeonApiVideoProgressUpdate()) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers( + binaryMessenger, getPigeonApiVideoAdPlayerCallback()) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, getPigeonApiFrameLayout()) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, getPigeonApiViewGroup()) PigeonApiVideoView.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoView()) PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiMediaPlayer()) } + fun tearDown() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdsLoadedListener.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, null) + PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, null) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, null) PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, null) PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, null) @@ -510,7 +584,9 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, null) } } -private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : StandardMessageCodec() { + +private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : + StandardMessageCodec() { override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { @@ -523,52 +599,58 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { if (value is com.google.ads.interactivemedia.v3.api.AdDisplayContainer) { - registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { - registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { - registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { - registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { - registrar.getPigeonApiAdsManager().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { - registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { - registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { - registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { - registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { - registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { - registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) { } - } - else if (value is android.widget.FrameLayout) { - registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) { } - } - else if (value is android.view.ViewGroup) { - registrar.getPigeonApiViewGroup().pigeon_newInstance(value) { } - } - else if (value is android.widget.VideoView) { - registrar.getPigeonApiVideoView().pigeon_newInstance(value) { } - } - else if (value is android.view.View) { - registrar.getPigeonApiView().pigeon_newInstance(value) { } - } - else if (value is android.media.MediaPlayer) { - registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) { } + registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { + registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { + registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent) { + registrar.getPigeonApiAdsManagerLoadedEvent().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) { + registrar.getPigeonApiAdsLoadedListener().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) { + registrar.getPigeonApiAdErrorListener().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent) { + registrar.getPigeonApiAdErrorEvent().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdError) { + registrar.getPigeonApiAdError().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { + registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) { + registrar.getPigeonApiContentProgressProvider().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { + registrar.getPigeonApiAdsManager().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.BaseManager) { + registrar.getPigeonApiBaseManager().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) { + registrar.getPigeonApiAdEventListener().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdEvent) { + registrar.getPigeonApiAdEvent().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { + registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkSettings) { + registrar.getPigeonApiImaSdkSettings().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { + registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { + registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) {} + } else if (value + is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { + registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { + registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { + registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) {} + } else if (value is android.widget.FrameLayout) { + registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) {} + } else if (value is android.view.ViewGroup) { + registrar.getPigeonApiViewGroup().pigeon_newInstance(value) {} + } else if (value is android.widget.VideoView) { + registrar.getPigeonApiVideoView().pigeon_newInstance(value) {} + } else if (value is android.view.View) { + registrar.getPigeonApiView().pigeon_newInstance(value) {} + } else if (value is android.media.MediaPlayer) { + registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) {} } when { @@ -580,25 +662,102 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : } } } + +/** + * The types of error that can be encountered. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. + */ +enum class AdErrorCode(val raw: Int) { + /** Ads player was not provided. */ + ADS_PLAYER_WAS_NOT_PROVIDED(0), + /** An unexpected error occurred and the cause is not known. */ + UNKNOWN_ERROR(1); + + companion object { + fun ofRaw(raw: Int): AdErrorCode? { + return values().firstOrNull { it.raw == raw } + } + } +} + +/** + * Specifies when the error was encountered, during either ad loading or playback. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. + */ +enum class AdErrorType(val raw: Int) { + /** Indicates that the error was encountered when the ad was being loaded. */ + LOAD(0), + /** Indicates that the error was encountered after the ad loaded, during ad play. */ + PLAY(1), + /** The error is not recognized by this wrapper. */ + UNKNOWN(2); + + companion object { + fun ofRaw(raw: Int): AdErrorType? { + return values().firstOrNull { it.raw == raw } + } + } +} + +/** + * Types of events that can occur during ad playback. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. + */ +enum class AdEventType(val raw: Int) { + /** Fired when an ad break is ready from VMAP or ad rule ads. */ + AD_BREAK_READY(0), + /** + * Fired when the ads manager is done playing all the valid ads in the ads response, or when the + * response doesn't return any valid ads. + */ + ALL_ADS_COMPLETED(1), + /** Fired when an ad completes playing. */ + COMPLETED(2), + /** Fired when content should be paused. */ + CONTENT_PAUSE_REQUESTED(3), + /** Fired when content should be resumed. */ + CONTENT_RESUME_REQUESTED(4), + /** Fired when the VAST response has been received. */ + LOADED(5), + /** The event type is not recognized by this wrapper. */ + UNKNOWN(6); + + companion object { + fun ofRaw(raw: Int): AdEventType? { + return values().firstOrNull { it.raw == raw } + } + } +} /** * A base class for more specialized container interfaces. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -609,30 +768,756 @@ abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApi } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * A container in which to display the ads. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } + + @Suppress("FunctionName") + /** An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ + fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { + return pigeonRegistrar.getPigeonApiBaseDisplayContainer() + } +} +/** + * An object which allows publishers to request ads from ad servers or a dynamic ad insertion + * stream. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Registers a listener for errors that occur during the ads request. */ + abstract fun addAdErrorListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, + listener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + ) + + /** Registers a listener for the ads manager loaded event. */ + abstract fun addAdsLoadedListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, + listener: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + ) + + /** Requests ads from a server. */ + abstract fun requestAds( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, + request: com.google.ads.interactivemedia.v3.api.AdsRequest + ) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoader?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdErrorListener", + 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.AdsLoader + val listenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + var wrapped: List + try { + api.addAdErrorListener(pigeon_instanceArg, listenerArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdsLoadedListener", + 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.AdsLoader + val listenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + var wrapped: List + try { + api.addAdsLoadedListener(pigeon_instanceArg, listenerArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoader.requestAds", + 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.AdsLoader + val requestArg = args[1] as com.google.ads.interactivemedia.v3.api.AdsRequest + var wrapped: List + try { + api.requestAds(pigeon_instanceArg, requestArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } +} +/** + * An event raised when ads are successfully loaded from the ad server through an AdsLoader. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** + * The ads manager that will control playback of the loaded ads, or null when using dynamic ad + * insertion. + */ + abstract fun manager( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent + ): com.google.ads.interactivemedia.v3.api.AdsManager + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdsManagerLoadedEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val managerArg = manager(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg, managerArg)) { + 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))) + } + } + } +} +/** + * Listener interface for notification of ad load or stream load completion. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoadedListener?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdsLoadedListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of AdsLoadedListener, but the class has a nonnull callback method.") + } + + /** Called once the AdsManager or StreamManager has been loaded. */ + fun onAdsManagerLoaded( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, + eventArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, eventArg)) { + 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))) + } + } + } +} +/** + * Interface for classes that will listen to AdErrorEvents. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdErrorListener?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdErrorListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of AdErrorListener, but the class has a nonnull callback method.") + } + + /** Called when an error occurs. */ + fun onAdError( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, + eventArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, eventArg)) { + 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))) + } + } + } +} +/** + * An event raised when there is an error loading or playing ads. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** The AdError that caused this event. */ + abstract fun error( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdErrorEvent + ): com.google.ads.interactivemedia.v3.api.AdError + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdErrorEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val errorArg = error(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg, errorArg)) { + 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))) + } + } + } +} +/** + * An error that occurred in the SDK. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** The error's code. */ + abstract fun errorCode( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError + ): AdErrorCode + + /** The error code's number. */ + abstract fun errorCodeNumber( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError + ): Long + + /** The error's type. */ + abstract fun errorType( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError + ): AdErrorType + + /** A human-readable summary of the error. */ + abstract fun message(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): String + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdError and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdError, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val errorCodeArg = errorCode(pigeon_instanceArg) + val errorCodeNumberArg = errorCodeNumber(pigeon_instanceArg) + val errorTypeArg = errorType(pigeon_instanceArg) + val messageArg = message(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send( + listOf( + pigeon_identifierArg, + errorCodeArg.raw, + errorCodeNumberArg, + errorTypeArg.raw, + messageArg)) { + 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))) + } + } + } +} +/** + * 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. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Sets the URL from which ads will be requested. */ + abstract fun setAdTagUrl( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + adTagUrl: String + ) + + /** + * Attaches a ContentProgressProvider instance to allow scheduling ad breaks based on content + * progress (cue points). + */ + abstract fun setContentProgressProvider( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + provider: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider + ) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsRequest?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdTagUrl", + 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 adTagUrlArg = args[1] as String + var wrapped: List + try { + api.setAdTagUrl(pigeon_instanceArg, adTagUrlArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentProgressProvider", + 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 providerArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider + var wrapped: List + try { + api.setContentProgressProvider(pigeon_instanceArg, providerArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } +} +/** + * Defines an interface to allow SDK to track progress of the content video. + * + * See + * https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } + } + } +} +/** + * An object which handles playing ads after they've been received from the server. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Discards current ad break and resumes content. */ + abstract fun discardAdBreak(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManager) + + /** Pauses the current ad. */ + abstract fun pause(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManager) + + /** Starts playing the ads. */ + abstract fun start(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManager) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsManager?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsManager.discardAdBreak", + 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.AdsManager + var wrapped: List + try { + api.discardAdBreak(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.pause", 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.AdsManager + var wrapped: List + try { + api.pause(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.start", 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.AdsManager + var wrapped: List + try { + api.start(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -643,38 +1528,162 @@ abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRe } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ - fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer - { - return pigeonRegistrar.getPigeonApiBaseDisplayContainer() + /** An implementation of [PigeonApiBaseManager] used to access callback methods */ + fun pigeon_getPigeonApiBaseManager(): PigeonApiBaseManager { + return pigeonRegistrar.getPigeonApiBaseManager() } - } /** - * An object which allows publishers to request ads from ad servers or a - * dynamic ad insertion stream. + * Base interface for managing ads.. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** + * Registers a listener for errors that occur during the ad or stream initialization and playback. + */ + abstract fun addAdErrorListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, + errorListener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + ) + + /** + * Registers a listener for ad events that occur during ad or stream initialization and playback. + */ + abstract fun addAdEventListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, + adEventListener: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + ) + + /** Stops the ad and all tracking, then releases all assets that were loaded to play the ad. */ + abstract fun destroy(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager) + + /** Initializes the ad experience using default rendering settings */ + abstract fun init(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiBaseManager?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdErrorListener", + 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.BaseManager + val errorListenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + var wrapped: List + try { + api.addAdErrorListener(pigeon_instanceArg, errorListenerArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdEventListener", + 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.BaseManager + val adEventListenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + var wrapped: List + try { + api.addAdEventListener(pigeon_instanceArg, adEventListenerArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.BaseManager.destroy", + 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.BaseManager + var wrapped: List + try { + api.destroy(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.init", 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.BaseManager + var wrapped: List + try { + api.init(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of BaseManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseManager, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseManager.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -685,32 +1694,77 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * An object containing the data used to request ads from the server. + * Listener interface for ad events. * - * 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/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdEventListener?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdEventListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + throw IllegalStateException( + "Attempting to create a new Dart instance of AdEventListener, but the class has a nonnull callback method.") + } + + /** Respond to an occurrence of an AdEvent. */ + fun onAdEvent( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, + eventArg: com.google.ads.interactivemedia.v3.api.AdEvent, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { + channel.send(listOf(pigeon_instanceArg, eventArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -719,33 +1773,39 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * An object which handles playing ads after they've been received from the - * server. + * Event to notify publisher that an event occurred with an Ad. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** The type of event that occurred. */ + abstract fun type(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdEvent): AdEventType + @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val typeArg = type(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { + channel.send(listOf(pigeon_identifierArg, typeArg.raw)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -754,26 +1814,76 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * Factory class for creating SDK objects. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun createAdDisplayContainer(container: android.view.ViewGroup, player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer): com.google.ads.interactivemedia.v3.api.AdDisplayContainer + abstract fun instance(): com.google.ads.interactivemedia.v3.api.ImaSdkFactory + + abstract fun createAdDisplayContainer( + container: android.view.ViewGroup, + player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + ): com.google.ads.interactivemedia.v3.api.AdDisplayContainer + + /** Creates an `ImaSdkSettings` object for configuring the IMA SDK. */ + abstract fun createImaSdkSettings( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory + ): com.google.ads.interactivemedia.v3.api.ImaSdkSettings + + /** Creates an `AdsLoader` for requesting ads using the specified settings object. */ + abstract fun createAdsLoader( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, + settings: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + container: com.google.ads.interactivemedia.v3.api.AdDisplayContainer + ): com.google.ads.interactivemedia.v3.api.AdsLoader + + /** Creates an AdsRequest object to contain the data used to request ads. */ + abstract fun createAdsRequest( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory + ): com.google.ads.interactivemedia.v3.api.AdsRequest companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.instance", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.instance(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -791,18 +1901,90 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr channel.setMessageHandler(null) } } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createImaSdkSettings", + 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.ImaSdkFactory + var wrapped: List + try { + wrapped = listOf(api.createImaSdkSettings(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsLoader", + 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.ImaSdkFactory + val settingsArg = args[1] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings + val containerArg = args[2] as com.google.ads.interactivemedia.v3.api.AdDisplayContainer + var wrapped: List + try { + wrapped = + listOf(api.createAdsLoader(pigeon_instanceArg, settingsArg, containerArg)) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRequest", + 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.ImaSdkFactory + var wrapped: List + try { + wrapped = listOf(api.createAdsRequest(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } } } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.pigeon_newInstance" @@ -816,43 +1998,89 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } + } + } +} +/** + * Defines general SDK settings that are used when creating an `AdsLoader`. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) + } } } - } /** - * Defines the set of methods that a video player must implement to be used by - * the IMA SDK, as well as a set of callbacks that it must fire. + * Defines the set of methods that a video player must implement to be used by the IMA SDK, as well + * as a set of callbacks that it must fire. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer /** The volume of the player as a percentage from 0 to 100. */ - abstract fun setVolume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, value: Long) + abstract fun setVolume( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + value: Long + ) - /** - * The `VideoProgressUpdate` describing playback progress of the current - * video. - */ - abstract fun setAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) + /** The `VideoProgressUpdate` describing playback progress of the current video. */ + abstract fun setAdProgress( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + ) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -864,11 +2092,16 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", + 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.player.VideoAdPlayer + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { @@ -884,12 +2117,18 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", + 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.player.VideoAdPlayer - val progressArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + val progressArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { api.setAdProgress(pigeon_instanceArg, progressArg) @@ -907,19 +2146,26 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException("Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") + throw IllegalStateException( + "Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") } /** Adds a callback. */ - fun addCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) -{ + fun addCallback( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callbackArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback" @@ -933,13 +2179,17 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Loads a video ad hosted at AdMediaInfo. */ - fun loadAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) -{ + fun loadAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd" @@ -953,13 +2203,16 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Pauses playing the current ad. */ - fun pauseAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ + fun pauseAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd" @@ -973,16 +2226,19 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** - * Starts or resumes playing the video ad referenced by the AdMediaInfo, - * provided loadAd has already been called for it. + * Starts or resumes playing the video ad referenced by the AdMediaInfo, provided loadAd has + * already been called for it. */ - fun playAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ + fun playAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd" @@ -996,13 +2252,15 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Cleans up and releases all resources used by the `VideoAdPlayer`. */ - fun release(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) -{ + fun release( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release" @@ -1016,13 +2274,17 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Removes a callback. */ - fun removeCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) -{ + fun removeCallback( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callbackArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback" @@ -1036,13 +2298,16 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Stops playing the current ad. */ - fun stopAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ + fun stopAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd" @@ -1056,32 +2321,37 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * Defines an update to the video's progress. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(currentTimeMs: Long, durationMs: Long): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + abstract fun pigeon_defaultConstructor( + currentTimeMs: Long, + durationMs: Long + ): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - /** - * Value to use for cases when progress is not yet defined, such as video - * initialization. - */ - abstract fun videoTimeNotReady(): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + /** Value to use for cases when progress is not yet defined, such as video initialization. */ + abstract fun videoTimeNotReady(): + com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1090,7 +2360,9 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(currentTimeMsArg,durationMsArg), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), + pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1102,14 +2374,19 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.videoTimeNotReady(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.videoTimeNotReady(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1124,17 +2401,21 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -1145,60 +2426,113 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * Callbacks that the player must fire. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Fire this callback periodically as ad playback occurs. */ - abstract fun onAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) + abstract fun onAdProgress( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + ) /** Fire this callback when video playback stalls waiting for data. */ - abstract fun onBuffering(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onBuffering( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when all content has finished playing. */ - abstract fun onContentComplete(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) + abstract fun onContentComplete( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + ) /** Fire this callback when the video finishes playing. */ - abstract fun onEnded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onEnded( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when the video has encountered an error. */ - abstract fun onError(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onError( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when the video is ready to begin playback. */ - abstract fun onLoaded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onLoaded( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when the video is paused. */ - abstract fun onPause(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onPause( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when the player begins playing a video. */ - abstract fun onPlay(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onPlay( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when the video is unpaused. */ - abstract fun onResume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + abstract fun onResume( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) /** Fire this callback when the playback volume changes. */ - abstract fun onVolumeChanged(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, percentage: Long) + abstract fun onVolumeChanged( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + percentage: Long + ) companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayerCallback?) { + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + api: PigeonApiVideoAdPlayerCallback? + ) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val videoProgressUpdateArg = args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val videoProgressUpdateArg = + args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) @@ -1213,12 +2547,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onBuffering(pigeon_instanceArg, adMediaInfoArg) @@ -1233,11 +2575,18 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback var wrapped: List try { api.onContentComplete(pigeon_instanceArg) @@ -1252,12 +2601,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onEnded(pigeon_instanceArg, adMediaInfoArg) @@ -1272,12 +2629,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onError(pigeon_instanceArg, adMediaInfoArg) @@ -1292,12 +2657,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onLoaded(pigeon_instanceArg, adMediaInfoArg) @@ -1312,12 +2685,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onPause(pigeon_instanceArg, adMediaInfoArg) @@ -1332,12 +2713,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onPlay(pigeon_instanceArg, adMediaInfoArg) @@ -1352,12 +2741,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onResume(pigeon_instanceArg, adMediaInfoArg) @@ -1372,12 +2769,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { @@ -1396,17 +2801,22 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -1417,29 +2827,34 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * The minimal information required to play an ad. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun url(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo): String + abstract fun url( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ): String @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val urlArg = url(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -1454,23 +2869,23 @@ abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * An ad may be part of a pod of ads. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** * The position of the ad within the pod. * - * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the - * ad is not part of a pod, this will return 1. + * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the ad is not part of a + * pod, this will return 1. */ abstract fun adPosition(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long @@ -1479,7 +2894,9 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) * * For unknown duration, -1 is returned. */ - abstract fun maxDuration(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double + abstract fun maxDuration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo + ): Double /** Client side and DAI VOD: Returns the index of the ad pod. */ abstract fun podIndex(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long @@ -1487,9 +2904,9 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) /** * The content time offset at which the current ad pod was scheduled. * - * For preroll pod, 0 is returned. For midrolls, the scheduled time is - * returned in seconds. For postroll, -1 is returned. Defaults to 0 if this - * ad is not part of a pod, or the pod is not part of an ad playlist. + * For preroll pod, 0 is returned. For midrolls, the scheduled time is returned in seconds. For + * postroll, -1 is returned. Defaults to 0 if this ad is not part of a pod, or the pod is not part + * of an ad playlist. */ abstract fun timeOffset(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double @@ -1500,14 +2917,17 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) abstract fun isBumper(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Boolean @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val adPositionArg = adPosition(pigeon_instanceArg) val maxDurationArg = maxDuration(pigeon_instanceArg) val podIndexArg = podIndex(pigeon_instanceArg) @@ -1518,23 +2938,30 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg, adPositionArg, maxDurationArg, podIndexArg, timeOffsetArg, totalAdsArg, isBumperArg)) { - 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)) + channel.send( + listOf( + pigeon_identifierArg, + adPositionArg, + maxDurationArg, + podIndexArg, + timeOffsetArg, + totalAdsArg, + isBumperArg)) { + 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))) + } } - } else { - callback(Result.failure(createConnectionError(channelName))) - } - } } - } /** - * FrameLayout is designed to block out an area on the screen to display a - * single item. + * FrameLayout is designed to block out an area on the screen to display a single item. * * See https://developer.android.com/reference/android/widget/FrameLayout. */ @@ -1547,14 +2974,19 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1569,14 +3001,17 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.widget.FrameLayout, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.widget.FrameLayout, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance" @@ -1590,17 +3025,15 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiViewGroup] used to access callback methods */ - fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup - { + /** An implementation of [PigeonApiViewGroup] used to access callback methods */ + fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup { return pigeonRegistrar.getPigeonApiViewGroup() } - } /** * A special view that can contain other views (called children.) @@ -1616,7 +3049,11 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1639,14 +3076,17 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.view.ViewGroup, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.view.ViewGroup, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance" @@ -1660,17 +3100,15 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView - { + /** An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView { return pigeonRegistrar.getPigeonApiView() } - } /** * Displays a video file. @@ -1696,14 +3134,19 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoView?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1715,7 +3158,11 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1735,7 +3182,11 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1756,19 +3207,25 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.widget.VideoView, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.widget.VideoView, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException("Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") + throw IllegalStateException( + "Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") } /** Callback to be invoked when the media source is ready for playback. */ - fun onPrepared(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) -{ + fun onPrepared( + pigeon_instanceArg: android.widget.VideoView, + playerArg: android.media.MediaPlayer, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared" @@ -1782,13 +3239,16 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Callback to be invoked when playback of a media source has completed. */ - fun onCompletion(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) -{ + fun onCompletion( + pigeon_instanceArg: android.widget.VideoView, + playerArg: android.media.MediaPlayer, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion" @@ -1802,16 +3262,18 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - /** - * Callback to be invoked when there has been an error during an asynchronous - * operation. - */ - fun onError(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, whatArg: Long, extraArg: Long, callback: (Result) -> Unit) -{ + /** Callback to be invoked when there has been an error during an asynchronous operation. */ + fun onError( + pigeon_instanceArg: android.widget.VideoView, + playerArg: android.media.MediaPlayer, + whatArg: Long, + extraArg: Long, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onError" @@ -1825,17 +3287,15 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView - { + /** An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView { return pigeonRegistrar.getPigeonApiView() } - } /** * This class represents the basic building block for user interface components. @@ -1845,14 +3305,14 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) @Suppress("UNCHECKED_CAST") abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance" @@ -1866,14 +3326,12 @@ abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * MediaPlayer class can be used to control playback of audio/video files and - * streams. + * MediaPlayer class can be used to control playback of audio/video files and streams. * * See https://developer.android.com/reference/android/media/MediaPlayer. */ @@ -1899,7 +3357,11 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1917,7 +3379,11 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1937,7 +3403,11 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1956,7 +3426,11 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1975,7 +3449,9 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", codec) + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1997,14 +3473,17 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.media.MediaPlayer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.media.MediaPlayer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance" @@ -2018,8 +3497,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt index d3a1a9f84fd..8c19a8df3b8 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt @@ -2,15 +2,39 @@ package dev.flutter.packages.interactive_media_ads import android.view.ViewGroup import com.google.ads.interactivemedia.v3.api.AdDisplayContainer +import com.google.ads.interactivemedia.v3.api.AdsLoader +import com.google.ads.interactivemedia.v3.api.AdsRequest import com.google.ads.interactivemedia.v3.api.ImaSdkFactory +import com.google.ads.interactivemedia.v3.api.ImaSdkSettings import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer class ImaSdkFactoryProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiImaSdkFactory(pigeonRegistrar) { + override fun instance(): ImaSdkFactory { + return ImaSdkFactory.getInstance() + } + override fun createAdDisplayContainer( container: ViewGroup, player: VideoAdPlayer ): AdDisplayContainer { return ImaSdkFactory.createAdDisplayContainer(container, player) } + + override fun createImaSdkSettings(pigeon_instance: ImaSdkFactory): ImaSdkSettings { + return pigeon_instance.createImaSdkSettings() + } + + override fun createAdsLoader( + pigeon_instance: ImaSdkFactory, + settings: ImaSdkSettings, + container: AdDisplayContainer + ): AdsLoader { + return pigeon_instance.createAdsLoader( + (pigeonRegistrar as ProxyApiRegistrar).context, settings, container) + } + + override fun createAdsRequest(pigeon_instance: ImaSdkFactory): AdsRequest { + return pigeon_instance.createAdsRequest() + } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt new file mode 100644 index 00000000000..edb815b95f4 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt @@ -0,0 +1,4 @@ +package dev.flutter.packages.interactive_media_ads + +class ImaSdkSettingsProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiImaSdkSettings(pigeonRegistrar) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt index 7e2ee36eb01..738affeae04 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt @@ -2,9 +2,8 @@ package dev.flutter.packages.interactive_media_ads import android.media.MediaPlayer -class MediaPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiMediaPlayer( - pigeonRegistrar -) { +class MediaPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : + PigeonApiMediaPlayer(pigeonRegistrar) { override fun getDuration(pigeon_instance: MediaPlayer): Long { return pigeon_instance.duration.toLong() } @@ -24,4 +23,4 @@ class MediaPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiM override fun stop(pigeon_instance: MediaPlayer) { pigeon_instance.stop() } -} \ No newline at end of file +} 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 ea0554aa293..ad138eda865 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 @@ -21,18 +21,58 @@ class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) return AdsLoaderProxyApi(this) } + override fun getPigeonApiAdsManagerLoadedEvent(): PigeonApiAdsManagerLoadedEvent { + return AdsManagerLoadedEventProxyApi(this) + } + + override fun getPigeonApiAdsLoadedListener(): PigeonApiAdsLoadedListener { + return AdsLoadedListenerProxyApi(this) + } + + override fun getPigeonApiAdErrorListener(): PigeonApiAdErrorListener { + return AdErrorListenerProxyApi(this) + } + + override fun getPigeonApiAdErrorEvent(): PigeonApiAdErrorEvent { + return AdErrorEventProxyApi(this) + } + + override fun getPigeonApiAdError(): PigeonApiAdError { + return AdErrorProxyApi(this) + } + override fun getPigeonApiAdsRequest(): PigeonApiAdsRequest { return AdsRequestProxyApi(this) } + override fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider { + return ContentProgressProviderProxyApi(this) + } + override fun getPigeonApiAdsManager(): PigeonApiAdsManager { return AdsManagerProxyApi(this) } + override fun getPigeonApiBaseManager(): PigeonApiBaseManager { + return BaseManagerProxyApi(this) + } + + override fun getPigeonApiAdEventListener(): PigeonApiAdEventListener { + return AdEventListenerProxyApi(this) + } + + override fun getPigeonApiAdEvent(): PigeonApiAdEvent { + return AdEventProxyApi(this) + } + override fun getPigeonApiImaSdkFactory(): PigeonApiImaSdkFactory { return ImaSdkFactoryProxyApi(this) } + override fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings { + return ImaSdkSettingsProxyApi(this) + } + override fun getPigeonApiVideoAdPlayer(): PigeonApiVideoAdPlayer { return VideoAdPlayerProxyApi(this) } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index 7607a2c13cc..c0ff5b93605 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -11,8 +11,9 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : return VideoAdPlayerImpl(this) } - private class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi): VideoAdPlayer { - var volume: Int = 0; + private class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi) : VideoAdPlayer { + var volume: Int = 0 + var adProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY override fun getAdProgress(): VideoProgressUpdate { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index 777f16e835e..33ee5b47e6e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -7,26 +7,22 @@ import android.widget.VideoView class VideoViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiVideoView(pigeonRegistrar) { - override fun pigeon_defaultConstructor(): VideoView { - val instance = VideoView((pigeonRegistrar as ProxyApiRegistrar).context) - instance.setOnPreparedListener { player: MediaPlayer -> - onPrepared(instance, player) {} - } - instance.setOnErrorListener { player: MediaPlayer, what: Int, extra: Int -> - onError(instance, player, what.toLong(), extra.toLong()) {} - true - } - instance.setOnCompletionListener { player: MediaPlayer -> - onCompletion(instance, player) {} - } - return instance + override fun pigeon_defaultConstructor(): VideoView { + val instance = VideoView((pigeonRegistrar as ProxyApiRegistrar).context) + instance.setOnPreparedListener { player: MediaPlayer -> onPrepared(instance, player) {} } + instance.setOnErrorListener { player: MediaPlayer, what: Int, extra: Int -> + onError(instance, player, what.toLong(), extra.toLong()) {} + true } + instance.setOnCompletionListener { player: MediaPlayer -> onCompletion(instance, player) {} } + return instance + } - override fun setVideoUri(pigeon_instance: VideoView, uri: String) { - pigeon_instance.setVideoURI(Uri.parse(uri)) - } + override fun setVideoUri(pigeon_instance: VideoView, uri: String) { + pigeon_instance.setVideoURI(Uri.parse(uri)) + } - override fun getCurrentPosition(pigeon_instance: VideoView): Long { - return pigeon_instance.currentPosition.toLong() - } + override fun getCurrentPosition(pigeon_instance: VideoView): Long { + return pigeon_instance.currentPosition.toLong() + } } diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 4f75d95f440..c36bc851516 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -20,7 +20,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { } final Set videoAdPlayerCallbacks = - {};g + {}; AdMediaInfo? loadedAdMediaInfo; int savedAdPosition = 0; 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 fb862480b5e..93d634c6911 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 @@ -8,7 +8,8 @@ import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' + show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -19,7 +20,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -28,6 +30,7 @@ List wrapResponse({Object? result, PlatformException? error, bool empty } return [error.code, error.message, error.details]; } + /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -113,7 +116,8 @@ class PigeonInstanceManager { final Expando _identifiers = Expando(); final Map> _weakInstances = >{}; - final Map _strongInstances = {}; + final Map _strongInstances = + {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -131,23 +135,59 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); - BaseDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsLoader.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - ImaSdkFactory.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoAdPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoProgressUpdate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoAdPlayerCallback.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdMediaInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdPodInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - FrameLayout.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - ViewGroup.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + _PigeonInstanceManagerApi.setUpMessageHandlers( + instanceManager: instanceManager); + BaseDisplayContainer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdDisplayContainer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsLoader.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsManagerLoadedEvent.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsLoadedListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdErrorListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdErrorEvent.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdError.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsRequest.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ContentProgressProvider.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsManager.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + BaseManager.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdEventListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdEvent.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ImaSdkFactory.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ImaSdkSettings.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoAdPlayer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoProgressUpdate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoAdPlayerCallback.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdMediaInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdPodInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + FrameLayout.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ViewGroup.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); View.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - MediaPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + MediaPlayer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); return instanceManager; } @@ -211,15 +251,19 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference(int identifier) { - final PigeonProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference( + int identifier) { + final PigeonProxyApiBaseClass? weakInstance = + _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonProxyApiBaseClass? strongInstance = _strongInstances[identifier]; + final PigeonProxyApiBaseClass? strongInstance = + _strongInstances[identifier]; if (strongInstance != null) { final PigeonProxyApiBaseClass copy = strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = WeakReference(copy); + _weakInstances[identifier] = + WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -243,17 +287,20 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance(PigeonProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance( + PigeonProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier(PigeonProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier( + PigeonProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = WeakReference(instance); + _weakInstances[identifier] = + WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonProxyApiBaseClass copy = instance.pigeon_copy(); @@ -284,9 +331,9 @@ class _PigeonInstanceManagerApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - + static const MessageCodec pigeonChannelCodec = - StandardMessageCodec(); + StandardMessageCodec(); static void setUpMessageHandlers({ BinaryMessenger? binaryMessenger, @@ -362,28 +409,82 @@ class _PigeonInstanceManagerApi { } } } + class _PigeonProxyApiBaseCodec extends StandardMessageCodec { - const _PigeonProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } + const _PigeonProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } +} + +/// The types of error that can be encountered. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. +enum AdErrorCode { + /// Ads player was not provided. + adsPlayerWasNotProvided, + + /// An unexpected error occurred and the cause is not known. + unknownError, +} + +/// Specifies when the error was encountered, during either ad loading or playback. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. +enum AdErrorType { + /// Indicates that the error was encountered when the ad was being loaded. + load, + + /// Indicates that the error was encountered after the ad loaded, during ad play. + play, + + /// The error is not recognized by this wrapper. + unknown, +} + +/// Types of events that can occur during ad playback. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. +enum AdEventType { + /// Fired when an ad break is ready from VMAP or ad rule ads. + adBreakReady, + + /// Fired when the ads manager is done playing all the valid ads in the ads + /// response, or when the response doesn't return any valid ads. + allAdsCompleted, + + /// Fired when an ad completes playing. + completed, + + /// Fired when content should be paused. + contentPauseRequested, + + /// Fired when content should be resumed. + contentResumeRequested, + + /// Fired when the VAST response has been received. + loaded, + + /// The event type is not recognized by this wrapper. + unknown, } /// A base class for more specialized container interfaces. @@ -544,6 +645,9 @@ class AdsLoader extends PigeonProxyApiBaseClass { super.pigeon_instanceManager, }); + late final _PigeonProxyApiBaseCodec __pigeon_codecAdsLoader = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, @@ -589,37 +693,1282 @@ class AdsLoader extends PigeonProxyApiBaseClass { } }); } - } - } - - @override - AdsLoader pigeon_copy() { - return AdsLoader.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ); + } + } + + /// Registers a listener for errors that occur during the ads request. + Future addAdErrorListener(AdErrorListener listener) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecAdsLoader; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdErrorListener'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, listener]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Registers a listener for the ads manager loaded event. + Future addAdsLoadedListener(AdsLoadedListener listener) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecAdsLoader; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdsLoadedListener'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, listener]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Requests ads from a server. + Future requestAds(AdsRequest request) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecAdsLoader; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsLoader.requestAds'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, request]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + AdsLoader pigeon_copy() { + return AdsLoader.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// An event raised when ads are successfully loaded from the ad server through an AdsLoader. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. +class AdsManagerLoadedEvent extends PigeonProxyApiBaseClass { + /// Constructs [AdsManagerLoadedEvent] 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 + AdsManagerLoadedEvent.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.manager, + }); + + /// The ads manager that will control playback of the loaded ads, or null when + /// using dynamic ad insertion. + final AdsManager manager; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdsManagerLoadedEvent Function(AdsManager manager)? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.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.AdsManagerLoadedEvent.pigeon_newInstance was null, expected non-null int.'); + final AdsManager? arg_manager = (args[1] as AdsManager?); + assert(arg_manager != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance was null, expected non-null AdsManager.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_manager!) ?? + AdsManagerLoadedEvent.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + manager: arg_manager!, + ), + 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 + AdsManagerLoadedEvent pigeon_copy() { + return AdsManagerLoadedEvent.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + manager: manager, + ); + } +} + +/// Listener interface for notification of ad load or stream load completion. +/// +/// 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 PigeonProxyApiBaseClass { + AdsLoadedListener({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdsManagerLoaded, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsLoadedListener; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [AdsLoadedListener] 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 + AdsLoadedListener.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdsManagerLoaded, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecAdsLoadedListener = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Called once the AdsManager or StreamManager has been loaded. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final AdsLoadedListener instance = AdsLoadedListener( + /// onAdsManagerLoaded: (AdsLoadedListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + AdsLoadedListener pigeon_instance, + AdsManagerLoadedEvent event, + ) onAdsManagerLoaded; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + AdsLoadedListener pigeon_instance, + AdsManagerLoadedEvent event, + )? onAdsManagerLoaded, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null.'); + final List args = (message as List?)!; + final AdsLoadedListener? arg_pigeon_instance = + (args[0] as AdsLoadedListener?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null, expected non-null AdsLoadedListener.'); + final AdsManagerLoadedEvent? arg_event = + (args[1] as AdsManagerLoadedEvent?); + assert(arg_event != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null, expected non-null AdsManagerLoadedEvent.'); + try { + (onAdsManagerLoaded ?? arg_pigeon_instance!.onAdsManagerLoaded) + .call(arg_pigeon_instance!, arg_event!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + @override + AdsLoadedListener pigeon_copy() { + return AdsLoadedListener.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onAdsManagerLoaded: onAdsManagerLoaded, + ); + } +} + +/// Interface for classes that will listen to AdErrorEvents. +/// +/// 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 PigeonProxyApiBaseClass { + AdErrorListener({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdError, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdErrorListener; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [AdErrorListener] 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 + AdErrorListener.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdError, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecAdErrorListener = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Called when an error occurs. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final AdErrorListener instance = AdErrorListener( + /// onAdError: (AdErrorListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + AdErrorListener pigeon_instance, + AdErrorEvent event, + ) onAdError; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + AdErrorListener pigeon_instance, + AdErrorEvent event, + )? onAdError, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null.'); + final List args = (message as List?)!; + final AdErrorListener? arg_pigeon_instance = + (args[0] as AdErrorListener?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null, expected non-null AdErrorListener.'); + final AdErrorEvent? arg_event = (args[1] as AdErrorEvent?); + assert(arg_event != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null, expected non-null AdErrorEvent.'); + try { + (onAdError ?? arg_pigeon_instance!.onAdError) + .call(arg_pigeon_instance!, arg_event!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + } + + @override + AdErrorListener pigeon_copy() { + return AdErrorListener.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onAdError: onAdError, + ); + } +} + +/// An event raised when there is an error loading or playing ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. +class AdErrorEvent extends PigeonProxyApiBaseClass { + /// Constructs [AdErrorEvent] 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 + AdErrorEvent.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.error, + }); + + /// The AdError that caused this event. + final AdError error; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdErrorEvent Function(AdError error)? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.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.AdErrorEvent.pigeon_newInstance was null, expected non-null int.'); + final AdError? arg_error = (args[1] as AdError?); + assert(arg_error != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance was null, expected non-null AdError.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_error!) ?? + AdErrorEvent.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + error: arg_error!, + ), + 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 + AdErrorEvent pigeon_copy() { + return AdErrorEvent.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + error: error, + ); + } +} + +/// An error that occurred in the SDK. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. +class AdError extends PigeonProxyApiBaseClass { + /// Constructs [AdError] 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 + AdError.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.errorCode, + required this.errorCodeNumber, + required this.errorType, + required this.message, + }); + + /// The error's code. + final AdErrorCode errorCode; + + /// The error code's number. + final int errorCodeNumber; + + /// The error's type. + final AdErrorType errorType; + + /// A human-readable summary of the error. + final String message; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdError Function( + AdErrorCode errorCode, + int errorCodeNumber, + AdErrorType errorType, + String message, + )? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.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.AdError.pigeon_newInstance was null, expected non-null int.'); + final AdErrorCode? arg_errorCode = + args[1] == null ? null : AdErrorCode.values[args[1]! as int]; + assert(arg_errorCode != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance was null, expected non-null AdErrorCode.'); + final int? arg_errorCodeNumber = (args[2] as int?); + assert(arg_errorCodeNumber != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance was null, expected non-null int.'); + final AdErrorType? arg_errorType = + args[3] == null ? null : AdErrorType.values[args[3]! as int]; + assert(arg_errorType != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance was null, expected non-null AdErrorType.'); + final String? arg_message = (args[4] as String?); + assert(arg_message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance was null, expected non-null String.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_errorCode!, arg_errorCodeNumber!, + arg_errorType!, arg_message!) ?? + AdError.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + errorCode: arg_errorCode!, + errorCodeNumber: arg_errorCodeNumber!, + errorType: arg_errorType!, + message: arg_message!, + ), + 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 + AdError pigeon_copy() { + return AdError.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + errorCode: errorCode, + errorCodeNumber: errorCodeNumber, + errorType: errorType, + message: message, + ); + } +} + +/// 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. +class AdsRequest extends PigeonProxyApiBaseClass { + /// Constructs [AdsRequest] 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 + AdsRequest.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecAdsRequest = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdsRequest Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsRequest.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.AdsRequest.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + AdsRequest.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + /// Sets the URL from which ads will be requested. + Future setAdTagUrl(String adTagUrl) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsRequest; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdTagUrl'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adTagUrl]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks + /// based on content progress (cue points). + Future setContentProgressProvider( + ContentProgressProvider provider) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsRequest; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentProgressProvider'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, provider]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + AdsRequest pigeon_copy() { + return AdsRequest.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Defines an interface to allow SDK to track progress of the content video. +/// +/// 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 PigeonProxyApiBaseClass { + /// Constructs [ContentProgressProvider] 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 + ContentProgressProvider.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + ContentProgressProvider Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.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.ContentProgressProvider.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + ContentProgressProvider.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + ContentProgressProvider pigeon_copy() { + return ContentProgressProvider.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// An object which handles playing ads after they've been received from the +/// server. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. +class AdsManager extends BaseManager { + /// Constructs [AdsManager] 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 + AdsManager.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached(); + + late final _PigeonProxyApiBaseCodec __pigeon_codecAdsManager = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdsManager Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsManager.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.AdsManager.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + AdsManager.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + /// Discards current ad break and resumes content. + Future discardAdBreak() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsManager.discardAdBreak'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Pauses the current ad. + Future pause() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsManager.pause'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Starts playing the ads. + Future start() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdsManager.start'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + AdsManager pigeon_copy() { + return AdsManager.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Base interface for managing ads.. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. +class BaseManager extends PigeonProxyApiBaseClass { + /// Constructs [BaseManager] 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 + BaseManager.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecBaseManager = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + BaseManager Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.BaseManager.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.BaseManager.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.BaseManager.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + BaseManager.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + /// Registers a listener for errors that occur during the ad or stream + /// initialization and playback. + Future addAdErrorListener(AdErrorListener errorListener) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecBaseManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdErrorListener'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, errorListener]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Registers a listener for ad events that occur during ad or stream + /// initialization and playback. + Future addAdEventListener(AdEventListener adEventListener) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecBaseManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdEventListener'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, adEventListener]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Stops the ad and all tracking, then releases all assets that were loaded + /// to play the ad. + Future destroy() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecBaseManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.BaseManager.destroy'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Initializes the ad experience using default rendering settings + Future init() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecBaseManager; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.BaseManager.init'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + BaseManager pigeon_copy() { + return BaseManager.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Listener interface for ad events. +/// +/// 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 PigeonProxyApiBaseClass { + AdEventListener({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdEvent, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdEventListener; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); } -} -/// 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. -class AdsRequest extends PigeonProxyApiBaseClass { - /// Constructs [AdsRequest] without creating the associated native object. + /// Constructs [AdEventListener] 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 - AdsRequest.pigeon_detached({ + AdEventListener.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, + required this.onAdEvent, }); + late final _PigeonProxyApiBaseCodec __pigeon_codecAdEventListener = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Respond to an occurrence of an AdEvent. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final AdEventListener instance = AdEventListener( + /// onAdEvent: (AdEventListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + AdEventListener pigeon_instance, + AdEvent event, + ) onAdEvent; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - AdsRequest Function()? pigeon_newInstance, + void Function( + AdEventListener pigeon_instance, + AdEvent event, + )? onAdEvent, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -628,7 +1977,7 @@ class AdsRequest extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -636,21 +1985,18 @@ class AdsRequest extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent 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.AdsRequest.pigeon_newInstance was null, expected non-null int.'); + final AdEventListener? arg_pigeon_instance = + (args[0] as AdEventListener?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null, expected non-null AdEventListener.'); + final AdEvent? arg_event = (args[1] as AdEvent?); + assert(arg_event != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null, expected non-null AdEvent.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - AdsRequest.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ), - arg_pigeon_instanceIdentifier!, - ); + (onAdEvent ?? arg_pigeon_instance!.onAdEvent) + .call(arg_pigeon_instance!, arg_event!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -664,34 +2010,38 @@ class AdsRequest extends PigeonProxyApiBaseClass { } @override - AdsRequest pigeon_copy() { - return AdsRequest.pigeon_detached( + AdEventListener pigeon_copy() { + return AdEventListener.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + onAdEvent: onAdEvent, ); } } -/// An object which handles playing ads after they've been received from the -/// server. +/// Event to notify publisher that an event occurred with an Ad. /// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. -class AdsManager extends PigeonProxyApiBaseClass { - /// Constructs [AdsManager] without creating the associated native object. +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. +class AdEvent extends PigeonProxyApiBaseClass { + /// Constructs [AdEvent] 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 - AdsManager.pigeon_detached({ + AdEvent.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, + required this.type, }); + /// The type of event that occurred. + final AdEventType type; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - AdsManager Function()? pigeon_newInstance, + AdEvent Function(AdEventType type)? pigeon_newInstance, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -700,7 +2050,7 @@ class AdsManager extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -708,18 +2058,23 @@ class AdsManager extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.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.AdsManager.pigeon_newInstance was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null, expected non-null int.'); + final AdEventType? arg_type = + args[1] == null ? null : AdEventType.values[args[1]! as int]; + assert(arg_type != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null, expected non-null AdEventType.'); try { (pigeon_instanceManager ?? PigeonInstanceManager.instance) .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - AdsManager.pigeon_detached( + pigeon_newInstance?.call(arg_type!) ?? + AdEvent.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + type: arg_type!, ), arg_pigeon_instanceIdentifier!, ); @@ -736,10 +2091,11 @@ class AdsManager extends PigeonProxyApiBaseClass { } @override - AdsManager pigeon_copy() { - return AdsManager.pigeon_detached( + AdEvent pigeon_copy() { + return AdEvent.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + type: type, ); } } @@ -761,6 +2117,8 @@ class ImaSdkFactory extends PigeonProxyApiBaseClass { late final _PigeonProxyApiBaseCodec __pigeon_codecImaSdkFactory = _PigeonProxyApiBaseCodec(pigeon_instanceManager); + static final ImaSdkFactory instance = __pigeon_instance(); + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, @@ -809,6 +2167,40 @@ class ImaSdkFactory extends PigeonProxyApiBaseClass { } } + static ImaSdkFactory __pigeon_instance() { + final ImaSdkFactory __pigeon_instance = ImaSdkFactory.pigeon_detached(); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec(PigeonInstanceManager.instance); + final BinaryMessenger __pigeon_binaryMessenger = + ServicesBinding.instance.defaultBinaryMessenger; + final int __pigeon_instanceIdentifier = PigeonInstanceManager.instance + .addDartCreatedInstance(__pigeon_instance); + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.instance'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + return __pigeon_instance; + } + static Future createAdDisplayContainer( ViewGroup container, VideoAdPlayer player, { @@ -847,6 +2239,109 @@ class ImaSdkFactory extends PigeonProxyApiBaseClass { } } + /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. + Future createImaSdkSettings() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecImaSdkFactory; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createImaSdkSettings'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as ImaSdkSettings?)!; + } + } + + /// Creates an `AdsLoader` for requesting ads using the specified settings + /// object. + Future createAdsLoader( + ImaSdkSettings settings, + AdDisplayContainer container, + ) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecImaSdkFactory; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsLoader'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, settings, container]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as AdsLoader?)!; + } + } + + /// Creates an AdsRequest object to contain the data used to request ads. + Future createAdsRequest() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecImaSdkFactory; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRequest'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as AdsRequest?)!; + } + } + @override ImaSdkFactory pigeon_copy() { return ImaSdkFactory.pigeon_detached( @@ -856,6 +2351,77 @@ class ImaSdkFactory extends PigeonProxyApiBaseClass { } } +/// Defines general SDK settings that are used when creating an `AdsLoader`. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. +class ImaSdkSettings extends PigeonProxyApiBaseClass { + /// Constructs [ImaSdkSettings] 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 + ImaSdkSettings.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + ImaSdkSettings Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.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.ImaSdkSettings.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + ImaSdkSettings.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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 + ImaSdkSettings pigeon_copy() { + return ImaSdkSettings.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + /// Defines the set of methods that a video player must implement to be used by /// the IMA SDK, as well as a set of callbacks that it must fire. /// @@ -3008,4 +4574,3 @@ class MediaPlayer extends PigeonProxyApiBaseClass { ); } } - 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 a1115f52cdc..bda0f1183bf 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -22,6 +22,58 @@ import 'package:pigeon/pigeon.dart'; ), ) +/// The types of error that can be encountered. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. +enum AdErrorCode { + /// Ads player was not provided. + adsPlayerWasNotProvided, + + /// An unexpected error occurred and the cause is not known. + unknownError, +} + +/// Specifies when the error was encountered, during either ad loading or playback. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. +enum AdErrorType { + /// Indicates that the error was encountered when the ad was being loaded. + load, + + /// Indicates that the error was encountered after the ad loaded, during ad play. + play, + + /// The error is not recognized by this wrapper. + unknown, +} + +/// Types of events that can occur during ad playback. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. +enum AdEventType { + /// Fired when an ad break is ready from VMAP or ad rule ads. + adBreakReady, + + /// Fired when the ads manager is done playing all the valid ads in the ads + /// response, or when the response doesn't return any valid ads. + allAdsCompleted, + + /// Fired when an ad completes playing. + completed, + + /// Fired when content should be paused. + contentPauseRequested, + + /// Fired when content should be resumed. + contentResumeRequested, + + /// Fired when the VAST response has been received. + loaded, + + /// The event type is not recognized by this wrapper. + unknown, +} + /// A base class for more specialized container interfaces. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. @@ -52,7 +104,98 @@ abstract class AdDisplayContainer implements BaseDisplayContainer {} fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', ), ) -abstract class AdsLoader {} +abstract class AdsLoader { + /// Registers a listener for errors that occur during the ads request. + void addAdErrorListener(AdErrorListener listener); + + /// Registers a listener for the ads manager loaded event. + void addAdsLoadedListener(AdsLoadedListener listener); + + /// Requests ads from a server. + void requestAds(AdsRequest request); +} + +/// An event raised when ads are successfully loaded from the ad server through an AdsLoader. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', + ), +) +abstract class AdsManagerLoadedEvent { + /// The ads manager that will control playback of the loaded ads, or null when + /// using dynamic ad insertion. + late final AdsManager manager; +} + +/// Listener interface for notification of ad load or stream load completion. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', + ), +) +abstract class AdsLoadedListener { + AdsLoadedListener(); + + /// Called once the AdsManager or StreamManager has been loaded. + late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; +} + +/// Interface for classes that will listen to AdErrorEvents. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', + ), +) +abstract class AdErrorListener { + AdErrorListener(); + + /// Called when an error occurs. + late final void Function(AdErrorEvent event) onAdError; +} + +/// An event raised when there is an error loading or playing ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', + ), +) +abstract class AdErrorEvent { + /// The AdError that caused this event. + late final AdError error; +} + +/// An error that occurred in the SDK. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', + ), +) +abstract class AdError { + /// The error's code. + late final AdErrorCode errorCode; + + /// The error code's number. + late final int errorCodeNumber; + + /// The error's type. + late final AdErrorType errorType; + + /// A human-readable summary of the error. + late final String message; +} /// An object containing the data used to request ads from the server. /// @@ -62,7 +205,25 @@ abstract class AdsLoader {} fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', ), ) -abstract class AdsRequest {} +abstract class AdsRequest { + /// Sets the URL from which ads will be requested. + void setAdTagUrl(String adTagUrl); + + /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks + /// based on content progress (cue points). + void setContentProgressProvider(ContentProgressProvider provider); +} + +/// Defines an interface to allow SDK to track progress of the content video. +/// +/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', + ), +) +abstract class ContentProgressProvider {} /// An object which handles playing ads after they've been received from the /// server. @@ -73,7 +234,70 @@ abstract class AdsRequest {} fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', ), ) -abstract class AdsManager {} +abstract class AdsManager extends BaseManager { + /// Discards current ad break and resumes content. + void discardAdBreak(); + + /// Pauses the current ad. + void pause(); + + /// Starts playing the ads. + void start(); +} + +/// Base interface for managing ads.. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', + ), +) +abstract class BaseManager { + /// Registers a listener for errors that occur during the ad or stream + /// initialization and playback. + void addAdErrorListener(AdErrorListener errorListener); + + /// Registers a listener for ad events that occur during ad or stream + /// initialization and playback. + void addAdEventListener(AdEventListener adEventListener); + + /// Stops the ad and all tracking, then releases all assets that were loaded + /// to play the ad. + void destroy(); + + /// Initializes the ad experience using default rendering settings + void init(); +} + +/// Listener interface for ad events. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', + ), +) +abstract class AdEventListener { + AdEventListener(); + + /// Respond to an occurrence of an AdEvent. + late final void Function(AdEvent event) onAdEvent; +} + +/// Event to notify publisher that an event occurred with an Ad. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', + ), +) +abstract class AdEvent { + /// The type of event that occurred. + late final AdEventType type; +} /// Factory class for creating SDK objects. /// @@ -84,13 +308,40 @@ abstract class AdsManager {} ), ) abstract class ImaSdkFactory { + @static + @attached + late final ImaSdkFactory instance; + @static AdDisplayContainer createAdDisplayContainer( ViewGroup container, VideoAdPlayer player, ); + + /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. + ImaSdkSettings createImaSdkSettings(); + + /// Creates an `AdsLoader` for requesting ads using the specified settings + /// object. + AdsLoader createAdsLoader( + ImaSdkSettings settings, + AdDisplayContainer container, + ); + + /// Creates an AdsRequest object to contain the data used to request ads. + AdsRequest createAdsRequest(); } +/// Defines general SDK settings that are used when creating an `AdsLoader`. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', + ), +) +abstract class ImaSdkSettings {} + /// Defines the set of methods that a video player must implement to be used by /// the IMA SDK, as well as a set of callbacks that it must fire. /// From 8ac0311201e4cda09585e12f0eb71dd3d2eb9bec Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 29 Apr 2024 12:42:22 -0400 Subject: [PATCH 06/76] fix build error --- .../interactive_media_ads/VideoAdPlayerProxyApi.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index c0ff5b93605..df344a85ea8 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -12,16 +12,16 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } private class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi) : VideoAdPlayer { - var volume: Int = 0 + var _volume: Int = 0 - var adProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY + var _adProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY override fun getAdProgress(): VideoProgressUpdate { - return adProgress + return _adProgress } override fun getVolume(): Int { - return volume + return _volume } override fun addCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { @@ -54,10 +54,10 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } override fun setVolume(pigeon_instance: VideoAdPlayer, value: Long) { - (pigeon_instance as VideoAdPlayerImpl).volume = value.toInt() + (pigeon_instance as VideoAdPlayerImpl)._volume = value.toInt() } override fun setAdProgress(pigeon_instance: VideoAdPlayer, progress: VideoProgressUpdate) { - (pigeon_instance as VideoAdPlayerImpl).adProgress = progress + (pigeon_instance as VideoAdPlayerImpl)._adProgress = progress } } From bc4d770451c9592c00f0998fba76a84c4baa541b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 29 Apr 2024 21:11:38 -0400 Subject: [PATCH 07/76] implement other platform classes --- .../lib/src/android/android_ads_loader.dart | 92 +++++++++++++++++++ .../lib/src/android/android_ads_manager.dart | 91 ++++++++++++++++++ .../android_interactive_media_ads.dart | 29 ++++++ 3 files changed, 212 insertions(+) create mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_loader.dart create mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_manager.dart create mode 100644 packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart new file mode 100644 index 00000000000..efa0d0fb0ea --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart @@ -0,0 +1,92 @@ +import '../../interactive_media_ads.dart'; +import '../platform_interface/platform_ads_loader.dart'; +import 'android_ad_display_container.dart'; +import 'android_ads_manager.dart'; +import 'interactive_media_ads.g.dart' as interactive_media_ads; + +final class AndroidAdsLoader extends PlatformAdsLoader { + AndroidAdsLoader( + PlatformAdsLoaderCreationParams params, + ) : assert(params.container is AndroidAdDisplayContainer), + super.implementation(params) { + adsLoaderFuture = _createAdsLoader(); + } + + late Future adsLoaderFuture; + + final interactive_media_ads.ImaSdkFactory sdkFactory = + interactive_media_ads.ImaSdkFactory.instance; + + Future _createAdsLoader() async { + final interactive_media_ads.ImaSdkSettings settings = + await sdkFactory.createImaSdkSettings(); + + final interactive_media_ads.AdsLoader adsLoader = + await interactive_media_ads.ImaSdkFactory.instance.createAdsLoader( + settings, + (params.container as AndroidAdDisplayContainer).adDisplayContainer, + ); + + _addListeners( + WeakReference(this), + adsLoader, + ); + + return adsLoader; + } + + static void _addListeners( + WeakReference weakThis, + interactive_media_ads.AdsLoader adsLoader, + ) { + adsLoader.addAdsLoadedListener(interactive_media_ads.AdsLoadedListener( + onAdsManagerLoaded: ( + _, + interactive_media_ads.AdsManagerLoadedEvent event, + ) { + weakThis.target?.params.onAdsLoaded( + PlatformOnAdsLoadedData(manager: AndroidAdsManager(event.manager)), + ); + }, + )); + adsLoader.addAdErrorListener(interactive_media_ads.AdErrorListener( + onAdError: (_, interactive_media_ads.AdErrorEvent event) { + final AdErrorType errorType = switch (event.error.errorType) { + interactive_media_ads.AdErrorType.load => AdErrorType.loading, + interactive_media_ads.AdErrorType.play => AdErrorType.playing, + interactive_media_ads.AdErrorType.unknown => AdErrorType.unknown, + }; + + final AdErrorCode errorCode = switch (event.error.errorCode) { + interactive_media_ads.AdErrorCode.adsPlayerWasNotProvided => + AdErrorCode.adsPlayerNotProvided, + interactive_media_ads.AdErrorCode.unknownError => + AdErrorCode.unknownError, + }; + + weakThis.target?.params.onAdsLoadError( + AdsLoadErrorData( + error: AdError( + type: errorType, + code: errorCode, + message: event.error.message, + ), + ), + ); + }, + )); + } + + @override + Future contentComplete() async {} + + @override + Future requestAds(AdsRequest request) async { + final interactive_media_ads.AdsLoader adsLoader = await adsLoaderFuture; + + final interactive_media_ads.AdsRequest request = + await sdkFactory.createAdsRequest(); + + await adsLoader.requestAds(request); + } +} diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart new file mode 100644 index 00000000000..686702e3da5 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart @@ -0,0 +1,91 @@ +import '../../interactive_media_ads.dart'; +import '../platform_interface/platform_ads_manager.dart'; +import '../platform_interface/platform_ads_manager_delegate.dart'; +import 'interactive_media_ads.g.dart' as interactive_media_ads; + +class AndroidAdsManager extends PlatformAdsManager { + AndroidAdsManager(this.manager); + + final interactive_media_ads.AdsManager manager; + + PlatformAdsManagerDelegate? managerDelegate; + + @override + Future destroy() { + return manager.destroy(); + } + + @override + Future init(AdsManagerInitParams params) { + return manager.init(); + } + + @override + Future setAdsManagerDelegate( + PlatformAdsManagerDelegate delegate, + ) async { + managerDelegate = delegate; + _addListeners(WeakReference(this)); + } + + @override + Future start(AdsManagerStartParams params) { + return manager.start(); + } + + static void _addListeners(WeakReference weakThis) { + weakThis.target?.manager.addAdEventListener( + interactive_media_ads.AdEventListener( + onAdEvent: (_, interactive_media_ads.AdEvent event) { + late final AdEventType eventType; + + switch (event.type) { + case interactive_media_ads.AdEventType.allAdsCompleted: + eventType = AdEventType.allAdsCompleted; + case interactive_media_ads.AdEventType.completed: + eventType = AdEventType.complete; + case interactive_media_ads.AdEventType.contentPauseRequested: + eventType = AdEventType.contentPauseRequested; + case interactive_media_ads.AdEventType.contentResumeRequested: + eventType = AdEventType.contentResumeRequested; + case interactive_media_ads.AdEventType.loaded: + eventType = AdEventType.loaded; + case interactive_media_ads.AdEventType.unknown: + case interactive_media_ads.AdEventType.adBreakReady: + return; + } + weakThis.target?.managerDelegate?.params.onAdEvent + ?.call(AdEvent(type: eventType)); + }, + ), + ); + weakThis.target?.manager.addAdErrorListener( + interactive_media_ads.AdErrorListener( + onAdError: (_, interactive_media_ads.AdErrorEvent event) { + final AdErrorType errorType = switch (event.error.errorType) { + interactive_media_ads.AdErrorType.load => AdErrorType.loading, + interactive_media_ads.AdErrorType.play => AdErrorType.playing, + interactive_media_ads.AdErrorType.unknown => AdErrorType.unknown, + }; + + final AdErrorCode errorCode = switch (event.error.errorCode) { + interactive_media_ads.AdErrorCode.adsPlayerWasNotProvided => + AdErrorCode.adsPlayerNotProvided, + interactive_media_ads.AdErrorCode.unknownError => + AdErrorCode.unknownError, + }; + + weakThis.target?.managerDelegate?.params.onAdErrorEvent?.call( + AdErrorEvent( + error: AdError( + type: errorType, + code: errorCode, + message: event.error.message, + ), + ), + ); + }, + ), + ); + } +} diff --git a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart new file mode 100644 index 00000000000..07302517b18 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart @@ -0,0 +1,29 @@ +import '../platform_interface/interactive_media_ads_platform.dart'; +import '../platform_interface/platform_ad_display_container.dart'; +import '../platform_interface/platform_ads_loader.dart'; +import '../platform_interface/platform_ads_manager_delegate.dart'; +import 'android_ad_display_container.dart'; +import 'android_ads_loader.dart'; + +final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { + @override + PlatformAdDisplayContainer createPlatformAdDisplayContainer( + PlatformAdDisplayContainerCreationParams params, + ) { + return AndroidAdDisplayContainer(params); + } + + @override + PlatformAdsLoader createPlatformAdsLoader( + PlatformAdsLoaderCreationParams params, + ) { + return AndroidAdsLoader(params); + } + + @override + PlatformAdsManagerDelegate createPlatformAdsManagerDelegate( + PlatformAdsManagerDelegateCreationParams params, + ) { + return PlatformAdsManagerDelegate(params); + } +} From 1f74ead1a9077cfeeb2397e68a3f4bfd774c0d7c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 30 Apr 2024 19:33:10 -0400 Subject: [PATCH 08/76] start creating an implementation --- .../AdErrorListenerProxyApi.kt | 5 +- .../AdEventListenerProxyApi.kt | 5 +- .../GeneratedInteractiveMediaAdsLibrary.kt | 1661 ++++++----------- .../InteractiveMediaAdsPlugin.kt | 33 + .../example/lib/main.dart | 145 +- .../example/pubspec.yaml | 1 + .../lib/interactive_media_ads.dart | 1 + .../android/android_ad_display_container.dart | 3 +- .../lib/src/android/android_ads_loader.dart | 15 +- .../src/android/interactive_media_ads.g.dart | 169 +- 10 files changed, 864 insertions(+), 1174 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt index c33a3a69813..82b6c5b3057 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -1,5 +1,6 @@ package dev.flutter.packages.interactive_media_ads +import android.app.Activity import com.google.ads.interactivemedia.v3.api.AdErrorEvent class AdErrorListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : @@ -7,7 +8,9 @@ class AdErrorListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : private class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : AdErrorEvent.AdErrorListener { override fun onAdError(event: AdErrorEvent) { - api.onAdError(this, event) {} + ((api.pigeonRegistrar as ProxyApiRegistrar).context as Activity).runOnUiThread { + api.onAdError(this, event) {} + } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt index bb2e09bf69b..c93763cfa05 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -1,12 +1,15 @@ package dev.flutter.packages.interactive_media_ads +import android.app.Activity import com.google.ads.interactivemedia.v3.api.AdEvent class AdEventListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdEventListener(pigeonRegistrar) { private class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { override fun onAdEvent(event: AdEvent) { - api.onAdEvent(this, event) {} + ((api.pigeonRegistrar as ProxyApiRegistrar).context as Activity).runOnUiThread { + api.onAdEvent(this, event) {} + } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index 745a29814e9..d7896d67254 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -17,31 +17,33 @@ private fun wrapResult(result: Any?): List { private fun wrapError(exception: Throwable): List { if (exception is FlutterError) { - return listOf(exception.code, exception.message, exception.details) + return listOf( + exception.code, + exception.message, + exception.details + ) } else { return listOf( - exception.javaClass.simpleName, - exception.toString(), - "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception) + ) } } private fun createConnectionError(channelName: String): FlutterError { - return FlutterError( - "channel-error", "Unable to establish connection on channel: '$channelName'.", "") -} + return FlutterError("channel-error", "Unable to establish connection on channel: '$channelName'.", "")} /** * Error class for passing custom error details to Flutter via a thrown PlatformException. - * * @property code The error code. * @property message The error message. * @property details The error details. Must be a datatype supported by the api codec. */ -class FlutterError( - val code: String, - override val message: String? = null, - val details: Any? = null +class FlutterError ( + val code: String, + override val message: String? = null, + val details: Any? = null ) : Throwable() /** * Maintains instances used to communicate with the corresponding objects in Dart. @@ -55,12 +57,12 @@ class FlutterError( * reference is removed with [remove] and the weak reference is deallocated, the * `finalizationListener` is made with the instance's identifier. However, if the strong reference * is removed and then the identifier is retrieved with the intention to pass the identifier to Dart - * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the instance is - * recreated. The strong reference will then need to be removed manually again. + * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the + * instance is recreated. The strong reference will then need to be removed manually again. */ @Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused") class PigeonInstanceManager(private val finalizationListener: PigeonFinalizationListener) { - /** Interface for listening when a weak reference of an instance is removed from the manager. */ + /** Interface for listening when a weak reference of an instance is removed from the manager. */ interface PigeonFinalizationListener { fun onFinalize(identifier: Long) } @@ -86,7 +88,10 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization } init { - handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) + handler.postDelayed( + { releaseAllFinalizedInstances() }, + clearFinalizedWeakReferencesInterval + ) } companion object { @@ -100,6 +105,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Instantiate a new manager. * + * * When the manager is no longer needed, [stopFinalizationListener] must be called. * * @param finalizationListener the listener for garbage collected weak references. @@ -117,8 +123,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier paired to an instance. * @param the expected return type. * @return the removed instance if the manager contains the given identifier, otherwise `null` if - * the manager doesn't contain the value. - */ + * the manager doesn't contain the value. + */ fun remove(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() return strongInstances.remove(identifier) as T? @@ -127,17 +133,19 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Retrieves the identifier paired with an instance. * + * * If the manager contains a strong reference to `instance`, it will return the identifier * associated with `instance`. If the manager contains only a weak reference to `instance`, a new * strong reference to `instance` will be added and will need to be removed again with [remove]. * + * * If this method returns a nonnull identifier, this method also expects the Dart * `PigeonInstanceManager` to have, or recreate, a weak reference to the Dart instance the * identifier is associated with. * * @param instance an instance that may be stored in the manager. * @return the identifier associated with `instance` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. + * `null` if the manager doesn't contain the value. */ fun getIdentifierForStrongReference(instance: Any?): Long? { logWarningIfFinalizationListenerHasStopped() @@ -151,13 +159,14 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Adds a new instance that was instantiated from Dart. * - * The same instance can be added multiple times, but each identifier must be unique. This allows - * two objects that are equivalent (e.g. the `equals` method returns true and their hashcodes are - * equal) to both be added. + * + * The same instance can be added multiple times, but each identifier must be unique. This + * allows two objects that are equivalent (e.g. the `equals` method returns true and their + * hashcodes are equal) to both be added. * * @param instance the instance to be stored. * @param identifier the identifier to be paired with instance. This value must be >= 0 and - * unique. + * unique. */ fun addDartCreatedInstance(instance: Any, identifier: Long) { logWarningIfFinalizationListenerHasStopped() @@ -172,9 +181,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization */ fun addHostCreatedInstance(instance: Any): Long { logWarningIfFinalizationListenerHasStopped() - require(!containsInstance(instance)) { - "Instance of ${instance.javaClass} has already been added." - } + require(!containsInstance(instance)) { "Instance of ${instance.javaClass} has already been added." } val identifier = nextIdentifier++ addInstance(instance, identifier) return identifier @@ -186,8 +193,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier associated with an instance. * @param the expected return type. * @return the instance associated with `identifier` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. - */ + * `null` if the manager doesn't contain the value. + */ fun getInstance(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() val instance = weakInstances[identifier] as java.lang.ref.WeakReference? @@ -209,6 +216,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Stop the periodic run of the [PigeonFinalizationListener] for instances that have been garbage * collected. * + * * The InstanceManager can continue to be used, but the [PigeonFinalizationListener] will no * longer be called and methods will log a warning. */ @@ -220,6 +228,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Removes all of the instances from this manager. * + * * The manager will be empty after this call returns. */ fun clear() { @@ -233,6 +242,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Whether the [PigeonFinalizationListener] is still being called for instances that are garbage * collected. * + * * See [stopFinalizationListener]. */ fun hasFinalizationListenerStopped(): Boolean { @@ -244,8 +254,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization return } var reference: java.lang.ref.WeakReference? - while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != - null) { + while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != null) { val identifier = weakReferencesToIdentifiers.remove(reference) if (identifier != null) { weakInstances.remove(identifier) @@ -253,7 +262,10 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization finalizationListener.onFinalize(identifier) } } - handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) + handler.postDelayed( + { releaseAllFinalizedInstances() }, + clearFinalizedWeakReferencesInterval + ) } private fun addInstance(instance: Any, identifier: Long) { @@ -271,63 +283,55 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization private fun logWarningIfFinalizationListenerHasStopped() { if (hasFinalizationListenerStopped()) { Log.w( - tag, - "The manager was used after calls to the PigeonFinalizationListener has been stopped.") + tag, + "The manager was used after calls to the PigeonFinalizationListener has been stopped." + ) } } } -/** Generated API for managing the Dart and native `PigeonInstanceManager`s. */ +/** +* Generated API for managing the Dart and native `PigeonInstanceManager`s. +*/ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { companion object { /** The codec used by PigeonInstanceManagerApi. */ - private val codec: MessageCodec by lazy { StandardMessageCodec() } + private val codec: MessageCodec by lazy { + StandardMessageCodec() + } /** - * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the - * `binaryMessenger`. - */ - fun setUpMessageHandlers( - binaryMessenger: BinaryMessenger, - instanceManager: PigeonInstanceManager? - ) { + * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the + * `binaryMessenger`. + */ + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, instanceManager: PigeonInstanceManager?) { run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", codec) if (instanceManager != null) { channel.setMessageHandler { message, reply -> val identifier = message as Number - val wrapped: List = - try { - instanceManager.remove(identifier.toLong()) - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = try { + instanceManager.remove(identifier.toLong()) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { channel.setMessageHandler(null) - } + } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", codec) if (instanceManager != null) { channel.setMessageHandler { _, reply -> - val wrapped: List = - try { - instanceManager.clear() - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = try { + instanceManager.clear() + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -338,8 +342,7 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { - val channelName = - "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" + val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(identifier) { if (it is List<*>) { @@ -356,8 +359,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } /** - * Provides implementations for each ProxyApi implementation and provides access to resources needed - * by any implementation. + * Provides implementations for each ProxyApi implementation and provides access to resources + * needed by any implementation. */ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val instanceManager: PigeonInstanceManager @@ -365,7 +368,7 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val codec: StandardMessageCodec get() { if (_codec == null) { - _codec = PigeonProxyApiBaseCodec(this) + _codec = PigeonProxyApiBaseCodec(this) } return _codec!! } @@ -373,18 +376,19 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { init { val api = PigeonInstanceManagerApi(binaryMessenger) instanceManager = - PigeonInstanceManager.create( - object : PigeonInstanceManager.PigeonFinalizationListener { - override fun onFinalize(identifier: Long) { - api.removeStrongReference(identifier) { - if (it.isFailure) { - Log.e( - "PigeonProxyApiRegistrar", - "Failed to remove Dart strong reference with identifier: $identifier") - } - } + PigeonInstanceManager.create( + object : PigeonInstanceManager.PigeonFinalizationListener { + override fun onFinalize(identifier: Long) { + api.removeStrongReference(identifier) { + if (it.isFailure) { + Log.e( + "PigeonProxyApiRegistrar", + "Failed to remove Dart strong reference with identifier: $identifier" + ) } - }) + } + } + }) } /** @@ -400,8 +404,8 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer /** - * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of `AdsLoader` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of + * `AdsLoader` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsLoader(): PigeonApiAdsLoader @@ -424,20 +428,20 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdErrorListener(): PigeonApiAdErrorListener /** - * An implementation of [PigeonApiAdErrorEvent] used to add a new Dart instance of `AdErrorEvent` - * to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdErrorEvent] used to add a new Dart instance of + * `AdErrorEvent` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdErrorEvent(): PigeonApiAdErrorEvent /** - * An implementation of [PigeonApiAdError] used to add a new Dart instance of `AdError` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiAdError] used to add a new Dart instance of + * `AdError` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdError(): PigeonApiAdError /** - * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of `AdsRequest` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of + * `AdsRequest` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsRequest(): PigeonApiAdsRequest @@ -448,14 +452,14 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider /** - * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of + * `AdsManager` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsManager(): PigeonApiAdsManager /** - * An implementation of [PigeonApiBaseManager] used to add a new Dart instance of `BaseManager` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiBaseManager] used to add a new Dart instance of + * `BaseManager` to the Dart `InstanceManager`. */ abstract fun getPigeonApiBaseManager(): PigeonApiBaseManager @@ -466,8 +470,8 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdEventListener(): PigeonApiAdEventListener /** - * An implementation of [PigeonApiAdEvent] used to add a new Dart instance of `AdEvent` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiAdEvent] used to add a new Dart instance of + * `AdEvent` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdEvent(): PigeonApiAdEvent @@ -502,52 +506,51 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback /** - * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of `AdMediaInfo` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of + * `AdMediaInfo` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdMediaInfo(): PigeonApiAdMediaInfo /** - * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of `AdPodInfo` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of + * `AdPodInfo` to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdPodInfo(): PigeonApiAdPodInfo /** - * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of `FrameLayout` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of + * `FrameLayout` to the Dart `InstanceManager`. */ abstract fun getPigeonApiFrameLayout(): PigeonApiFrameLayout /** - * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of `ViewGroup` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of + * `ViewGroup` to the Dart `InstanceManager`. */ abstract fun getPigeonApiViewGroup(): PigeonApiViewGroup /** - * An implementation of [PigeonApiVideoView] used to add a new Dart instance of `VideoView` to the - * Dart `InstanceManager`. + * An implementation of [PigeonApiVideoView] used to add a new Dart instance of + * `VideoView` to the Dart `InstanceManager`. */ abstract fun getPigeonApiVideoView(): PigeonApiVideoView /** - * An implementation of [PigeonApiView] used to add a new Dart instance of `View` to the Dart - * `InstanceManager`. + * An implementation of [PigeonApiView] used to add a new Dart instance of + * `View` to the Dart `InstanceManager`. */ abstract fun getPigeonApiView(): PigeonApiView /** - * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of `MediaPlayer` to - * the Dart `InstanceManager`. + * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of + * `MediaPlayer` to the Dart `InstanceManager`. */ abstract fun getPigeonApiMediaPlayer(): PigeonApiMediaPlayer fun setUp() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, instanceManager) PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsLoader()) - PigeonApiAdsLoadedListener.setUpMessageHandlers( - binaryMessenger, getPigeonApiAdsLoadedListener()) + PigeonApiAdsLoadedListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsLoadedListener()) PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdErrorListener()) PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsRequest()) PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsManager()) @@ -555,16 +558,13 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdEventListener()) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory()) PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayer()) - PigeonApiVideoProgressUpdate.setUpMessageHandlers( - binaryMessenger, getPigeonApiVideoProgressUpdate()) - PigeonApiVideoAdPlayerCallback.setUpMessageHandlers( - binaryMessenger, getPigeonApiVideoAdPlayerCallback()) + PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoProgressUpdate()) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayerCallback()) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, getPigeonApiFrameLayout()) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, getPigeonApiViewGroup()) PigeonApiVideoView.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoView()) PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiMediaPlayer()) } - fun tearDown() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null) PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, null) @@ -584,9 +584,7 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, null) } } - -private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : - StandardMessageCodec() { +private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : StandardMessageCodec() { override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { @@ -599,58 +597,83 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { if (value is com.google.ads.interactivemedia.v3.api.AdDisplayContainer) { - registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { - registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { - registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent) { - registrar.getPigeonApiAdsManagerLoadedEvent().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) { - registrar.getPigeonApiAdsLoadedListener().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) { - registrar.getPigeonApiAdErrorListener().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent) { - registrar.getPigeonApiAdErrorEvent().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdError) { - registrar.getPigeonApiAdError().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { - registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) { - registrar.getPigeonApiContentProgressProvider().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { - registrar.getPigeonApiAdsManager().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.BaseManager) { - registrar.getPigeonApiBaseManager().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) { - registrar.getPigeonApiAdEventListener().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdEvent) { - registrar.getPigeonApiAdEvent().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { - registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkSettings) { - registrar.getPigeonApiImaSdkSettings().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { - registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { - registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) {} - } else if (value - is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { - registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { - registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) {} - } else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { - registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) {} - } else if (value is android.widget.FrameLayout) { - registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) {} - } else if (value is android.view.ViewGroup) { - registrar.getPigeonApiViewGroup().pigeon_newInstance(value) {} - } else if (value is android.widget.VideoView) { - registrar.getPigeonApiVideoView().pigeon_newInstance(value) {} - } else if (value is android.view.View) { - registrar.getPigeonApiView().pigeon_newInstance(value) {} - } else if (value is android.media.MediaPlayer) { - registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) {} + registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { + registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { + registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent) { + registrar.getPigeonApiAdsManagerLoadedEvent().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) { + registrar.getPigeonApiAdsLoadedListener().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) { + Log.d("ERRORERROR", "${value is com.google.ads.interactivemedia.v3.api.AdsManager}") + registrar.getPigeonApiAdErrorListener().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent) { + registrar.getPigeonApiAdErrorEvent().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdError) { + registrar.getPigeonApiAdError().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { + registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) { + registrar.getPigeonApiContentProgressProvider().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { + registrar.getPigeonApiAdsManager().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.BaseManager) { + registrar.getPigeonApiBaseManager().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) { + registrar.getPigeonApiAdEventListener().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdEvent) { + registrar.getPigeonApiAdEvent().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { + registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkSettings) { + registrar.getPigeonApiImaSdkSettings().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { + registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { + registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { + registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { + registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) { } + } + else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { + registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) { } + } + else if (value is android.widget.FrameLayout) { + registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) { } + } + else if (value is android.view.ViewGroup) { + registrar.getPigeonApiViewGroup().pigeon_newInstance(value) { } + } + else if (value is android.widget.VideoView) { + registrar.getPigeonApiVideoView().pigeon_newInstance(value) { } + } + else if (value is android.view.View) { + registrar.getPigeonApiView().pigeon_newInstance(value) { } + } + else if (value is android.media.MediaPlayer) { + registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) { } } when { @@ -666,8 +689,7 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : /** * The types of error that can be encountered. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. */ enum class AdErrorCode(val raw: Int) { /** Ads player was not provided. */ @@ -685,8 +707,7 @@ enum class AdErrorCode(val raw: Int) { /** * Specifies when the error was encountered, during either ad loading or playback. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. */ enum class AdErrorType(val raw: Int) { /** Indicates that the error was encountered when the ad was being loaded. */ @@ -706,15 +727,14 @@ enum class AdErrorType(val raw: Int) { /** * Types of events that can occur during ad playback. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. */ enum class AdEventType(val raw: Int) { /** Fired when an ad break is ready from VMAP or ad rule ads. */ AD_BREAK_READY(0), /** - * Fired when the ads manager is done playing all the valid ads in the ads response, or when the - * response doesn't return any valid ads. + * Fired when the ads manager is done playing all the valid ads in the ads + * response, or when the response doesn't return any valid ads. */ ALL_ADS_COMPLETED(1), /** Fired when an ad completes playing. */ @@ -737,27 +757,22 @@ enum class AdEventType(val raw: Int) { /** * A base class for more specialized container interfaces. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -768,34 +783,30 @@ abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApi } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * A container in which to display the ads. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -806,59 +817,46 @@ abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRe } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ - fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { + /**An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ + fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer + { return pigeonRegistrar.getPigeonApiBaseDisplayContainer() } + } /** - * An object which allows publishers to request ads from ad servers or a dynamic ad insertion - * stream. + * An object which allows publishers to request ads from ad servers or a + * dynamic ad insertion stream. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Registers a listener for errors that occur during the ads request. */ - abstract fun addAdErrorListener( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, - listener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener - ) + abstract fun addAdErrorListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, listener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) /** Registers a listener for the ads manager loaded event. */ - abstract fun addAdsLoadedListener( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, - listener: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener - ) + abstract fun addAdsLoadedListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, listener: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) /** Requests ads from a server. */ - abstract fun requestAds( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, - request: com.google.ads.interactivemedia.v3.api.AdsRequest - ) + abstract fun requestAds(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, request: com.google.ads.interactivemedia.v3.api.AdsRequest) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoader?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdErrorListener", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdErrorListener", 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.AdsLoader - val listenerArg = - args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + val listenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener var wrapped: List try { api.addAdErrorListener(pigeon_instanceArg, listenerArg) @@ -873,17 +871,12 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdsLoadedListener", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdsLoadedListener", 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.AdsLoader - val listenerArg = - args[1] as com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + val listenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener var wrapped: List try { api.addAdsLoadedListener(pigeon_instanceArg, listenerArg) @@ -898,11 +891,7 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsLoader.requestAds", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoader.requestAds", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -925,17 +914,14 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" @@ -949,43 +935,37 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * An event raised when ads are successfully loaded from the ad server through an AdsLoader. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** - * The ads manager that will control playback of the loaded ads, or null when using dynamic ad - * insertion. + * The ads manager that will control playback of the loaded ads, or null when + * using dynamic ad insertion. */ - abstract fun manager( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent - ): com.google.ads.interactivemedia.v3.api.AdsManager + abstract fun manager(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent): com.google.ads.interactivemedia.v3.api.AdsManager @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsManagerLoadedEvent and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsManagerLoadedEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val managerArg = manager(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg, managerArg)) { if (it is List<*>) { @@ -996,39 +976,33 @@ abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyAp } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Listener interface for notification of ad load or stream load completion. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): - com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoadedListener?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1043,29 +1017,22 @@ abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiReg } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsLoadedListener and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsLoadedListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException( - "Attempting to create a new Dart instance of AdsLoadedListener, but the class has a nonnull callback method.") + throw IllegalStateException("Attempting to create a new Dart instance of AdsLoadedListener, but the class has a nonnull callback method.") } /** Called once the AdsManager or StreamManager has been loaded. */ - fun onAdsManagerLoaded( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, - eventArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, - callback: (Result) -> Unit - ) { + fun onAdsManagerLoaded(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, eventArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_instanceArg, eventArg)) { if (it is List<*>) { @@ -1076,39 +1043,33 @@ abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiReg } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Interface for classes that will listen to AdErrorEvents. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): - com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdErrorListener?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1123,25 +1084,19 @@ abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegis } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdErrorListener and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdErrorListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException( - "Attempting to create a new Dart instance of AdErrorListener, but the class has a nonnull callback method.") + throw IllegalStateException("Attempting to create a new Dart instance of AdErrorListener, but the class has a nonnull callback method.") } /** Called when an error occurs. */ - fun onAdError( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, - eventArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, - callback: (Result) -> Unit - ) { + fun onAdError(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, eventArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError" @@ -1155,35 +1110,30 @@ abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegis } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * An event raised when there is an error loading or playing ads. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The AdError that caused this event. */ - abstract fun error( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdErrorEvent - ): com.google.ads.interactivemedia.v3.api.AdError + abstract fun error(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdErrorEvent): com.google.ads.interactivemedia.v3.api.AdError @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdErrorEvent and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdErrorEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val errorArg = error(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -1198,48 +1148,39 @@ abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistra } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * An error that occurred in the SDK. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The error's code. */ - abstract fun errorCode( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError - ): AdErrorCode + abstract fun errorCode(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): AdErrorCode /** The error code's number. */ - abstract fun errorCodeNumber( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError - ): Long + abstract fun errorCodeNumber(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): Long /** The error's type. */ - abstract fun errorType( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError - ): AdErrorType + abstract fun errorType(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): AdErrorType /** A human-readable summary of the error. */ abstract fun message(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): String @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdError and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdError, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdError and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdError, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val errorCodeArg = errorCode(pigeon_instanceArg) val errorCodeNumberArg = errorCodeNumber(pigeon_instanceArg) val errorTypeArg = errorType(pigeon_instanceArg) @@ -1248,59 +1189,42 @@ abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send( - listOf( - pigeon_identifierArg, - errorCodeArg.raw, - errorCodeNumberArg, - errorTypeArg.raw, - messageArg)) { - 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))) - } + channel.send(listOf(pigeon_identifierArg, errorCodeArg.raw, errorCodeNumberArg, errorTypeArg.raw, messageArg)) { + 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))) + } + } } + } /** * 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/com/google/ads/interactivemedia/v3/api/AdsRequest. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Sets the URL from which ads will be requested. */ - abstract fun setAdTagUrl( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, - adTagUrl: String - ) + abstract fun setAdTagUrl(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, adTagUrl: String) /** - * Attaches a ContentProgressProvider instance to allow scheduling ad breaks based on content - * progress (cue points). + * Attaches a ContentProgressProvider instance to allow scheduling ad breaks + * based on content progress (cue points). */ - abstract fun setContentProgressProvider( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, - provider: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider - ) + abstract fun setContentProgressProvider(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, provider: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsRequest?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdTagUrl", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdTagUrl", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1320,17 +1244,12 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentProgressProvider", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentProgressProvider", 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 providerArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider + val providerArg = args[1] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider var wrapped: List try { api.setContentProgressProvider(pigeon_instanceArg, providerArg) @@ -1348,17 +1267,14 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" @@ -1372,34 +1288,30 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Defines an interface to allow SDK to track progress of the content video. * - * See - * https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. + * See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -1410,15 +1322,16 @@ abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxy } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** - * An object which handles playing ads after they've been received from the server. + * An object which handles playing ads after they've been received from the + * server. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { @@ -1436,11 +1349,7 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsManager?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdsManager.discardAdBreak", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.discardAdBreak", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1459,9 +1368,7 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.pause", codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.pause", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1480,9 +1387,7 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.start", codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.start", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1504,17 +1409,14 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" @@ -1528,41 +1430,41 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiBaseManager] used to access callback methods */ - fun pigeon_getPigeonApiBaseManager(): PigeonApiBaseManager { + /**An implementation of [PigeonApiBaseManager] used to access callback methods */ + fun pigeon_getPigeonApiBaseManager(): PigeonApiBaseManager + { return pigeonRegistrar.getPigeonApiBaseManager() } + } /** * Base interface for managing ads.. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** - * Registers a listener for errors that occur during the ad or stream initialization and playback. + * Registers a listener for errors that occur during the ad or stream + * initialization and playback. */ - abstract fun addAdErrorListener( - pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, - errorListener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener - ) + abstract fun addAdErrorListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, errorListener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) /** - * Registers a listener for ad events that occur during ad or stream initialization and playback. + * Registers a listener for ad events that occur during ad or stream + * initialization and playback. */ - abstract fun addAdEventListener( - pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, - adEventListener: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener - ) + abstract fun addAdEventListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, adEventListener: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) - /** Stops the ad and all tracking, then releases all assets that were loaded to play the ad. */ + /** + * Stops the ad and all tracking, then releases all assets that were loaded + * to play the ad. + */ abstract fun destroy(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager) /** Initializes the ad experience using default rendering settings */ @@ -1573,17 +1475,12 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiBaseManager?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdErrorListener", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdErrorListener", 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.BaseManager - val errorListenerArg = - args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + val errorListenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener var wrapped: List try { api.addAdErrorListener(pigeon_instanceArg, errorListenerArg) @@ -1598,17 +1495,12 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdEventListener", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdEventListener", 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.BaseManager - val adEventListenerArg = - args[1] as com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + val adEventListenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener var wrapped: List try { api.addAdEventListener(pigeon_instanceArg, adEventListenerArg) @@ -1623,11 +1515,7 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.BaseManager.destroy", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.destroy", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1646,9 +1534,7 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.init", codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.init", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1670,17 +1556,14 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of BaseManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseManager, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of BaseManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseManager, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseManager.pigeon_newInstance" @@ -1694,39 +1577,33 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Listener interface for ad events. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): - com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdEventListener?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1741,25 +1618,19 @@ abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegis } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdEventListener and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdEventListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException( - "Attempting to create a new Dart instance of AdEventListener, but the class has a nonnull callback method.") + throw IllegalStateException("Attempting to create a new Dart instance of AdEventListener, but the class has a nonnull callback method.") } /** Respond to an occurrence of an AdEvent. */ - fun onAdEvent( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, - eventArg: com.google.ads.interactivemedia.v3.api.AdEvent, - callback: (Result) -> Unit - ) { + fun onAdEvent(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, eventArg: com.google.ads.interactivemedia.v3.api.AdEvent, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent" @@ -1773,15 +1644,15 @@ abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegis } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Event to notify publisher that an event occurred with an Ad. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { @@ -1789,17 +1660,14 @@ abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun type(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdEvent): AdEventType @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdEvent and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val typeArg = type(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -1814,60 +1682,47 @@ abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Factory class for creating SDK objects. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun instance(): com.google.ads.interactivemedia.v3.api.ImaSdkFactory - abstract fun createAdDisplayContainer( - container: android.view.ViewGroup, - player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - ): com.google.ads.interactivemedia.v3.api.AdDisplayContainer + abstract fun createAdDisplayContainer(container: android.view.ViewGroup, player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer): com.google.ads.interactivemedia.v3.api.AdDisplayContainer /** Creates an `ImaSdkSettings` object for configuring the IMA SDK. */ - abstract fun createImaSdkSettings( - pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory - ): com.google.ads.interactivemedia.v3.api.ImaSdkSettings + abstract fun createImaSdkSettings(pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory): com.google.ads.interactivemedia.v3.api.ImaSdkSettings - /** Creates an `AdsLoader` for requesting ads using the specified settings object. */ - abstract fun createAdsLoader( - pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, - settings: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, - container: com.google.ads.interactivemedia.v3.api.AdDisplayContainer - ): com.google.ads.interactivemedia.v3.api.AdsLoader + /** + * Creates an `AdsLoader` for requesting ads using the specified settings + * object. + */ + abstract fun createAdsLoader(pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, settings: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, container: com.google.ads.interactivemedia.v3.api.AdDisplayContainer): com.google.ads.interactivemedia.v3.api.AdsLoader /** Creates an AdsRequest object to contain the data used to request ads. */ - abstract fun createAdsRequest( - pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory - ): com.google.ads.interactivemedia.v3.api.AdsRequest + abstract fun createAdsRequest(pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory): com.google.ads.interactivemedia.v3.api.AdsRequest companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.instance", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.instance", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.instance(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.instance(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1879,11 +1734,7 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1902,11 +1753,7 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createImaSdkSettings", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createImaSdkSettings", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1924,11 +1771,7 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsLoader", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsLoader", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1937,8 +1780,7 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr val containerArg = args[2] as com.google.ads.interactivemedia.v3.api.AdDisplayContainer var wrapped: List try { - wrapped = - listOf(api.createAdsLoader(pigeon_instanceArg, settingsArg, containerArg)) + wrapped = listOf(api.createAdsLoader(pigeon_instanceArg, settingsArg, containerArg)) } catch (exception: Throwable) { wrapped = wrapError(exception) } @@ -1949,11 +1791,7 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRequest", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRequest", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1974,17 +1812,14 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.pigeon_newInstance" @@ -1998,30 +1833,27 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Defines general SDK settings that are used when creating an `AdsLoader`. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.pigeon_newInstance" @@ -2035,52 +1867,43 @@ abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegist } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** - * Defines the set of methods that a video player must implement to be used by the IMA SDK, as well - * as a set of callbacks that it must fire. + * Defines the set of methods that a video player must implement to be used by + * the IMA SDK, as well as a set of callbacks that it must fire. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer /** The volume of the player as a percentage from 0 to 100. */ - abstract fun setVolume( - pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - value: Long - ) + abstract fun setVolume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, value: Long) - /** The `VideoProgressUpdate` describing playback progress of the current video. */ - abstract fun setAdProgress( - pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - ) + /** + * The `VideoProgressUpdate` describing playback progress of the current + * video. + */ + abstract fun setAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2092,16 +1915,11 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", 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.player.VideoAdPlayer + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { @@ -2117,18 +1935,12 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", 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.player.VideoAdPlayer - val progressArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + val progressArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { api.setAdProgress(pigeon_instanceArg, progressArg) @@ -2146,26 +1958,19 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException( - "Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") + throw IllegalStateException("Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") } /** Adds a callback. */ - fun addCallback( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callbackArg: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - callback: (Result) -> Unit - ) { + fun addCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback" @@ -2179,17 +1984,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Loads a video ad hosted at AdMediaInfo. */ - fun loadAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, - callback: (Result) -> Unit - ) { + fun loadAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd" @@ -2203,16 +2004,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Pauses playing the current ad. */ - fun pauseAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + fun pauseAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd" @@ -2226,19 +2024,16 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** - * Starts or resumes playing the video ad referenced by the AdMediaInfo, provided loadAd has - * already been called for it. + * Starts or resumes playing the video ad referenced by the AdMediaInfo, + * provided loadAd has already been called for it. */ - fun playAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + fun playAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd" @@ -2252,15 +2047,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Cleans up and releases all resources used by the `VideoAdPlayer`. */ - fun release( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callback: (Result) -> Unit - ) { + fun release(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release" @@ -2274,17 +2067,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Removes a callback. */ - fun removeCallback( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - callbackArg: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - callback: (Result) -> Unit - ) { + fun removeCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback" @@ -2298,16 +2087,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Stops playing the current ad. */ - fun stopAd( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, - adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + fun stopAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd" @@ -2321,37 +2107,32 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Defines an update to the video's progress. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor( - currentTimeMs: Long, - durationMs: Long - ): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + abstract fun pigeon_defaultConstructor(currentTimeMs: Long, durationMs: Long): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - /** Value to use for cases when progress is not yet defined, such as video initialization. */ - abstract fun videoTimeNotReady(): - com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + /** + * Value to use for cases when progress is not yet defined, such as video + * initialization. + */ + abstract fun videoTimeNotReady(): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -2360,9 +2141,7 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), - pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(currentTimeMsArg,durationMsArg), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2374,19 +2153,14 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.videoTimeNotReady(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.videoTimeNotReady(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2401,21 +2175,17 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -2426,113 +2196,60 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * Callbacks that the player must fire. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Fire this callback periodically as ad playback occurs. */ - abstract fun onAdProgress( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - ) + abstract fun onAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) /** Fire this callback when video playback stalls waiting for data. */ - abstract fun onBuffering( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onBuffering(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when all content has finished playing. */ - abstract fun onContentComplete( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback - ) + abstract fun onContentComplete(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) /** Fire this callback when the video finishes playing. */ - abstract fun onEnded( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onEnded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video has encountered an error. */ - abstract fun onError( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onError(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video is ready to begin playback. */ - abstract fun onLoaded( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onLoaded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video is paused. */ - abstract fun onPause( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onPause(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the player begins playing a video. */ - abstract fun onPlay( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onPlay(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the video is unpaused. */ - abstract fun onResume( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ) + abstract fun onResume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) /** Fire this callback when the playback volume changes. */ - abstract fun onVolumeChanged( - pigeon_instance: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - percentage: Long - ) + abstract fun onVolumeChanged(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, percentage: Long) companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers( - binaryMessenger: BinaryMessenger, - api: PigeonApiVideoAdPlayerCallback? - ) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayerCallback?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val videoProgressUpdateArg = - args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val videoProgressUpdateArg = args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) @@ -2547,20 +2264,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onBuffering(pigeon_instanceArg, adMediaInfoArg) @@ -2575,18 +2284,11 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", 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.player.VideoAdPlayer.VideoAdPlayerCallback + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback var wrapped: List try { api.onContentComplete(pigeon_instanceArg) @@ -2601,20 +2303,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onEnded(pigeon_instanceArg, adMediaInfoArg) @@ -2629,20 +2323,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onError(pigeon_instanceArg, adMediaInfoArg) @@ -2657,20 +2343,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onLoaded(pigeon_instanceArg, adMediaInfoArg) @@ -2685,20 +2363,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onPause(pigeon_instanceArg, adMediaInfoArg) @@ -2713,20 +2383,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onPlay(pigeon_instanceArg, adMediaInfoArg) @@ -2741,20 +2403,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo var wrapped: List try { api.onResume(pigeon_instanceArg, adMediaInfoArg) @@ -2769,20 +2423,12 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = - args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { @@ -2801,22 +2447,17 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: - com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = - "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -2827,34 +2468,29 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * The minimal information required to play an ad. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun url( - pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - ): String + abstract fun url(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo): String @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val urlArg = url(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -2869,23 +2505,23 @@ abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** * An ad may be part of a pod of ads. * - * See - * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. + * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** * The position of the ad within the pod. * - * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the ad is not part of a - * pod, this will return 1. + * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the + * ad is not part of a pod, this will return 1. */ abstract fun adPosition(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long @@ -2894,9 +2530,7 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) * * For unknown duration, -1 is returned. */ - abstract fun maxDuration( - pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo - ): Double + abstract fun maxDuration(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double /** Client side and DAI VOD: Returns the index of the ad pod. */ abstract fun podIndex(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long @@ -2904,9 +2538,9 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) /** * The content time offset at which the current ad pod was scheduled. * - * For preroll pod, 0 is returned. For midrolls, the scheduled time is returned in seconds. For - * postroll, -1 is returned. Defaults to 0 if this ad is not part of a pod, or the pod is not part - * of an ad playlist. + * For preroll pod, 0 is returned. For midrolls, the scheduled time is + * returned in seconds. For postroll, -1 is returned. Defaults to 0 if this + * ad is not part of a pod, or the pod is not part of an ad playlist. */ abstract fun timeOffset(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double @@ -2917,17 +2551,14 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) abstract fun isBumper(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Boolean @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val adPositionArg = adPosition(pigeon_instanceArg) val maxDurationArg = maxDuration(pigeon_instanceArg) val podIndexArg = podIndex(pigeon_instanceArg) @@ -2938,30 +2569,23 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send( - listOf( - pigeon_identifierArg, - adPositionArg, - maxDurationArg, - podIndexArg, - timeOffsetArg, - totalAdsArg, - isBumperArg)) { - 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))) - } + channel.send(listOf(pigeon_identifierArg, adPositionArg, maxDurationArg, podIndexArg, timeOffsetArg, totalAdsArg, isBumperArg)) { + 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))) + } + } } + } /** - * FrameLayout is designed to block out an area on the screen to display a single item. + * FrameLayout is designed to block out an area on the screen to display a + * single item. * * See https://developer.android.com/reference/android/widget/FrameLayout. */ @@ -2974,19 +2598,14 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -3001,17 +2620,14 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.widget.FrameLayout, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.widget.FrameLayout, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance" @@ -3025,15 +2641,17 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiViewGroup] used to access callback methods */ - fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup { + /**An implementation of [PigeonApiViewGroup] used to access callback methods */ + fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup + { return pigeonRegistrar.getPigeonApiViewGroup() } + } /** * A special view that can contain other views (called children.) @@ -3049,11 +2667,7 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3076,17 +2690,14 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.view.ViewGroup, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.ViewGroup, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance" @@ -3100,15 +2711,17 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView { + /**An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView + { return pigeonRegistrar.getPigeonApiView() } + } /** * Displays a video file. @@ -3134,19 +2747,14 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoView?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -3158,11 +2766,7 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3182,11 +2786,7 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3207,25 +2807,19 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.widget.VideoView, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.widget.VideoView, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException( - "Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") + throw IllegalStateException("Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") } /** Callback to be invoked when the media source is ready for playback. */ - fun onPrepared( - pigeon_instanceArg: android.widget.VideoView, - playerArg: android.media.MediaPlayer, - callback: (Result) -> Unit - ) { + fun onPrepared(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared" @@ -3239,16 +2833,13 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** Callback to be invoked when playback of a media source has completed. */ - fun onCompletion( - pigeon_instanceArg: android.widget.VideoView, - playerArg: android.media.MediaPlayer, - callback: (Result) -> Unit - ) { + fun onCompletion(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion" @@ -3262,18 +2853,16 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - /** Callback to be invoked when there has been an error during an asynchronous operation. */ - fun onError( - pigeon_instanceArg: android.widget.VideoView, - playerArg: android.media.MediaPlayer, - whatArg: Long, - extraArg: Long, - callback: (Result) -> Unit - ) { + /** + * Callback to be invoked when there has been an error during an asynchronous + * operation. + */ + fun onError(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, whatArg: Long, extraArg: Long, callback: (Result) -> Unit) +{ val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onError" @@ -3287,15 +2876,17 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /** An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView { + /**An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView + { return pigeonRegistrar.getPigeonApiView() } + } /** * This class represents the basic building block for user interface components. @@ -3305,14 +2896,14 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) @Suppress("UNCHECKED_CAST") abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { + /**Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance" @@ -3326,12 +2917,14 @@ abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } /** - * MediaPlayer class can be used to control playback of audio/video files and streams. + * MediaPlayer class can be used to control playback of audio/video files and + * streams. * * See https://developer.android.com/reference/android/media/MediaPlayer. */ @@ -3357,11 +2950,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3379,11 +2968,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3403,11 +2988,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3426,11 +3007,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, - "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", - codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3449,9 +3026,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = - BasicMessageChannel( - binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", codec) + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -3473,17 +3048,14 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /** Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance( - pigeon_instanceArg: android.media.MediaPlayer, - callback: (Result) -> Unit - ) { + /**Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.media.MediaPlayer, callback: (Result) -> Unit) +{ if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = - pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance" @@ -3497,7 +3069,8 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt index 6689578f7e3..a15e9ec4cb0 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt @@ -4,9 +4,15 @@ package dev.flutter.packages.interactive_media_ads +import android.content.Context +import android.view.View import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.activity.ActivityAware import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding +import io.flutter.plugin.common.StandardMessageCodec +import io.flutter.plugin.platform.PlatformView +import io.flutter.plugin.platform.PlatformViewFactory + /** InteractiveMediaAdsPlugin */ class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { @@ -15,9 +21,12 @@ class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { pluginBinding = flutterPluginBinding + registrar = ProxyApiRegistrar(pluginBinding.binaryMessenger, context = pluginBinding.applicationContext) registrar.setUp() + + flutterPluginBinding.platformViewRegistry.registerViewFactory("interactive_media_ads.packages.flutter.dev/view",FlutterViewFactory(registrar.instanceManager)) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { @@ -41,3 +50,27 @@ class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { registrar.context = pluginBinding.applicationContext } } + +internal class FlutterViewFactory(private val instanceManager: PigeonInstanceManager) : + PlatformViewFactory(StandardMessageCodec.INSTANCE) { + + override fun create(context: Context, viewId: Int, args: Any?): PlatformView { + val identifier = args as Int? + ?: throw IllegalStateException("An identifier is required to retrieve a View instance.") + val instance: Any? = instanceManager.getInstance(identifier.toLong()) + if (instance is PlatformView) { + return instance + } else if (instance is View) { + return object : PlatformView { + override fun getView(): View { + return instance + } + + override fun dispose() {} + } + } + throw IllegalStateException( + "Unable to find a PlatformView or View instance: $args, $instance" + ) + } +} diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index fd385e0a60c..a92d27954a4 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -2,9 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_driver/driver_extension.dart'; +import 'package:interactive_media_ads/interactive_media_ads.dart'; +import 'package:video_player/video_player.dart'; +import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart'; +import 'package:interactive_media_ads/src/android/android_interactive_media_ads.dart'; /// Entry point for integration tests that require espresso. @pragma('vm:entry-point') @@ -14,29 +21,135 @@ void integrationTestMain() { } void main() { - runApp(const MyApp()); + InteractiveMediaAdsPlatform.instance = AndroidInteractiveMediaAds(); + runApp(MaterialApp(home: AdExampleWidget())); } -/// Home widget of the example app. -class MyApp extends StatefulWidget { - /// Constructs [MyApp]. - const MyApp({super.key}); - +class AdExampleWidget extends StatefulWidget { @override - State createState() => _MyAppState(); + AdExampleWidgetState createState() => AdExampleWidgetState(); } -class _MyAppState extends State { +class AdExampleWidgetState extends State { + late final AdsLoader adsLoader; + AdsManager? adsManager; + bool shouldShowContentVideo = false; + + late final VideoPlayerController contentVideoController; + + late final AdDisplayContainer adDisplayContainer = AdDisplayContainer( + onContainerAdded: (AdDisplayContainer container) { + requestAds(container); + }, + ); + + @override + void initState() { + super.initState(); + contentVideoController = VideoPlayerController.networkUrl(Uri.parse( + 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4')) + ..addListener(() { + if (contentVideoController.value.position == + contentVideoController.value.duration) { + adsLoader.contentComplete(); + } + }) + ..initialize().then((_) { + // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed. + setState(() {}); + }); + } + + Future resumeContent() { + setState(() { + shouldShowContentVideo = true; + }); + return contentVideoController.play(); + } + + Future pauseContent() { + setState(() { + shouldShowContentVideo = false; + }); + return contentVideoController.pause(); + } + + Future requestAds(AdDisplayContainer container) { + adsLoader = AdsLoader( + container: container, + onAdsLoaded: (OnAdsLoadedData data) { + final AdsManager manager = data.manager; + adsManager = data.manager; + + manager.setAdsManagerDelegate(AdsManagerDelegate( + onAdEvent: (AdEvent event) { + switch (event.type) { + case AdEventType.loaded: + manager.start(); + case AdEventType.contentPauseRequested: + pauseContent(); + case AdEventType.contentResumeRequested: + resumeContent(); + case AdEventType.allAdsCompleted: + manager.destroy(); + adsManager = null; + case AdEventType.clicked: + case AdEventType.complete: + } + }, + onAdErrorEvent: (AdErrorEvent event) { + print('ERROR:'); + print(event.error.message); + //manager.discardAdBreak(); + resumeContent(); + }, + )); + + manager.init(); + }, + onAdsLoadError: (AdsLoadErrorData data) { + print('Error 2:'); + print(data.error.message); + resumeContent(); + }, + ); + + return adsLoader.requestAds( + AdsRequest( + adTagUrl: + 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=', + ), + ); + } + + @override + void dispose() { + super.dispose(); + contentVideoController.dispose(); + adsManager?.destroy(); + } + @override Widget build(BuildContext context) { - debugPrint('THEAPP'); - return MaterialApp( - home: Scaffold( - appBar: AppBar( - title: const Text('Plugin example app'), - ), - body: Center( - child: Text('Running on: $defaultTargetPlatform'), + return Scaffold( + body: Center( + child: SizedBox( + width: 300, + height: 300, + child: Stack( + children: [ + if (contentVideoController.value.isInitialized && + shouldShowContentVideo) + AspectRatio( + aspectRatio: contentVideoController.value.aspectRatio, + child: VideoPlayer(contentVideoController), + ), + // The display container must be on screen before any Ads can be + // loaded and can't be removed between ads. This handles clicks for + // ads. + adDisplayContainer, + ], + ), ), ), ); diff --git a/packages/interactive_media_ads/example/pubspec.yaml b/packages/interactive_media_ads/example/pubspec.yaml index fde3e7a8b2e..16175a864b6 100644 --- a/packages/interactive_media_ads/example/pubspec.yaml +++ b/packages/interactive_media_ads/example/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: sdk: flutter interactive_media_ads: path: ../ + video_player: ^2.8.6 dev_dependencies: espresso: ^0.2.0 diff --git a/packages/interactive_media_ads/lib/interactive_media_ads.dart b/packages/interactive_media_ads/lib/interactive_media_ads.dart index 185d304cf5b..6c94b12b351 100644 --- a/packages/interactive_media_ads/lib/interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/interactive_media_ads.dart @@ -8,3 +8,4 @@ export 'src/ads_manager_delegate.dart'; export 'src/platform_interface/ad_error.dart'; export 'src/platform_interface/ad_event.dart'; export 'src/platform_interface/ads_request.dart'; +export 'src/platform_interface/platform_ads_loader.dart' show AdsLoadErrorData; diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index c36bc851516..40207133dd8 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -14,7 +14,8 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { WeakReference(this); videoView = _setUpVideoView(weakThis); frameLayout.addView(videoView); - _setUpAdDisplayContainer(weakThis).then((_) { + _setUpAdDisplayContainer(weakThis).then((AdDisplayContainer container) { + adDisplayContainer = container; params.onContainerAdded(this); }); } diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart index efa0d0fb0ea..2e8a36eaa4d 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import '../../interactive_media_ads.dart'; import '../platform_interface/platform_ads_loader.dart'; import 'android_ad_display_container.dart'; @@ -78,15 +80,22 @@ final class AndroidAdsLoader extends PlatformAdsLoader { } @override - Future contentComplete() async {} + Future contentComplete() async { + for (final interactive_media_ads.VideoAdPlayerCallback callback + in (params.container as AndroidAdDisplayContainer) + .videoAdPlayerCallbacks) { + unawaited(callback.onContentComplete()); + } + } @override Future requestAds(AdsRequest request) async { final interactive_media_ads.AdsLoader adsLoader = await adsLoaderFuture; - final interactive_media_ads.AdsRequest request = + final interactive_media_ads.AdsRequest androidRequest = await sdkFactory.createAdsRequest(); + unawaited(androidRequest.setAdTagUrl(request.adTagUrl)); - await adsLoader.requestAds(request); + await adsLoader.requestAds(androidRequest); } } 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 93d634c6911..c02ed439841 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 @@ -8,8 +8,7 @@ import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' - show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -20,8 +19,7 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse( - {Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -30,7 +28,6 @@ List wrapResponse( } return [error.code, error.message, error.details]; } - /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -116,8 +113,7 @@ class PigeonInstanceManager { final Expando _identifiers = Expando(); final Map> _weakInstances = >{}; - final Map _strongInstances = - {}; + final Map _strongInstances = {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -135,59 +131,33 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInstanceManagerApi.setUpMessageHandlers( - instanceManager: instanceManager); - BaseDisplayContainer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdDisplayContainer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsLoader.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsManagerLoadedEvent.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsLoadedListener.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdErrorListener.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdErrorEvent.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdError.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsRequest.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - ContentProgressProvider.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdsManager.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - BaseManager.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdEventListener.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdEvent.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - ImaSdkFactory.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - ImaSdkSettings.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoAdPlayer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoProgressUpdate.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoAdPlayerCallback.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdMediaInfo.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - AdPodInfo.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - FrameLayout.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - ViewGroup.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); - VideoView.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); + _PigeonInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); + BaseDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsLoader.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsManagerLoadedEvent.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsLoadedListener.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdErrorListener.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdErrorEvent.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdError.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + ContentProgressProvider.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdsManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + BaseManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdEventListener.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdEvent.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + ImaSdkFactory.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + ImaSdkSettings.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoAdPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoProgressUpdate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoAdPlayerCallback.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdMediaInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + AdPodInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + FrameLayout.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + ViewGroup.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + VideoView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); View.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - MediaPlayer.pigeon_setUpMessageHandlers( - pigeon_instanceManager: instanceManager); + MediaPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); return instanceManager; } @@ -251,19 +221,15 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference( - int identifier) { - final PigeonProxyApiBaseClass? weakInstance = - _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference(int identifier) { + final PigeonProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonProxyApiBaseClass? strongInstance = - _strongInstances[identifier]; + final PigeonProxyApiBaseClass? strongInstance = _strongInstances[identifier]; if (strongInstance != null) { final PigeonProxyApiBaseClass copy = strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = - WeakReference(copy); + _weakInstances[identifier] = WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -287,20 +253,17 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance( - PigeonProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance(PigeonProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier( - PigeonProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier(PigeonProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = - WeakReference(instance); + _weakInstances[identifier] = WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonProxyApiBaseClass copy = instance.pigeon_copy(); @@ -331,9 +294,9 @@ class _PigeonInstanceManagerApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - + static const MessageCodec pigeonChannelCodec = - StandardMessageCodec(); + StandardMessageCodec(); static void setUpMessageHandlers({ BinaryMessenger? binaryMessenger, @@ -409,39 +372,37 @@ class _PigeonInstanceManagerApi { } } } - class _PigeonProxyApiBaseCodec extends StandardMessageCodec { - const _PigeonProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } - - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } + const _PigeonProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } } + /// The types of error that can be encountered. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. enum AdErrorCode { /// Ads player was not provided. adsPlayerWasNotProvided, - /// An unexpected error occurred and the cause is not known. unknownError, } @@ -452,10 +413,8 @@ enum AdErrorCode { enum AdErrorType { /// Indicates that the error was encountered when the ad was being loaded. load, - /// Indicates that the error was encountered after the ad loaded, during ad play. play, - /// The error is not recognized by this wrapper. unknown, } @@ -466,27 +425,20 @@ enum AdErrorType { enum AdEventType { /// Fired when an ad break is ready from VMAP or ad rule ads. adBreakReady, - /// Fired when the ads manager is done playing all the valid ads in the ads /// response, or when the response doesn't return any valid ads. allAdsCompleted, - /// Fired when an ad completes playing. completed, - /// Fired when content should be paused. contentPauseRequested, - /// Fired when content should be resumed. contentResumeRequested, - /// Fired when the VAST response has been received. loaded, - /// The event type is not recognized by this wrapper. unknown, } - /// A base class for more specialized container interfaces. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. @@ -4574,3 +4526,4 @@ class MediaPlayer extends PigeonProxyApiBaseClass { ); } } + From 4320f506ddf59d79cecd99c771bc6f08af87a030 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 30 Apr 2024 19:48:41 -0400 Subject: [PATCH 09/76] move interfaces to bottom and format --- .../GeneratedInteractiveMediaAdsLibrary.kt | 2833 +++++++------ .../InteractiveMediaAdsPlugin.kt | 16 +- .../src/android/interactive_media_ads.g.dart | 3513 +++++++++-------- .../interactive_media_ads_android.dart | 270 +- 4 files changed, 3553 insertions(+), 3079 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index d7896d67254..f7116d8aa06 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -17,33 +17,31 @@ private fun wrapResult(result: Any?): List { private fun wrapError(exception: Throwable): List { if (exception is FlutterError) { - return listOf( - exception.code, - exception.message, - exception.details - ) + return listOf(exception.code, exception.message, exception.details) } else { return listOf( - exception.javaClass.simpleName, - exception.toString(), - "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception) - ) + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) } } private fun createConnectionError(channelName: String): FlutterError { - return FlutterError("channel-error", "Unable to establish connection on channel: '$channelName'.", "")} + return FlutterError( + "channel-error", "Unable to establish connection on channel: '$channelName'.", "") +} /** * Error class for passing custom error details to Flutter via a thrown PlatformException. + * * @property code The error code. * @property message The error message. * @property details The error details. Must be a datatype supported by the api codec. */ -class FlutterError ( - val code: String, - override val message: String? = null, - val details: Any? = null +class FlutterError( + val code: String, + override val message: String? = null, + val details: Any? = null ) : Throwable() /** * Maintains instances used to communicate with the corresponding objects in Dart. @@ -57,12 +55,12 @@ class FlutterError ( * reference is removed with [remove] and the weak reference is deallocated, the * `finalizationListener` is made with the instance's identifier. However, if the strong reference * is removed and then the identifier is retrieved with the intention to pass the identifier to Dart - * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the - * instance is recreated. The strong reference will then need to be removed manually again. + * (e.g. calling [getIdentifierForStrongReference]), the strong reference to the instance is + * recreated. The strong reference will then need to be removed manually again. */ @Suppress("UNCHECKED_CAST", "MemberVisibilityCanBePrivate", "unused") class PigeonInstanceManager(private val finalizationListener: PigeonFinalizationListener) { - /** Interface for listening when a weak reference of an instance is removed from the manager. */ + /** Interface for listening when a weak reference of an instance is removed from the manager. */ interface PigeonFinalizationListener { fun onFinalize(identifier: Long) } @@ -88,10 +86,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization } init { - handler.postDelayed( - { releaseAllFinalizedInstances() }, - clearFinalizedWeakReferencesInterval - ) + handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) } companion object { @@ -105,7 +100,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Instantiate a new manager. * - * * When the manager is no longer needed, [stopFinalizationListener] must be called. * * @param finalizationListener the listener for garbage collected weak references. @@ -123,8 +117,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier paired to an instance. * @param the expected return type. * @return the removed instance if the manager contains the given identifier, otherwise `null` if - * the manager doesn't contain the value. - */ + * the manager doesn't contain the value. + */ fun remove(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() return strongInstances.remove(identifier) as T? @@ -133,19 +127,17 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Retrieves the identifier paired with an instance. * - * * If the manager contains a strong reference to `instance`, it will return the identifier * associated with `instance`. If the manager contains only a weak reference to `instance`, a new * strong reference to `instance` will be added and will need to be removed again with [remove]. * - * * If this method returns a nonnull identifier, this method also expects the Dart * `PigeonInstanceManager` to have, or recreate, a weak reference to the Dart instance the * identifier is associated with. * * @param instance an instance that may be stored in the manager. * @return the identifier associated with `instance` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. + * `null` if the manager doesn't contain the value. */ fun getIdentifierForStrongReference(instance: Any?): Long? { logWarningIfFinalizationListenerHasStopped() @@ -159,14 +151,13 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Adds a new instance that was instantiated from Dart. * - * - * The same instance can be added multiple times, but each identifier must be unique. This - * allows two objects that are equivalent (e.g. the `equals` method returns true and their - * hashcodes are equal) to both be added. + * The same instance can be added multiple times, but each identifier must be unique. This allows + * two objects that are equivalent (e.g. the `equals` method returns true and their hashcodes are + * equal) to both be added. * * @param instance the instance to be stored. * @param identifier the identifier to be paired with instance. This value must be >= 0 and - * unique. + * unique. */ fun addDartCreatedInstance(instance: Any, identifier: Long) { logWarningIfFinalizationListenerHasStopped() @@ -181,7 +172,9 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization */ fun addHostCreatedInstance(instance: Any): Long { logWarningIfFinalizationListenerHasStopped() - require(!containsInstance(instance)) { "Instance of ${instance.javaClass} has already been added." } + require(!containsInstance(instance)) { + "Instance of ${instance.javaClass} has already been added." + } val identifier = nextIdentifier++ addInstance(instance, identifier) return identifier @@ -193,8 +186,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * @param identifier the identifier associated with an instance. * @param the expected return type. * @return the instance associated with `identifier` if the manager contains the value, otherwise - * `null` if the manager doesn't contain the value. - */ + * `null` if the manager doesn't contain the value. + */ fun getInstance(identifier: Long): T? { logWarningIfFinalizationListenerHasStopped() val instance = weakInstances[identifier] as java.lang.ref.WeakReference? @@ -216,7 +209,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Stop the periodic run of the [PigeonFinalizationListener] for instances that have been garbage * collected. * - * * The InstanceManager can continue to be used, but the [PigeonFinalizationListener] will no * longer be called and methods will log a warning. */ @@ -228,7 +220,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization /** * Removes all of the instances from this manager. * - * * The manager will be empty after this call returns. */ fun clear() { @@ -242,7 +233,6 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization * Whether the [PigeonFinalizationListener] is still being called for instances that are garbage * collected. * - * * See [stopFinalizationListener]. */ fun hasFinalizationListenerStopped(): Boolean { @@ -254,7 +244,8 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization return } var reference: java.lang.ref.WeakReference? - while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != null) { + while ((referenceQueue.poll() as java.lang.ref.WeakReference?).also { reference = it } != + null) { val identifier = weakReferencesToIdentifiers.remove(reference) if (identifier != null) { weakInstances.remove(identifier) @@ -262,10 +253,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization finalizationListener.onFinalize(identifier) } } - handler.postDelayed( - { releaseAllFinalizedInstances() }, - clearFinalizedWeakReferencesInterval - ) + handler.postDelayed({ releaseAllFinalizedInstances() }, clearFinalizedWeakReferencesInterval) } private fun addInstance(instance: Any, identifier: Long) { @@ -283,55 +271,63 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization private fun logWarningIfFinalizationListenerHasStopped() { if (hasFinalizationListenerStopped()) { Log.w( - tag, - "The manager was used after calls to the PigeonFinalizationListener has been stopped." - ) + tag, + "The manager was used after calls to the PigeonFinalizationListener has been stopped.") } } } -/** -* Generated API for managing the Dart and native `PigeonInstanceManager`s. -*/ +/** Generated API for managing the Dart and native `PigeonInstanceManager`s. */ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { companion object { /** The codec used by PigeonInstanceManagerApi. */ - private val codec: MessageCodec by lazy { - StandardMessageCodec() - } + private val codec: MessageCodec by lazy { StandardMessageCodec() } /** - * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the - * `binaryMessenger`. - */ - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, instanceManager: PigeonInstanceManager?) { + * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the + * `binaryMessenger`. + */ + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + instanceManager: PigeonInstanceManager? + ) { run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference", + codec) if (instanceManager != null) { channel.setMessageHandler { message, reply -> val identifier = message as Number - val wrapped: List = try { - instanceManager.remove(identifier.toLong()) - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = + try { + instanceManager.remove(identifier.toLong()) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { channel.setMessageHandler(null) - } + } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear", + codec) if (instanceManager != null) { channel.setMessageHandler { _, reply -> - val wrapped: List = try { - instanceManager.clear() - listOf(null) - } catch (exception: Throwable) { - wrapError(exception) - } + val wrapped: List = + try { + instanceManager.clear() + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -342,7 +338,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { - val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(identifier) { if (it is List<*>) { @@ -359,8 +356,8 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } /** - * Provides implementations for each ProxyApi implementation and provides access to resources - * needed by any implementation. + * Provides implementations for each ProxyApi implementation and provides access to resources needed + * by any implementation. */ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val instanceManager: PigeonInstanceManager @@ -368,7 +365,7 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { val codec: StandardMessageCodec get() { if (_codec == null) { - _codec = PigeonProxyApiBaseCodec(this) + _codec = PigeonProxyApiBaseCodec(this) } return _codec!! } @@ -376,19 +373,18 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { init { val api = PigeonInstanceManagerApi(binaryMessenger) instanceManager = - PigeonInstanceManager.create( - object : PigeonInstanceManager.PigeonFinalizationListener { - override fun onFinalize(identifier: Long) { - api.removeStrongReference(identifier) { - if (it.isFailure) { - Log.e( - "PigeonProxyApiRegistrar", - "Failed to remove Dart strong reference with identifier: $identifier" - ) + PigeonInstanceManager.create( + object : PigeonInstanceManager.PigeonFinalizationListener { + override fun onFinalize(identifier: Long) { + api.removeStrongReference(identifier) { + if (it.isFailure) { + Log.e( + "PigeonProxyApiRegistrar", + "Failed to remove Dart strong reference with identifier: $identifier") + } + } } - } - } - }) + }) } /** @@ -404,8 +400,8 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer /** - * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of - * `AdsLoader` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of `AdsLoader` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdsLoader(): PigeonApiAdsLoader @@ -416,32 +412,20 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiAdsManagerLoadedEvent(): PigeonApiAdsManagerLoadedEvent /** - * An implementation of [PigeonApiAdsLoadedListener] used to add a new Dart instance of - * `AdsLoadedListener` to the Dart `InstanceManager`. - */ - abstract fun getPigeonApiAdsLoadedListener(): PigeonApiAdsLoadedListener - - /** - * An implementation of [PigeonApiAdErrorListener] used to add a new Dart instance of - * `AdErrorListener` to the Dart `InstanceManager`. - */ - abstract fun getPigeonApiAdErrorListener(): PigeonApiAdErrorListener - - /** - * An implementation of [PigeonApiAdErrorEvent] used to add a new Dart instance of - * `AdErrorEvent` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdErrorEvent] used to add a new Dart instance of `AdErrorEvent` + * to the Dart `InstanceManager`. */ abstract fun getPigeonApiAdErrorEvent(): PigeonApiAdErrorEvent /** - * An implementation of [PigeonApiAdError] used to add a new Dart instance of - * `AdError` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdError] used to add a new Dart instance of `AdError` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdError(): PigeonApiAdError /** - * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of - * `AdsRequest` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsRequest] used to add a new Dart instance of `AdsRequest` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsRequest(): PigeonApiAdsRequest @@ -452,26 +436,20 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider /** - * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of - * `AdsManager` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdsManager(): PigeonApiAdsManager /** - * An implementation of [PigeonApiBaseManager] used to add a new Dart instance of - * `BaseManager` to the Dart `InstanceManager`. + * An implementation of [PigeonApiBaseManager] used to add a new Dart instance of `BaseManager` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiBaseManager(): PigeonApiBaseManager /** - * An implementation of [PigeonApiAdEventListener] used to add a new Dart instance of - * `AdEventListener` to the Dart `InstanceManager`. - */ - abstract fun getPigeonApiAdEventListener(): PigeonApiAdEventListener - - /** - * An implementation of [PigeonApiAdEvent] used to add a new Dart instance of - * `AdEvent` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdEvent] used to add a new Dart instance of `AdEvent` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdEvent(): PigeonApiAdEvent @@ -487,12 +465,6 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { */ abstract fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings - /** - * An implementation of [PigeonApiVideoAdPlayer] used to add a new Dart instance of - * `VideoAdPlayer` to the Dart `InstanceManager`. - */ - abstract fun getPigeonApiVideoAdPlayer(): PigeonApiVideoAdPlayer - /** * An implementation of [PigeonApiVideoProgressUpdate] used to add a new Dart instance of * `VideoProgressUpdate` to the Dart `InstanceManager`. @@ -500,91 +472,121 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { abstract fun getPigeonApiVideoProgressUpdate(): PigeonApiVideoProgressUpdate /** - * An implementation of [PigeonApiVideoAdPlayerCallback] used to add a new Dart instance of - * `VideoAdPlayerCallback` to the Dart `InstanceManager`. - */ - abstract fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback - - /** - * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of - * `AdMediaInfo` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdMediaInfo] used to add a new Dart instance of `AdMediaInfo` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiAdMediaInfo(): PigeonApiAdMediaInfo /** - * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of - * `AdPodInfo` to the Dart `InstanceManager`. + * An implementation of [PigeonApiAdPodInfo] used to add a new Dart instance of `AdPodInfo` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiAdPodInfo(): PigeonApiAdPodInfo /** - * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of - * `FrameLayout` to the Dart `InstanceManager`. + * An implementation of [PigeonApiFrameLayout] used to add a new Dart instance of `FrameLayout` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiFrameLayout(): PigeonApiFrameLayout /** - * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of - * `ViewGroup` to the Dart `InstanceManager`. + * An implementation of [PigeonApiViewGroup] used to add a new Dart instance of `ViewGroup` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiViewGroup(): PigeonApiViewGroup /** - * An implementation of [PigeonApiVideoView] used to add a new Dart instance of - * `VideoView` to the Dart `InstanceManager`. + * An implementation of [PigeonApiVideoView] used to add a new Dart instance of `VideoView` to the + * Dart `InstanceManager`. */ abstract fun getPigeonApiVideoView(): PigeonApiVideoView /** - * An implementation of [PigeonApiView] used to add a new Dart instance of - * `View` to the Dart `InstanceManager`. + * An implementation of [PigeonApiView] used to add a new Dart instance of `View` to the Dart + * `InstanceManager`. */ abstract fun getPigeonApiView(): PigeonApiView /** - * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of - * `MediaPlayer` to the Dart `InstanceManager`. + * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of `MediaPlayer` to + * the Dart `InstanceManager`. */ abstract fun getPigeonApiMediaPlayer(): PigeonApiMediaPlayer + /** + * An implementation of [PigeonApiVideoAdPlayerCallback] used to add a new Dart instance of + * `VideoAdPlayerCallback` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiVideoAdPlayerCallback(): PigeonApiVideoAdPlayerCallback + + /** + * An implementation of [PigeonApiVideoAdPlayer] used to add a new Dart instance of + * `VideoAdPlayer` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiVideoAdPlayer(): PigeonApiVideoAdPlayer + + /** + * An implementation of [PigeonApiAdsLoadedListener] used to add a new Dart instance of + * `AdsLoadedListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdsLoadedListener(): PigeonApiAdsLoadedListener + + /** + * An implementation of [PigeonApiAdErrorListener] used to add a new Dart instance of + * `AdErrorListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdErrorListener(): PigeonApiAdErrorListener + + /** + * An implementation of [PigeonApiAdEventListener] used to add a new Dart instance of + * `AdEventListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiAdEventListener(): PigeonApiAdEventListener + fun setUp() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, instanceManager) PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsLoader()) - PigeonApiAdsLoadedListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsLoadedListener()) - PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdErrorListener()) PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsRequest()) PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsManager()) PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, getPigeonApiBaseManager()) - PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdEventListener()) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory()) - PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayer()) - PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoProgressUpdate()) - PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayerCallback()) + PigeonApiVideoProgressUpdate.setUpMessageHandlers( + binaryMessenger, getPigeonApiVideoProgressUpdate()) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, getPigeonApiFrameLayout()) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, getPigeonApiViewGroup()) PigeonApiVideoView.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoView()) PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiMediaPlayer()) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers( + binaryMessenger, getPigeonApiVideoAdPlayerCallback()) + PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, getPigeonApiVideoAdPlayer()) + PigeonApiAdsLoadedListener.setUpMessageHandlers( + binaryMessenger, getPigeonApiAdsLoadedListener()) + PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdErrorListener()) + PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdEventListener()) } + fun tearDown() { PigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null) PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, null) - PigeonApiAdsLoadedListener.setUpMessageHandlers(binaryMessenger, null) - PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, null) PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, null) PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, null) PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, null) - PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, null) PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, null) - PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, null) PigeonApiVideoProgressUpdate.setUpMessageHandlers(binaryMessenger, null) - PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, null) PigeonApiFrameLayout.setUpMessageHandlers(binaryMessenger, null) PigeonApiViewGroup.setUpMessageHandlers(binaryMessenger, null) PigeonApiVideoView.setUpMessageHandlers(binaryMessenger, null) PigeonApiMediaPlayer.setUpMessageHandlers(binaryMessenger, null) + PigeonApiVideoAdPlayerCallback.setUpMessageHandlers(binaryMessenger, null) + PigeonApiVideoAdPlayer.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdsLoadedListener.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, null) + PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, null) } } -private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : StandardMessageCodec() { + +private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : + StandardMessageCodec() { override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { return when (type) { 128.toByte() -> { @@ -597,83 +599,58 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { if (value is com.google.ads.interactivemedia.v3.api.AdDisplayContainer) { - registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { - registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { - registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent) { - registrar.getPigeonApiAdsManagerLoadedEvent().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) { - registrar.getPigeonApiAdsLoadedListener().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) { - Log.d("ERRORERROR", "${value is com.google.ads.interactivemedia.v3.api.AdsManager}") - registrar.getPigeonApiAdErrorListener().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent) { - registrar.getPigeonApiAdErrorEvent().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdError) { - registrar.getPigeonApiAdError().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { - registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) { - registrar.getPigeonApiContentProgressProvider().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { - registrar.getPigeonApiAdsManager().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.BaseManager) { - registrar.getPigeonApiBaseManager().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) { - registrar.getPigeonApiAdEventListener().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdEvent) { - registrar.getPigeonApiAdEvent().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { - registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkSettings) { - registrar.getPigeonApiImaSdkSettings().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { - registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { - registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { - registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { - registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) { } - } - else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { - registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) { } - } - else if (value is android.widget.FrameLayout) { - registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) { } - } - else if (value is android.view.ViewGroup) { - registrar.getPigeonApiViewGroup().pigeon_newInstance(value) { } - } - else if (value is android.widget.VideoView) { - registrar.getPigeonApiVideoView().pigeon_newInstance(value) { } - } - else if (value is android.view.View) { - registrar.getPigeonApiView().pigeon_newInstance(value) { } - } - else if (value is android.media.MediaPlayer) { - registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) { } + registrar.getPigeonApiAdDisplayContainer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.BaseDisplayContainer) { + registrar.getPigeonApiBaseDisplayContainer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader) { + registrar.getPigeonApiAdsLoader().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent) { + registrar.getPigeonApiAdsManagerLoadedEvent().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent) { + registrar.getPigeonApiAdErrorEvent().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdError) { + registrar.getPigeonApiAdError().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsRequest) { + registrar.getPigeonApiAdsRequest().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) { + registrar.getPigeonApiContentProgressProvider().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsManager) { + registrar.getPigeonApiAdsManager().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.BaseManager) { + registrar.getPigeonApiBaseManager().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdEvent) { + registrar.getPigeonApiAdEvent().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkFactory) { + registrar.getPigeonApiImaSdkFactory().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.ImaSdkSettings) { + registrar.getPigeonApiImaSdkSettings().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) { + registrar.getPigeonApiVideoProgressUpdate().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) { + registrar.getPigeonApiAdMediaInfo().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdPodInfo) { + registrar.getPigeonApiAdPodInfo().pigeon_newInstance(value) {} + } else if (value is android.widget.FrameLayout) { + registrar.getPigeonApiFrameLayout().pigeon_newInstance(value) {} + } else if (value is android.view.ViewGroup) { + registrar.getPigeonApiViewGroup().pigeon_newInstance(value) {} + } else if (value is android.widget.VideoView) { + registrar.getPigeonApiVideoView().pigeon_newInstance(value) {} + } else if (value is android.view.View) { + registrar.getPigeonApiView().pigeon_newInstance(value) {} + } else if (value is android.media.MediaPlayer) { + registrar.getPigeonApiMediaPlayer().pigeon_newInstance(value) {} + } else if (value + is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) { + registrar.getPigeonApiVideoAdPlayerCallback().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer) { + registrar.getPigeonApiVideoAdPlayer().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) { + registrar.getPigeonApiAdsLoadedListener().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) { + registrar.getPigeonApiAdErrorListener().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) { + registrar.getPigeonApiAdEventListener().pigeon_newInstance(value) {} } when { @@ -689,7 +666,8 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : /** * The types of error that can be encountered. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. */ enum class AdErrorCode(val raw: Int) { /** Ads player was not provided. */ @@ -707,7 +685,8 @@ enum class AdErrorCode(val raw: Int) { /** * Specifies when the error was encountered, during either ad loading or playback. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. */ enum class AdErrorType(val raw: Int) { /** Indicates that the error was encountered when the ad was being loaded. */ @@ -727,14 +706,15 @@ enum class AdErrorType(val raw: Int) { /** * Types of events that can occur during ad playback. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. */ enum class AdEventType(val raw: Int) { /** Fired when an ad break is ready from VMAP or ad rule ads. */ AD_BREAK_READY(0), /** - * Fired when the ads manager is done playing all the valid ads in the ads - * response, or when the response doesn't return any valid ads. + * Fired when the ads manager is done playing all the valid ads in the ads response, or when the + * response doesn't return any valid ads. */ ALL_ADS_COMPLETED(1), /** Fired when an ad completes playing. */ @@ -757,22 +737,27 @@ enum class AdEventType(val raw: Int) { /** * A base class for more specialized container interfaces. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseDisplayContainer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.BaseDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -783,30 +768,34 @@ abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApi } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * A container in which to display the ads. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdDisplayContainer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdDisplayContainer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -817,46 +806,59 @@ abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRe } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ - fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer - { + /** An implementation of [PigeonApiBaseDisplayContainer] used to access callback methods */ + fun pigeon_getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { return pigeonRegistrar.getPigeonApiBaseDisplayContainer() } - } /** - * An object which allows publishers to request ads from ad servers or a - * dynamic ad insertion stream. + * An object which allows publishers to request ads from ad servers or a dynamic ad insertion + * stream. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Registers a listener for errors that occur during the ads request. */ - abstract fun addAdErrorListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, listener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) + abstract fun addAdErrorListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, + listener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + ) /** Registers a listener for the ads manager loaded event. */ - abstract fun addAdsLoadedListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, listener: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener) + abstract fun addAdsLoadedListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, + listener: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + ) /** Requests ads from a server. */ - abstract fun requestAds(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, request: com.google.ads.interactivemedia.v3.api.AdsRequest) + abstract fun requestAds( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, + request: com.google.ads.interactivemedia.v3.api.AdsRequest + ) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoader?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdErrorListener", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdErrorListener", + 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.AdsLoader - val listenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + val listenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener var wrapped: List try { api.addAdErrorListener(pigeon_instanceArg, listenerArg) @@ -871,12 +873,17 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdsLoadedListener", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoader.addAdsLoadedListener", + 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.AdsLoader - val listenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener + val listenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener var wrapped: List try { api.addAdsLoadedListener(pigeon_instanceArg, listenerArg) @@ -891,7 +898,11 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoader.requestAds", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoader.requestAds", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -914,14 +925,17 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsLoader and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoader.pigeon_newInstance" @@ -935,37 +949,43 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * An event raised when ads are successfully loaded from the ad server through an AdsLoader. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** - * The ads manager that will control playback of the loaded ads, or null when - * using dynamic ad insertion. + * The ads manager that will control playback of the loaded ads, or null when using dynamic ad + * insertion. */ - abstract fun manager(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent): com.google.ads.interactivemedia.v3.api.AdsManager + abstract fun manager( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent + ): com.google.ads.interactivemedia.v3.api.AdsManager @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsManagerLoadedEvent and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsManagerLoadedEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val managerArg = manager(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdsManagerLoadedEvent.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg, managerArg)) { if (it is List<*>) { @@ -976,164 +996,35 @@ abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyAp } } else { callback(Result.failure(createConnectionError(channelName))) - } - } - } - -} -/** - * Listener interface for notification of ad load or stream load completion. - * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener - - companion object { - @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoadedListener?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } - } else { - channel.setMessageHandler(null) - } - } - } - } - - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsLoadedListener and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - throw IllegalStateException("Attempting to create a new Dart instance of AdsLoadedListener, but the class has a nonnull callback method.") - } - - /** Called once the AdsManager or StreamManager has been loaded. */ - fun onAdsManagerLoaded(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, eventArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, callback: (Result) -> Unit) -{ - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, eventArg)) { - 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))) - } - } - } - -} -/** - * Interface for classes that will listen to AdErrorEvents. - * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener - - companion object { - @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdErrorListener?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } - } else { - channel.setMessageHandler(null) - } } } } - - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdErrorListener and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - throw IllegalStateException("Attempting to create a new Dart instance of AdErrorListener, but the class has a nonnull callback method.") - } - - /** Called when an error occurs. */ - fun onAdError(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, eventArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, callback: (Result) -> Unit) -{ - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, eventArg)) { - 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))) - } - } - } - } /** * An event raised when there is an error loading or playing ads. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The AdError that caused this event. */ - abstract fun error(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdErrorEvent): com.google.ads.interactivemedia.v3.api.AdError + abstract fun error( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdErrorEvent + ): com.google.ads.interactivemedia.v3.api.AdError @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdErrorEvent and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdErrorEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val errorArg = error(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -1148,39 +1039,48 @@ abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistra } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * An error that occurred in the SDK. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The error's code. */ - abstract fun errorCode(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): AdErrorCode + abstract fun errorCode( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError + ): AdErrorCode /** The error code's number. */ - abstract fun errorCodeNumber(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): Long + abstract fun errorCodeNumber( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError + ): Long /** The error's type. */ - abstract fun errorType(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): AdErrorType + abstract fun errorType( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError + ): AdErrorType /** A human-readable summary of the error. */ abstract fun message(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError): String @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdError and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdError, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdError and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdError, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val errorCodeArg = errorCode(pigeon_instanceArg) val errorCodeNumberArg = errorCodeNumber(pigeon_instanceArg) val errorTypeArg = errorType(pigeon_instanceArg) @@ -1189,42 +1089,59 @@ abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg, errorCodeArg.raw, errorCodeNumberArg, errorTypeArg.raw, messageArg)) { - 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)) + channel.send( + listOf( + pigeon_identifierArg, + errorCodeArg.raw, + errorCodeNumberArg, + errorTypeArg.raw, + messageArg)) { + 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))) + } } - } else { - callback(Result.failure(createConnectionError(channelName))) - } - } } - } /** * 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/com/google/ads/interactivemedia/v3/api/AdsRequest. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Sets the URL from which ads will be requested. */ - abstract fun setAdTagUrl(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, adTagUrl: String) + abstract fun setAdTagUrl( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + adTagUrl: String + ) /** - * Attaches a ContentProgressProvider instance to allow scheduling ad breaks - * based on content progress (cue points). + * Attaches a ContentProgressProvider instance to allow scheduling ad breaks based on content + * progress (cue points). */ - abstract fun setContentProgressProvider(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, provider: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider) + abstract fun setContentProgressProvider( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, + provider: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider + ) companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsRequest?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdTagUrl", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setAdTagUrl", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1244,12 +1161,17 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentProgressProvider", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsRequest.setContentProgressProvider", + 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 providerArg = args[1] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider + val providerArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider var wrapped: List try { api.setContentProgressProvider(pigeon_instanceArg, providerArg) @@ -1267,14 +1189,17 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsRequest and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsRequest, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsRequest.pigeon_newInstance" @@ -1288,30 +1213,34 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * Defines an interface to allow SDK to track progress of the content video. * - * See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. + * See + * https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -1322,16 +1251,15 @@ abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxy } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * An object which handles playing ads after they've been received from the - * server. + * An object which handles playing ads after they've been received from the server. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { @@ -1349,7 +1277,11 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsManager?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.discardAdBreak", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsManager.discardAdBreak", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1368,7 +1300,9 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.pause", codec) + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.pause", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1387,7 +1321,9 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.start", codec) + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdsManager.start", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1409,14 +1345,17 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdsManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsManager, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.AdsManager.pigeon_newInstance" @@ -1430,41 +1369,41 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } @Suppress("FunctionName") - /**An implementation of [PigeonApiBaseManager] used to access callback methods */ - fun pigeon_getPigeonApiBaseManager(): PigeonApiBaseManager - { + /** An implementation of [PigeonApiBaseManager] used to access callback methods */ + fun pigeon_getPigeonApiBaseManager(): PigeonApiBaseManager { return pigeonRegistrar.getPigeonApiBaseManager() } - } /** * Base interface for managing ads.. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { /** - * Registers a listener for errors that occur during the ad or stream - * initialization and playback. + * Registers a listener for errors that occur during the ad or stream initialization and playback. */ - abstract fun addAdErrorListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, errorListener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener) + abstract fun addAdErrorListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, + errorListener: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + ) /** - * Registers a listener for ad events that occur during ad or stream - * initialization and playback. + * Registers a listener for ad events that occur during ad or stream initialization and playback. */ - abstract fun addAdEventListener(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, adEventListener: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener) + abstract fun addAdEventListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager, + adEventListener: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + ) - /** - * Stops the ad and all tracking, then releases all assets that were loaded - * to play the ad. - */ + /** Stops the ad and all tracking, then releases all assets that were loaded to play the ad. */ abstract fun destroy(pigeon_instance: com.google.ads.interactivemedia.v3.api.BaseManager) /** Initializes the ad experience using default rendering settings */ @@ -1475,12 +1414,17 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiBaseManager?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdErrorListener", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdErrorListener", + 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.BaseManager - val errorListenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + val errorListenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener var wrapped: List try { api.addAdErrorListener(pigeon_instanceArg, errorListenerArg) @@ -1495,12 +1439,17 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdEventListener", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.BaseManager.addAdEventListener", + 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.BaseManager - val adEventListenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + val adEventListenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener var wrapped: List try { api.addAdEventListener(pigeon_instanceArg, adEventListenerArg) @@ -1515,7 +1464,11 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.destroy", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.BaseManager.destroy", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1534,7 +1487,9 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.init", codec) + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.BaseManager.init", codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1556,14 +1511,17 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of BaseManager and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseManager, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of BaseManager and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.BaseManager, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.BaseManager.pigeon_newInstance" @@ -1577,82 +1535,15 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } - } - } - -} -/** - * Listener interface for ad events. - * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener - - companion object { - @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdEventListener?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } - } else { - channel.setMessageHandler(null) - } } } } - - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdEventListener and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - throw IllegalStateException("Attempting to create a new Dart instance of AdEventListener, but the class has a nonnull callback method.") - } - - /** Respond to an occurrence of an AdEvent. */ - fun onAdEvent(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, eventArg: com.google.ads.interactivemedia.v3.api.AdEvent, callback: (Result) -> Unit) -{ - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, eventArg)) { - 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))) - } - } - } - } /** * Event to notify publisher that an event occurred with an Ad. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { @@ -1660,14 +1551,17 @@ abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun type(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdEvent): AdEventType @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdEvent and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdEvent and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val typeArg = type(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec @@ -1682,47 +1576,60 @@ abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * Factory class for creating SDK objects. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun instance(): com.google.ads.interactivemedia.v3.api.ImaSdkFactory - abstract fun createAdDisplayContainer(container: android.view.ViewGroup, player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer): com.google.ads.interactivemedia.v3.api.AdDisplayContainer + abstract fun createAdDisplayContainer( + container: android.view.ViewGroup, + player: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + ): com.google.ads.interactivemedia.v3.api.AdDisplayContainer /** Creates an `ImaSdkSettings` object for configuring the IMA SDK. */ - abstract fun createImaSdkSettings(pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory): com.google.ads.interactivemedia.v3.api.ImaSdkSettings + abstract fun createImaSdkSettings( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory + ): com.google.ads.interactivemedia.v3.api.ImaSdkSettings - /** - * Creates an `AdsLoader` for requesting ads using the specified settings - * object. - */ - abstract fun createAdsLoader(pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, settings: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, container: com.google.ads.interactivemedia.v3.api.AdDisplayContainer): com.google.ads.interactivemedia.v3.api.AdsLoader + /** Creates an `AdsLoader` for requesting ads using the specified settings object. */ + abstract fun createAdsLoader( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, + settings: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + container: com.google.ads.interactivemedia.v3.api.AdDisplayContainer + ): com.google.ads.interactivemedia.v3.api.AdsLoader /** Creates an AdsRequest object to contain the data used to request ads. */ - abstract fun createAdsRequest(pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory): com.google.ads.interactivemedia.v3.api.AdsRequest + abstract fun createAdsRequest( + pigeon_instance: com.google.ads.interactivemedia.v3.api.ImaSdkFactory + ): com.google.ads.interactivemedia.v3.api.AdsRequest companion object { @Suppress("LocalVariableName") fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiImaSdkFactory?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.instance", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.instance", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.instance(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.instance(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1734,7 +1641,11 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdDisplayContainer", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1753,7 +1664,11 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createImaSdkSettings", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createImaSdkSettings", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1771,7 +1686,11 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsLoader", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsLoader", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1780,7 +1699,8 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr val containerArg = args[2] as com.google.ads.interactivemedia.v3.api.AdDisplayContainer var wrapped: List try { - wrapped = listOf(api.createAdsLoader(pigeon_instanceArg, settingsArg, containerArg)) + wrapped = + listOf(api.createAdsLoader(pigeon_instanceArg, settingsArg, containerArg)) } catch (exception: Throwable) { wrapped = wrapError(exception) } @@ -1791,7 +1711,11 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRequest", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.createAdsRequest", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List @@ -1812,14 +1736,17 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of ImaSdkFactory and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkFactory, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkFactory.pigeon_newInstance" @@ -1833,27 +1760,30 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** * Defines general SDK settings that are used when creating an `AdsLoader`. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. */ @Suppress("UNCHECKED_CAST") abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.ImaSdkSettings, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec val channelName = "dev.flutter.pigeon.interactive_media_ads.ImaSdkSettings.pigeon_newInstance" @@ -1867,63 +1797,48 @@ abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegist } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * Defines the set of methods that a video player must implement to be used by - * the IMA SDK, as well as a set of callbacks that it must fire. + * Defines an update to the video's progress. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - - /** The volume of the player as a percentage from 0 to 100. */ - abstract fun setVolume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, value: Long) +abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor( + currentTimeMs: Long, + durationMs: Long + ): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - /** - * The `VideoProgressUpdate` describing playback progress of the current - * video. - */ - abstract fun setAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) + /** Value to use for cases when progress is not yet defined, such as video initialization. */ + abstract fun videoTimeNotReady(): + com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + val currentTimeMsArg = args[1].let { if (it is Int) it.toLong() else it as Long } + val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } - } else { - channel.setMessageHandler(null) - } - } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", 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.player.VideoAdPlayer - val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.setVolume(pigeon_instanceArg, valueArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), + pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1935,15 +1850,19 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", + 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.player.VideoAdPlayer - val progressArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.setAdProgress(pigeon_instanceArg, progressArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.videoTimeNotReady(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -1958,24 +1877,23 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException("Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") - } - - /** Adds a callback. */ - fun addCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) -{ + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, callbackArg)) { + channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -1984,38 +1902,40 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } +} +/** + * The minimal information required to play an ad. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun url( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ): String - /** Loads a video ad hosted at AdMediaInfo. */ - fun loadAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) -{ - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, adMediaInfoArg, adPodInfoArg)) { - 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))) - } + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return } - } - - /** Pauses playing the current ad. */ - fun pauseAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val urlArg = url(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { + channel.send(listOf(pigeon_identifierArg, urlArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -2024,61 +1944,154 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } +} +/** + * An ad may be part of a pod of ads. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** + * The position of the ad within the pod. + * + * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the ad is not part of a + * pod, this will return 1. + */ + abstract fun adPosition(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + + /** + * The maximum duration of the pod in seconds. + * + * For unknown duration, -1 is returned. + */ + abstract fun maxDuration( + pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo + ): Double + + /** Client side and DAI VOD: Returns the index of the ad pod. */ + abstract fun podIndex(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long /** - * Starts or resumes playing the video ad referenced by the AdMediaInfo, - * provided loadAd has already been called for it. + * The content time offset at which the current ad pod was scheduled. + * + * For preroll pod, 0 is returned. For midrolls, the scheduled time is returned in seconds. For + * postroll, -1 is returned. Defaults to 0 if this ad is not part of a pod, or the pod is not part + * of an ad playlist. */ - fun playAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ + abstract fun timeOffset(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double + + /** The total number of ads contained within this pod, including bumpers. */ + abstract fun totalAds(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + + /** Returns true if the ad is a bumper ad. */ + abstract fun isBumper(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Boolean + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val adPositionArg = adPosition(pigeon_instanceArg) + val maxDurationArg = maxDuration(pigeon_instanceArg) + val podIndexArg = podIndex(pigeon_instanceArg) + val timeOffsetArg = timeOffset(pigeon_instanceArg) + val totalAdsArg = totalAds(pigeon_instanceArg) + val isBumperArg = isBumper(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { - 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)) + channel.send( + listOf( + pigeon_identifierArg, + adPositionArg, + maxDurationArg, + podIndexArg, + timeOffsetArg, + totalAdsArg, + isBumperArg)) { + 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))) + } } - } else { - callback(Result.failure(createConnectionError(channelName))) - } - } } +} +/** + * FrameLayout is designed to block out an area on the screen to display a single item. + * + * See https://developer.android.com/reference/android/widget/FrameLayout. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): android.widget.FrameLayout - /** Cleans up and releases all resources used by the `VideoAdPlayer`. */ - fun release(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callback: (Result) -> Unit) -{ - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg)) { - if (it is List<*>) { - if (it.size > 1) { - callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } } else { - callback(Result.success(Unit)) + channel.setMessageHandler(null) } - } else { - callback(Result.failure(createConnectionError(channelName))) - } + } } } - /** Removes a callback. */ - fun removeCallback(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, callbackArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) -{ + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.widget.FrameLayout, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback" + val channelName = "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, callbackArg)) { + channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -2087,80 +2100,43 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - /** Stops playing the current ad. */ - fun stopAd(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { - 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))) - } - } + @Suppress("FunctionName") + /** An implementation of [PigeonApiViewGroup] used to access callback methods */ + fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup { + return pigeonRegistrar.getPigeonApiViewGroup() } - } /** - * Defines an update to the video's progress. + * A special view that can contain other views (called children.) * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. + * See https://developer.android.com/reference/android/view/ViewGroup. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(currentTimeMs: Long, durationMs: Long): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - - /** - * Value to use for cases when progress is not yet defined, such as video - * initialization. - */ - abstract fun videoTimeNotReady(): com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun addView(pigeon_instance: android.view.ViewGroup, view: android.view.View) companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoProgressUpdate?) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - val currentTimeMsArg = args[1].let { if (it is Int) it.toLong() else it as Long } - val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(currentTimeMsArg,durationMsArg), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } - } else { - channel.setMessageHandler(null) - } - } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + val pigeon_instanceArg = args[0] as android.view.ViewGroup + val viewArg = args[1] as android.view.View var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.videoTimeNotReady(), pigeon_identifierArg) + api.addView(pigeon_instanceArg, viewArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2175,17 +2151,20 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoProgressUpdate and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.view.ViewGroup, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -2196,63 +2175,53 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + @Suppress("FunctionName") + /** An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView { + return pigeonRegistrar.getPigeonApiView() + } } /** - * Callbacks that the player must fire. + * Displays a video file. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html + * See https://developer.android.com/reference/android/widget/VideoView. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { - /** Fire this callback periodically as ad playback occurs. */ - abstract fun onAdProgress(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate) - - /** Fire this callback when video playback stalls waiting for data. */ - abstract fun onBuffering(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) - - /** Fire this callback when all content has finished playing. */ - abstract fun onContentComplete(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback) - - /** Fire this callback when the video finishes playing. */ - abstract fun onEnded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) - - /** Fire this callback when the video has encountered an error. */ - abstract fun onError(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) - - /** Fire this callback when the video is ready to begin playback. */ - abstract fun onLoaded(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) - - /** Fire this callback when the video is paused. */ - abstract fun onPause(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) - - /** Fire this callback when the player begins playing a video. */ - abstract fun onPlay(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) +abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): android.widget.VideoView - /** Fire this callback when the video is unpaused. */ - abstract fun onResume(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo) + /** Sets the URI of the video. */ + abstract fun setVideoUri(pigeon_instance: android.widget.VideoView, uri: String) - /** Fire this callback when the playback volume changes. */ - abstract fun onVolumeChanged(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, percentage: Long) + /** + * The current position of the playing video. + * + * In milliseconds. + */ + abstract fun getCurrentPosition(pigeon_instance: android.widget.VideoView): Long companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayerCallback?) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoView?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val videoProgressUpdateArg = args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2264,15 +2233,19 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as android.widget.VideoView + val uriArg = args[1] as String var wrapped: List try { - api.onBuffering(pigeon_instanceArg, adMediaInfoArg) + api.setVideoUri(pigeon_instanceArg, uriArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2284,15 +2257,18 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val pigeon_instanceArg = args[0] as android.widget.VideoView var wrapped: List try { - api.onContentComplete(pigeon_instanceArg) - wrapped = listOf(null) + wrapped = listOf(api.getCurrentPosition(pigeon_instanceArg)) } catch (exception: Throwable) { wrapped = wrapError(exception) } @@ -2302,57 +2278,172 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp channel.setMessageHandler(null) } } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onEnded(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.widget.VideoView, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") + } + + /** Callback to be invoked when the media source is ready for playback. */ + fun onPrepared( + pigeon_instanceArg: android.widget.VideoView, + playerArg: android.media.MediaPlayer, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, playerArg)) { + 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 { - channel.setMessageHandler(null) + callback(Result.success(Unit)) + } + } else { + callback(Result.failure(createConnectionError(channelName))) + } + } + } + + /** Callback to be invoked when playback of a media source has completed. */ + fun onCompletion( + pigeon_instanceArg: android.widget.VideoView, + playerArg: android.media.MediaPlayer, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, playerArg)) { + 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))) } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onError(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } + } + } + + /** Callback to be invoked when there has been an error during an asynchronous operation. */ + fun onError( + pigeon_instanceArg: android.widget.VideoView, + playerArg: android.media.MediaPlayer, + whatArg: Long, + extraArg: Long, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onError" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, playerArg, whatArg, extraArg)) { + 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 { - channel.setMessageHandler(null) + callback(Result.success(Unit)) + } + } else { + callback(Result.failure(createConnectionError(channelName))) + } + } + } + + @Suppress("FunctionName") + /** An implementation of [PigeonApiView] used to access callback methods */ + fun pigeon_getPigeonApiView(): PigeonApiView { + return pigeonRegistrar.getPigeonApiView() + } +} +/** + * This class represents the basic building block for user interface components. + * + * See https://developer.android.com/reference/android/view/View. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_identifierArg)) { + 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))) } + } + } +} +/** + * MediaPlayer class can be used to control playback of audio/video files and streams. + * + * See https://developer.android.com/reference/android/media/MediaPlayer. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Gets the duration of the file. */ + abstract fun getDuration(pigeon_instance: android.media.MediaPlayer): Long + + /** Seeks to specified time position. */ + abstract fun seekTo(pigeon_instance: android.media.MediaPlayer, mSec: Long) + + /** Starts or resumes playback. */ + abstract fun start(pigeon_instance: android.media.MediaPlayer) + + /** Pauses playback. */ + abstract fun pause(pigeon_instance: android.media.MediaPlayer) + + /** Stops playback after playback has been started or paused. */ + abstract fun stop(pigeon_instance: android.media.MediaPlayer) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as android.media.MediaPlayer var wrapped: List try { - api.onLoaded(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) + wrapped = listOf(api.getDuration(pigeon_instanceArg)) } catch (exception: Throwable) { wrapped = wrapError(exception) } @@ -2363,15 +2454,19 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as android.media.MediaPlayer + val mSecArg = args[1].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.onPause(pigeon_instanceArg, adMediaInfoArg) + api.seekTo(pigeon_instanceArg, mSecArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2383,15 +2478,18 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as android.media.MediaPlayer var wrapped: List try { - api.onPlay(pigeon_instanceArg, adMediaInfoArg) + api.start(pigeon_instanceArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2403,15 +2501,18 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", + 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val pigeon_instanceArg = args[0] as android.media.MediaPlayer var wrapped: List try { - api.onResume(pigeon_instanceArg, adMediaInfoArg) + api.pause(pigeon_instanceArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2423,16 +2524,16 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", codec) + val channel = + BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", 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.player.VideoAdPlayer.VideoAdPlayerCallback - val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } + val pigeon_instanceArg = args[0] as android.media.MediaPlayer var wrapped: List try { - api.onVolumeChanged(pigeon_instanceArg, adMediaInfoArg, percentageArg) + api.stop(pigeon_instanceArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2447,17 +2548,20 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: android.media.MediaPlayer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -2468,144 +2572,116 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } /** - * The minimal information required to play an ad. + * Callbacks that the player must fire. * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun url(pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo): String +abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { + /** Fire this callback periodically as ad playback occurs. */ + abstract fun onAdProgress( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + videoProgressUpdate: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + ) - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdMediaInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val urlArg = url(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg, urlArg)) { - 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))) - } - } - } + /** Fire this callback when video playback stalls waiting for data. */ + abstract fun onBuffering( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) -} -/** - * An ad may be part of a pod of ads. - * - * See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { - /** - * The position of the ad within the pod. - * - * The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the - * ad is not part of a pod, this will return 1. - */ - abstract fun adPosition(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + /** Fire this callback when all content has finished playing. */ + abstract fun onContentComplete( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + ) - /** - * The maximum duration of the pod in seconds. - * - * For unknown duration, -1 is returned. - */ - abstract fun maxDuration(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double + /** Fire this callback when the video finishes playing. */ + abstract fun onEnded( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) - /** Client side and DAI VOD: Returns the index of the ad pod. */ - abstract fun podIndex(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + /** Fire this callback when the video has encountered an error. */ + abstract fun onError( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) - /** - * The content time offset at which the current ad pod was scheduled. - * - * For preroll pod, 0 is returned. For midrolls, the scheduled time is - * returned in seconds. For postroll, -1 is returned. Defaults to 0 if this - * ad is not part of a pod, or the pod is not part of an ad playlist. - */ - abstract fun timeOffset(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Double + /** Fire this callback when the video is ready to begin playback. */ + abstract fun onLoaded( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) - /** The total number of ads contained within this pod, including bumpers. */ - abstract fun totalAds(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Long + /** Fire this callback when the video is paused. */ + abstract fun onPause( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) - /** Returns true if the ad is a bumper ad. */ - abstract fun isBumper(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdPodInfo): Boolean + /** Fire this callback when the player begins playing a video. */ + abstract fun onPlay( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of AdPodInfo and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val adPositionArg = adPosition(pigeon_instanceArg) - val maxDurationArg = maxDuration(pigeon_instanceArg) - val podIndexArg = podIndex(pigeon_instanceArg) - val timeOffsetArg = timeOffset(pigeon_instanceArg) - val totalAdsArg = totalAds(pigeon_instanceArg) - val isBumperArg = isBumper(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg, adPositionArg, maxDurationArg, podIndexArg, timeOffsetArg, totalAdsArg, isBumperArg)) { - 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))) - } - } - } + /** Fire this callback when the video is unpaused. */ + abstract fun onResume( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + ) -} -/** - * FrameLayout is designed to block out an area on the screen to display a - * single item. - * - * See https://developer.android.com/reference/android/widget/FrameLayout. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): android.widget.FrameLayout + /** Fire this callback when the playback volume changes. */ + abstract fun onVolumeChanged( + pigeon_instance: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + adMediaInfo: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + percentage: Long + ) companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiFrameLayout?) { + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + api: PigeonApiVideoAdPlayerCallback? + ) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onAdProgress", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val videoProgressUpdateArg = + args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2616,66 +2692,247 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler(null) } } - } - } - - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of FrameLayout and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.widget.FrameLayout, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) - val binaryMessenger = pigeonRegistrar.binaryMessenger - val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance" - val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { - if (it is List<*>) { - if (it.size > 1) { - callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onBuffering", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onBuffering(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } } else { - callback(Result.success(Unit)) + channel.setMessageHandler(null) } - } else { - callback(Result.failure(createConnectionError(channelName))) - } - } - } - - @Suppress("FunctionName") - /**An implementation of [PigeonApiViewGroup] used to access callback methods */ - fun pigeon_getPigeonApiViewGroup(): PigeonApiViewGroup - { - return pigeonRegistrar.getPigeonApiViewGroup() - } - -} -/** - * A special view that can contain other views (called children.) - * - * See https://developer.android.com/reference/android/view/ViewGroup. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun addView(pigeon_instance: android.view.ViewGroup, view: android.view.View) - - companion object { - @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiViewGroup?) { - val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() + } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onContentComplete", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_instanceArg = args[0] as android.view.ViewGroup - val viewArg = args[1] as android.view.View + val pigeon_instanceArg = + args[0] + as + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback var wrapped: List try { - api.addView(pigeon_instanceArg, viewArg) + api.onContentComplete(pigeon_instanceArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onEnded", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onEnded(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onError", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onError(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onLoaded", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onLoaded(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPause", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onPause(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onPlay", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onPlay(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onResume", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + var wrapped: List + try { + api.onResume(pigeon_instanceArg, adMediaInfoArg) + wrapped = listOf(null) + } catch (exception: Throwable) { + wrapped = wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.onVolumeChanged", + 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.player.VideoAdPlayer.VideoAdPlayerCallback + val adMediaInfoArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo + val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } + var wrapped: List + try { + api.onVolumeChanged(pigeon_instanceArg, adMediaInfoArg, percentageArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2690,17 +2947,22 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of ViewGroup and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.view.ViewGroup, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoAdPlayerCallback and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance" + val channelName = + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayerCallback.pigeon_newInstance" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) channel.send(listOf(pigeon_identifierArg)) { if (it is List<*>) { @@ -2711,50 +2973,52 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - - @Suppress("FunctionName") - /**An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView - { - return pigeonRegistrar.getPigeonApiView() - } - } /** - * Displays a video file. + * Defines the set of methods that a video player must implement to be used by the IMA SDK, as well + * as a set of callbacks that it must fire. * - * See https://developer.android.com/reference/android/widget/VideoView. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) { - abstract fun pigeon_defaultConstructor(): android.widget.VideoView +abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - /** Sets the URI of the video. */ - abstract fun setVideoUri(pigeon_instance: android.widget.VideoView, uri: String) + /** The volume of the player as a percentage from 0 to 100. */ + abstract fun setVolume( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + value: Long + ) - /** - * The current position of the playing video. - * - * In milliseconds. - */ - abstract fun getCurrentPosition(pigeon_instance: android.widget.VideoView): Long + /** The `VideoProgressUpdate` describing playback progress of the current video. */ + abstract fun setAdProgress( + pigeon_instance: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + progress: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate + ) companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoView?) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiVideoAdPlayer?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance(api.pigeon_defaultConstructor(), pigeon_identifierArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2766,15 +3030,20 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_instanceArg = args[0] as android.widget.VideoView - val uriArg = args[1] as String + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.setVideoUri(pigeon_instanceArg, uriArg) + api.setVolume(pigeon_instanceArg, valueArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -2786,14 +3055,22 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_instanceArg = args[0] as android.widget.VideoView + val pigeon_instanceArg = + args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer + val progressArg = + args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate var wrapped: List try { - wrapped = listOf(api.getCurrentPosition(pigeon_instanceArg)) + api.setAdProgress(pigeon_instanceArg, progressArg) + wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) } @@ -2807,24 +3084,31 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of VideoView and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.widget.VideoView, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of VideoAdPlayer and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - throw IllegalStateException("Attempting to create a new Dart instance of VideoView, but the class has a nonnull callback method.") + throw IllegalStateException( + "Attempting to create a new Dart instance of VideoAdPlayer, but the class has a nonnull callback method.") } - /** Callback to be invoked when the media source is ready for playback. */ - fun onPrepared(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) -{ + /** Adds a callback. */ + fun addCallback( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callbackArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, playerArg)) { + channel.send(listOf(pigeon_instanceArg, callbackArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -2833,18 +3117,45 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - /** Callback to be invoked when playback of a media source has completed. */ - fun onCompletion(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, callback: (Result) -> Unit) -{ + /** Loads a video ad hosted at AdMediaInfo. */ + fun loadAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + adPodInfoArg: com.google.ads.interactivemedia.v3.api.AdPodInfo, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, playerArg)) { + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg, adPodInfoArg)) { + 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))) + } + } + } + + /** Pauses playing the current ad. */ + fun pauseAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -2853,21 +3164,24 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } /** - * Callback to be invoked when there has been an error during an asynchronous - * operation. + * Starts or resumes playing the video ad referenced by the AdMediaInfo, provided loadAd has + * already been called for it. */ - fun onError(pigeon_instanceArg: android.widget.VideoView, playerArg: android.media.MediaPlayer, whatArg: Long, extraArg: Long, callback: (Result) -> Unit) -{ + fun playAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoView.onError" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_instanceArg, playerArg, whatArg, extraArg)) { + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -2876,39 +3190,44 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - @Suppress("FunctionName") - /**An implementation of [PigeonApiView] used to access callback methods */ - fun pigeon_getPigeonApiView(): PigeonApiView - { - return pigeonRegistrar.getPigeonApiView() + /** Cleans up and releases all resources used by the `VideoAdPlayer`. */ + fun release( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg)) { + 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))) + } + } } -} -/** - * This class represents the basic building block for user interface components. - * - * See https://developer.android.com/reference/android/view/View. - */ -@Suppress("UNCHECKED_CAST") -abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { - @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) -{ - if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { - Result.success(Unit) - return - } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + /** Removes a callback. */ + fun removeCallback( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + callbackArg: + com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { + channel.send(listOf(pigeon_instanceArg, callbackArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -2917,47 +3236,63 @@ abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } + /** Stops playing the current ad. */ + fun stopAd( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer, + adMediaInfoArg: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, adMediaInfoArg)) { + 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))) + } + } + } } /** - * MediaPlayer class can be used to control playback of audio/video files and - * streams. + * Listener interface for notification of ad load or stream load completion. * - * See https://developer.android.com/reference/android/media/MediaPlayer. + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { - /** Gets the duration of the file. */ - abstract fun getDuration(pigeon_instance: android.media.MediaPlayer): Long - - /** Seeks to specified time position. */ - abstract fun seekTo(pigeon_instance: android.media.MediaPlayer, mSec: Long) - - /** Starts or resumes playback. */ - abstract fun start(pigeon_instance: android.media.MediaPlayer) - - /** Pauses playback. */ - abstract fun pause(pigeon_instance: android.media.MediaPlayer) - - /** Stops playback after playback has been started or paused. */ - abstract fun stop(pigeon_instance: android.media.MediaPlayer) +abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener companion object { @Suppress("LocalVariableName") - fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiMediaPlayer?) { + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdsLoadedListener?) { val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_instanceArg = args[0] as android.media.MediaPlayer + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - wrapped = listOf(api.getDuration(pigeon_instanceArg)) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) } @@ -2967,35 +3302,76 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler(null) } } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val pigeon_instanceArg = args[0] as android.media.MediaPlayer - val mSecArg = args[1].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.seekTo(pigeon_instanceArg, mSecArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdsLoadedListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of AdsLoadedListener, but the class has a nonnull callback method.") + } + + /** Called once the AdsManager or StreamManager has been loaded. */ + fun onAdsManagerLoaded( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener, + eventArg: com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, eventArg)) { + 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 { - channel.setMessageHandler(null) + callback(Result.success(Unit)) } + } else { + callback(Result.failure(createConnectionError(channelName))) } + } + } +} +/** + * Interface for classes that will listen to AdErrorEvents. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdErrorListener?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_instanceArg = args[0] as android.media.MediaPlayer + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.start(pigeon_instanceArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -3006,34 +3382,75 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler(null) } } - run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause", codec) - if (api != null) { - channel.setMessageHandler { message, reply -> - val args = message as List - val pigeon_instanceArg = args[0] as android.media.MediaPlayer - var wrapped: List - try { - api.pause(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } - reply.reply(wrapped) - } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of AdErrorListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of AdErrorListener, but the class has a nonnull callback method.") + } + + /** Called when an error occurs. */ + fun onAdError( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener, + eventArg: com.google.ads.interactivemedia.v3.api.AdErrorEvent, + callback: (Result) -> Unit + ) { + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError" + val channel = BasicMessageChannel(binaryMessenger, channelName, codec) + channel.send(listOf(pigeon_instanceArg, eventArg)) { + 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 { - channel.setMessageHandler(null) + callback(Result.success(Unit)) } + } else { + callback(Result.failure(createConnectionError(channelName))) } + } + } +} +/** + * Listener interface for ad events. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiAdEventListener?) { + val codec = api?.pigeonRegistrar?.codec ?: StandardMessageCodec() run { - val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop", codec) + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor", + codec) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_instanceArg = args[0] as android.media.MediaPlayer + val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } var wrapped: List try { - api.stop(pigeon_instanceArg) + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) wrapped = listOf(null) } catch (exception: Throwable) { wrapped = wrapError(exception) @@ -3048,19 +3465,30 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } @Suppress("LocalVariableName", "FunctionName") - /**Creates a Dart instance of MediaPlayer and attaches it to [pigeon_instanceArg]. */ - fun pigeon_newInstance(pigeon_instanceArg: android.media.MediaPlayer, callback: (Result) -> Unit) -{ + /** Creates a Dart instance of AdEventListener and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, + callback: (Result) -> Unit + ) { if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { Result.success(Unit) return } - val pigeon_identifierArg = pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + throw IllegalStateException( + "Attempting to create a new Dart instance of AdEventListener, but the class has a nonnull callback method.") + } + + /** Respond to an occurrence of an AdEvent. */ + fun onAdEvent( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener, + eventArg: com.google.ads.interactivemedia.v3.api.AdEvent, + callback: (Result) -> Unit + ) { val binaryMessenger = pigeonRegistrar.binaryMessenger val codec = pigeonRegistrar.codec - val channelName = "dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance" + val channelName = "dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(listOf(pigeon_identifierArg)) { + channel.send(listOf(pigeon_instanceArg, eventArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -3069,8 +3497,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar } } else { callback(Result.failure(createConnectionError(channelName))) - } + } } } - } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt index a15e9ec4cb0..5dd456e0d72 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPlugin.kt @@ -13,7 +13,6 @@ import io.flutter.plugin.common.StandardMessageCodec import io.flutter.plugin.platform.PlatformView import io.flutter.plugin.platform.PlatformViewFactory - /** InteractiveMediaAdsPlugin */ class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { private lateinit var pluginBinding: FlutterPlugin.FlutterPluginBinding @@ -26,7 +25,9 @@ class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { ProxyApiRegistrar(pluginBinding.binaryMessenger, context = pluginBinding.applicationContext) registrar.setUp() - flutterPluginBinding.platformViewRegistry.registerViewFactory("interactive_media_ads.packages.flutter.dev/view",FlutterViewFactory(registrar.instanceManager)) + flutterPluginBinding.platformViewRegistry.registerViewFactory( + "interactive_media_ads.packages.flutter.dev/view", + FlutterViewFactory(registrar.instanceManager)) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { @@ -52,11 +53,12 @@ class InteractiveMediaAdsPlugin : FlutterPlugin, ActivityAware { } internal class FlutterViewFactory(private val instanceManager: PigeonInstanceManager) : - PlatformViewFactory(StandardMessageCodec.INSTANCE) { + PlatformViewFactory(StandardMessageCodec.INSTANCE) { override fun create(context: Context, viewId: Int, args: Any?): PlatformView { - val identifier = args as Int? - ?: throw IllegalStateException("An identifier is required to retrieve a View instance.") + val identifier = + args as Int? + ?: throw IllegalStateException("An identifier is required to retrieve a View instance.") val instance: Any? = instanceManager.getInstance(identifier.toLong()) if (instance is PlatformView) { return instance @@ -69,8 +71,6 @@ internal class FlutterViewFactory(private val instanceManager: PigeonInstanceMan override fun dispose() {} } } - throw IllegalStateException( - "Unable to find a PlatformView or View instance: $args, $instance" - ) + throw IllegalStateException("Unable to find a PlatformView or View instance: $args, $instance") } } 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 c02ed439841..7ef41728b26 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 @@ -8,7 +8,8 @@ import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer, immutable, protected; +import 'package:flutter/foundation.dart' + show ReadBuffer, WriteBuffer, immutable, protected; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart' show WidgetsFlutterBinding; @@ -19,7 +20,8 @@ PlatformException _createConnectionError(String channelName) { ); } -List wrapResponse({Object? result, PlatformException? error, bool empty = false}) { +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { if (empty) { return []; } @@ -28,6 +30,7 @@ List wrapResponse({Object? result, PlatformException? error, bool empty } return [error.code, error.message, error.details]; } + /// An immutable object that serves as the base class for all ProxyApis and /// can provide functional copies of itself. /// @@ -113,7 +116,8 @@ class PigeonInstanceManager { final Expando _identifiers = Expando(); final Map> _weakInstances = >{}; - final Map _strongInstances = {}; + final Map _strongInstances = + {}; late final Finalizer _finalizer; int _nextIdentifier = 0; @@ -131,33 +135,59 @@ class PigeonInstanceManager { api.removeStrongReference(identifier); }, ); - _PigeonInstanceManagerApi.setUpMessageHandlers(instanceManager: instanceManager); - BaseDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdDisplayContainer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsLoader.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsManagerLoadedEvent.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsLoadedListener.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdErrorListener.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdErrorEvent.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdError.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsRequest.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - ContentProgressProvider.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdsManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - BaseManager.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdEventListener.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdEvent.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - ImaSdkFactory.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - ImaSdkSettings.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoAdPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoProgressUpdate.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoAdPlayerCallback.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdMediaInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - AdPodInfo.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - FrameLayout.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - ViewGroup.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - VideoView.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + _PigeonInstanceManagerApi.setUpMessageHandlers( + instanceManager: instanceManager); + BaseDisplayContainer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdDisplayContainer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsLoader.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsManagerLoadedEvent.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdErrorEvent.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdError.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsRequest.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ContentProgressProvider.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsManager.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + BaseManager.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdEvent.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ImaSdkFactory.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ImaSdkSettings.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoProgressUpdate.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdMediaInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdPodInfo.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + FrameLayout.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + ViewGroup.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoView.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); View.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); - MediaPlayer.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + MediaPlayer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoAdPlayerCallback.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + VideoAdPlayer.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdsLoadedListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdErrorListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + AdEventListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); return instanceManager; } @@ -221,15 +251,19 @@ class PigeonInstanceManager { /// /// This method also expects the host `InstanceManager` to have a strong /// reference to the instance the identifier is associated with. - T? getInstanceWithWeakReference(int identifier) { - final PigeonProxyApiBaseClass? weakInstance = _weakInstances[identifier]?.target; + T? getInstanceWithWeakReference( + int identifier) { + final PigeonProxyApiBaseClass? weakInstance = + _weakInstances[identifier]?.target; if (weakInstance == null) { - final PigeonProxyApiBaseClass? strongInstance = _strongInstances[identifier]; + final PigeonProxyApiBaseClass? strongInstance = + _strongInstances[identifier]; if (strongInstance != null) { final PigeonProxyApiBaseClass copy = strongInstance.pigeon_copy(); _identifiers[copy] = identifier; - _weakInstances[identifier] = WeakReference(copy); + _weakInstances[identifier] = + WeakReference(copy); _finalizer.attach(copy, identifier, detach: copy); return copy as T; } @@ -253,17 +287,20 @@ class PigeonInstanceManager { /// added. /// /// Returns unique identifier of the [instance] added. - void addHostCreatedInstance(PigeonProxyApiBaseClass instance, int identifier) { + void addHostCreatedInstance( + PigeonProxyApiBaseClass instance, int identifier) { _addInstanceWithIdentifier(instance, identifier); } - void _addInstanceWithIdentifier(PigeonProxyApiBaseClass instance, int identifier) { + void _addInstanceWithIdentifier( + PigeonProxyApiBaseClass instance, int identifier) { assert(!containsIdentifier(identifier)); assert(getIdentifier(instance) == null); assert(identifier >= 0); _identifiers[instance] = identifier; - _weakInstances[identifier] = WeakReference(instance); + _weakInstances[identifier] = + WeakReference(instance); _finalizer.attach(instance, identifier, detach: instance); final PigeonProxyApiBaseClass copy = instance.pigeon_copy(); @@ -294,9 +331,9 @@ class _PigeonInstanceManagerApi { : _binaryMessenger = binaryMessenger; final BinaryMessenger? _binaryMessenger; - + static const MessageCodec pigeonChannelCodec = - StandardMessageCodec(); + StandardMessageCodec(); static void setUpMessageHandlers({ BinaryMessenger? binaryMessenger, @@ -372,30 +409,31 @@ class _PigeonInstanceManagerApi { } } } + class _PigeonProxyApiBaseCodec extends StandardMessageCodec { - const _PigeonProxyApiBaseCodec(this.instanceManager); - final PigeonInstanceManager instanceManager; - @override - void writeValue(WriteBuffer buffer, Object? value) { - if (value is PigeonProxyApiBaseClass) { - buffer.putUint8(128); - writeValue(buffer, instanceManager.getIdentifier(value)); - } else { - super.writeValue(buffer, value); - } - } - @override - Object? readValueOfType(int type, ReadBuffer buffer) { - switch (type) { - case 128: - return instanceManager - .getInstanceWithWeakReference(readValue(buffer)! as int); - default: - return super.readValueOfType(type, buffer); - } - } -} + const _PigeonProxyApiBaseCodec(this.instanceManager); + final PigeonInstanceManager instanceManager; + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is PigeonProxyApiBaseClass) { + buffer.putUint8(128); + writeValue(buffer, instanceManager.getIdentifier(value)); + } else { + super.writeValue(buffer, value); + } + } + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 128: + return instanceManager + .getInstanceWithWeakReference(readValue(buffer)! as int); + default: + return super.readValueOfType(type, buffer); + } + } +} /// The types of error that can be encountered. /// @@ -403,6 +441,7 @@ class _PigeonProxyApiBaseCodec extends StandardMessageCodec { enum AdErrorCode { /// Ads player was not provided. adsPlayerWasNotProvided, + /// An unexpected error occurred and the cause is not known. unknownError, } @@ -413,8 +452,10 @@ enum AdErrorCode { enum AdErrorType { /// Indicates that the error was encountered when the ad was being loaded. load, + /// Indicates that the error was encountered after the ad loaded, during ad play. play, + /// The error is not recognized by this wrapper. unknown, } @@ -425,20 +466,27 @@ enum AdErrorType { enum AdEventType { /// Fired when an ad break is ready from VMAP or ad rule ads. adBreakReady, + /// Fired when the ads manager is done playing all the valid ads in the ads /// response, or when the response doesn't return any valid ads. allAdsCompleted, + /// Fired when an ad completes playing. completed, + /// Fired when content should be paused. contentPauseRequested, + /// Fired when content should be resumed. contentResumeRequested, + /// Fired when the VAST response has been received. loaded, + /// The event type is not recognized by this wrapper. unknown, } + /// A base class for more specialized container interfaces. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. @@ -819,91 +867,29 @@ class AdsManagerLoadedEvent extends PigeonProxyApiBaseClass { } } -/// Listener interface for notification of ad load or stream load completion. +/// An event raised when there is an error loading or playing ads. /// -/// 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 PigeonProxyApiBaseClass { - AdsLoadedListener({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.onAdsManagerLoaded, - }) { - final int __pigeon_instanceIdentifier = - pigeon_instanceManager.addDartCreatedInstance(this); - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecAdsLoadedListener; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - () async { - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = await __pigeon_channel - .send([__pigeon_instanceIdentifier]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - }(); - } - - /// Constructs [AdsLoadedListener] without creating the associated native object. +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. +class AdErrorEvent extends PigeonProxyApiBaseClass { + /// Constructs [AdErrorEvent] 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 - AdsLoadedListener.pigeon_detached({ + AdErrorEvent.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - required this.onAdsManagerLoaded, + required this.error, }); - late final _PigeonProxyApiBaseCodec __pigeon_codecAdsLoadedListener = - _PigeonProxyApiBaseCodec(pigeon_instanceManager); - - /// Called once the AdsManager or StreamManager has been loaded. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final AdsLoadedListener instance = AdsLoadedListener( - /// onAdsManagerLoaded: (AdsLoadedListener pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - AdsLoadedListener pigeon_instance, - AdsManagerLoadedEvent event, - ) onAdsManagerLoaded; + /// The AdError that caused this event. + final AdError error; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - void Function( - AdsLoadedListener pigeon_instance, - AdsManagerLoadedEvent event, - )? onAdsManagerLoaded, + AdErrorEvent Function(AdError error)? pigeon_newInstance, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -912,7 +898,7 @@ class AdsLoadedListener extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded', + 'dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -920,19 +906,25 @@ class AdsLoadedListener extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance was null.'); final List args = (message as List?)!; - final AdsLoadedListener? arg_pigeon_instance = - (args[0] as AdsLoadedListener?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null, expected non-null AdsLoadedListener.'); - final AdsManagerLoadedEvent? arg_event = - (args[1] as AdsManagerLoadedEvent?); - assert(arg_event != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null, expected non-null AdsManagerLoadedEvent.'); + final int? arg_pigeon_instanceIdentifier = (args[0] as int?); + assert(arg_pigeon_instanceIdentifier != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance was null, expected non-null int.'); + final AdError? arg_error = (args[1] as AdError?); + assert(arg_error != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance was null, expected non-null AdError.'); try { - (onAdsManagerLoaded ?? arg_pigeon_instance!.onAdsManagerLoaded) - .call(arg_pigeon_instance!, arg_event!); + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_error!) ?? + AdErrorEvent.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + error: arg_error!, + ), + arg_pigeon_instanceIdentifier!, + ); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -946,100 +938,55 @@ class AdsLoadedListener extends PigeonProxyApiBaseClass { } @override - AdsLoadedListener pigeon_copy() { - return AdsLoadedListener.pigeon_detached( + AdErrorEvent pigeon_copy() { + return AdErrorEvent.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, - onAdsManagerLoaded: onAdsManagerLoaded, + error: error, ); } } -/// Interface for classes that will listen to AdErrorEvents. +/// An error that occurred in the SDK. /// -/// 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 PigeonProxyApiBaseClass { - AdErrorListener({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.onAdError, - }) { - final int __pigeon_instanceIdentifier = - pigeon_instanceManager.addDartCreatedInstance(this); - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecAdErrorListener; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - () async { - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = await __pigeon_channel - .send([__pigeon_instanceIdentifier]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - }(); - } - - /// Constructs [AdErrorListener] without creating the associated native object. +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. +class AdError extends PigeonProxyApiBaseClass { + /// Constructs [AdError] 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 - AdErrorListener.pigeon_detached({ + AdError.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - required this.onAdError, + required this.errorCode, + required this.errorCodeNumber, + required this.errorType, + required this.message, }); - late final _PigeonProxyApiBaseCodec __pigeon_codecAdErrorListener = - _PigeonProxyApiBaseCodec(pigeon_instanceManager); + /// The error's code. + final AdErrorCode errorCode; - /// Called when an error occurs. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final AdErrorListener instance = AdErrorListener( - /// onAdError: (AdErrorListener pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - AdErrorListener pigeon_instance, - AdErrorEvent event, - ) onAdError; + /// The error code's number. + final int errorCodeNumber; + + /// The error's type. + final AdErrorType errorType; + + /// A human-readable summary of the error. + final String message; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - void Function( - AdErrorListener pigeon_instance, - AdErrorEvent event, - )? onAdError, + AdError Function( + AdErrorCode errorCode, + int errorCodeNumber, + AdErrorType errorType, + String message, + )? pigeon_newInstance, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -1048,7 +995,7 @@ class AdErrorListener extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError', + 'dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -1056,177 +1003,7 @@ class AdErrorListener extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null.'); - final List args = (message as List?)!; - final AdErrorListener? arg_pigeon_instance = - (args[0] as AdErrorListener?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null, expected non-null AdErrorListener.'); - final AdErrorEvent? arg_event = (args[1] as AdErrorEvent?); - assert(arg_event != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null, expected non-null AdErrorEvent.'); - try { - (onAdError ?? arg_pigeon_instance!.onAdError) - .call(arg_pigeon_instance!, arg_event!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - } - - @override - AdErrorListener pigeon_copy() { - return AdErrorListener.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - onAdError: onAdError, - ); - } -} - -/// An event raised when there is an error loading or playing ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. -class AdErrorEvent extends PigeonProxyApiBaseClass { - /// Constructs [AdErrorEvent] 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 - AdErrorEvent.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.error, - }); - - /// The AdError that caused this event. - final AdError error; - - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - AdErrorEvent Function(AdError error)? pigeon_newInstance, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; - { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.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.AdErrorEvent.pigeon_newInstance was null, expected non-null int.'); - final AdError? arg_error = (args[1] as AdError?); - assert(arg_error != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorEvent.pigeon_newInstance was null, expected non-null AdError.'); - try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call(arg_error!) ?? - AdErrorEvent.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - error: arg_error!, - ), - 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 - AdErrorEvent pigeon_copy() { - return AdErrorEvent.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - error: error, - ); - } -} - -/// An error that occurred in the SDK. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. -class AdError extends PigeonProxyApiBaseClass { - /// Constructs [AdError] 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 - AdError.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.errorCode, - required this.errorCodeNumber, - required this.errorType, - required this.message, - }); - - /// The error's code. - final AdErrorCode errorCode; - - /// The error code's number. - final int errorCodeNumber; - - /// The error's type. - final AdErrorType errorType; - - /// A human-readable summary of the error. - final String message; - - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - AdError Function( - AdErrorCode errorCode, - int errorCodeNumber, - AdErrorType errorType, - String message, - )? pigeon_newInstance, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; - { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdError.pigeon_newInstance was null.'); final List args = (message as List?)!; final int? arg_pigeon_instanceIdentifier = (args[0] as int?); assert(arg_pigeon_instanceIdentifier != null, @@ -1836,91 +1613,29 @@ class BaseManager extends PigeonProxyApiBaseClass { } } -/// Listener interface for ad events. +/// Event to notify publisher that an event occurred with an Ad. /// -/// 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 PigeonProxyApiBaseClass { - AdEventListener({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.onAdEvent, - }) { - final int __pigeon_instanceIdentifier = - pigeon_instanceManager.addDartCreatedInstance(this); - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecAdEventListener; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - () async { - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = await __pigeon_channel - .send([__pigeon_instanceIdentifier]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - }(); - } - - /// Constructs [AdEventListener] without creating the associated native object. +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. +class AdEvent extends PigeonProxyApiBaseClass { + /// Constructs [AdEvent] 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 - AdEventListener.pigeon_detached({ + AdEvent.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - required this.onAdEvent, + required this.type, }); - late final _PigeonProxyApiBaseCodec __pigeon_codecAdEventListener = - _PigeonProxyApiBaseCodec(pigeon_instanceManager); - - /// Respond to an occurrence of an AdEvent. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final AdEventListener instance = AdEventListener( - /// onAdEvent: (AdEventListener pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - AdEventListener pigeon_instance, - AdEvent event, - ) onAdEvent; + /// The type of event that occurred. + final AdEventType type; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - void Function( - AdEventListener pigeon_instance, - AdEvent event, - )? onAdEvent, + AdEvent Function(AdEventType type)? pigeon_newInstance, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -1929,7 +1644,7 @@ class AdEventListener extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent', + 'dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -1937,88 +1652,15 @@ class AdEventListener extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null.'); final List args = (message as List?)!; - final AdEventListener? arg_pigeon_instance = - (args[0] as AdEventListener?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null, expected non-null AdEventListener.'); - final AdEvent? arg_event = (args[1] as AdEvent?); - assert(arg_event != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null, expected non-null AdEvent.'); - try { - (onAdEvent ?? arg_pigeon_instance!.onAdEvent) - .call(arg_pigeon_instance!, arg_event!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - } - - @override - AdEventListener pigeon_copy() { - return AdEventListener.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - onAdEvent: onAdEvent, - ); - } -} - -/// Event to notify publisher that an event occurred with an Ad. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. -class AdEvent extends PigeonProxyApiBaseClass { - /// Constructs [AdEvent] 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 - AdEvent.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.type, - }); - - /// The type of event that occurred. - final AdEventType type; - - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - AdEvent Function(AdEventType type)? pigeon_newInstance, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; - { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.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.AdEvent.pigeon_newInstance was null, expected non-null int.'); - final AdEventType? arg_type = - args[1] == null ? null : AdEventType.values[args[1]! as int]; - assert(arg_type != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null, expected non-null AdEventType.'); + final int? arg_pigeon_instanceIdentifier = (args[0] as int?); + assert(arg_pigeon_instanceIdentifier != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null, expected non-null int.'); + final AdEventType? arg_type = + args[1] == null ? null : AdEventType.values[args[1]! as int]; + assert(arg_type != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEvent.pigeon_newInstance was null, expected non-null AdEventType.'); try { (pigeon_instanceManager ?? PigeonInstanceManager.instance) .addHostCreatedInstance( @@ -2374,38 +2016,33 @@ class ImaSdkSettings extends PigeonProxyApiBaseClass { } } -/// Defines the set of methods that a video player must implement to be used by -/// the IMA SDK, as well as a set of callbacks that it must fire. +/// Defines an update to the video's progress. /// -/// 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 PigeonProxyApiBaseClass { - VideoAdPlayer({ +/// 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 PigeonProxyApiBaseClass { + VideoProgressUpdate({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - required this.addCallback, - required this.loadAd, - required this.pauseAd, - required this.playAd, - required this.release, - required this.removeCallback, - required this.stopAd, + required int currentTimeMs, + required int durationMs, }) { final int __pigeon_instanceIdentifier = pigeon_instanceManager.addDartCreatedInstance(this); final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecVideoAdPlayer; + __pigeon_codecVideoProgressUpdate; final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; () async { const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor'; + 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor'; final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, pigeonChannelCodec, binaryMessenger: __pigeon_binaryMessenger, ); - final List? __pigeon_replyList = await __pigeon_channel - .send([__pigeon_instanceIdentifier]) as List?; + final List? __pigeon_replyList = await __pigeon_channel.send( + [__pigeon_instanceIdentifier, currentTimeMs, durationMs]) + as List?; if (__pigeon_replyList == null) { throw _createConnectionError(__pigeon_channelName); } else if (__pigeon_replyList.length > 1) { @@ -2420,125 +2057,608 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { }(); } - /// Constructs [VideoAdPlayer] without creating the associated native object. + /// Constructs [VideoProgressUpdate] 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 - VideoAdPlayer.pigeon_detached({ + VideoProgressUpdate.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - required this.addCallback, - required this.loadAd, - required this.pauseAd, - required this.playAd, - required this.release, - required this.removeCallback, - required this.stopAd, }); - late final _PigeonProxyApiBaseCodec __pigeon_codecVideoAdPlayer = + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoProgressUpdate = _PigeonProxyApiBaseCodec(pigeon_instanceManager); - /// Adds a callback. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// addCallback: (VideoAdPlayer pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoAdPlayer pigeon_instance, - VideoAdPlayerCallback callback, - ) addCallback; + /// Value to use for cases when progress is not yet defined, such as video + /// initialization. + static final VideoProgressUpdate videoTimeNotReady = + __pigeon_videoTimeNotReady(); - /// Loads a video ad hosted at AdMediaInfo. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// loadAd: (VideoAdPlayer pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - AdPodInfo adPodInfo, - ) loadAd; + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + VideoProgressUpdate Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.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.VideoProgressUpdate.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + VideoProgressUpdate.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } - /// Pauses playing the current ad. + static VideoProgressUpdate __pigeon_videoTimeNotReady() { + final VideoProgressUpdate __pigeon_instance = + VideoProgressUpdate.pigeon_detached(); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec(PigeonInstanceManager.instance); + final BinaryMessenger __pigeon_binaryMessenger = + ServicesBinding.instance.defaultBinaryMessenger; + final int __pigeon_instanceIdentifier = PigeonInstanceManager.instance + .addDartCreatedInstance(__pigeon_instance); + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + return __pigeon_instance; + } + + @override + VideoProgressUpdate pigeon_copy() { + return VideoProgressUpdate.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// The minimal information required to play an ad. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. +class AdMediaInfo extends PigeonProxyApiBaseClass { + /// Constructs [AdMediaInfo] without creating the associated native object. /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + AdMediaInfo.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.url, + }); + + final String url; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdMediaInfo Function(String url)? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.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.AdMediaInfo.pigeon_newInstance was null, expected non-null int.'); + final String? arg_url = (args[1] as String?); + assert(arg_url != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance was null, expected non-null String.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call(arg_url!) ?? + AdMediaInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + url: arg_url!, + ), + 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 + AdMediaInfo pigeon_copy() { + return AdMediaInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + url: url, + ); + } +} + +/// An ad may be part of a pod of ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. +class AdPodInfo extends PigeonProxyApiBaseClass { + /// Constructs [AdPodInfo] without creating the associated native object. /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// pauseAd: (VideoAdPlayer pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + AdPodInfo.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.adPosition, + required this.maxDuration, + required this.podIndex, + required this.timeOffset, + required this.totalAds, + required this.isBumper, + }); + + /// The position of the ad within the pod. /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - ) pauseAd; + /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the + /// ad is not part of a pod, this will return 1. + final int adPosition; + + /// The maximum duration of the pod in seconds. + /// + /// For unknown duration, -1 is returned. + final double maxDuration; + + /// Client side and DAI VOD: Returns the index of the ad pod. + final int podIndex; + + /// The content time offset at which the current ad pod was scheduled. + /// + /// For preroll pod, 0 is returned. For midrolls, the scheduled time is + /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this + /// ad is not part of a pod, or the pod is not part of an ad playlist. + final double timeOffset; + + /// The total number of ads contained within this pod, including bumpers. + final int totalAds; + + /// Returns true if the ad is a bumper ad. + final bool isBumper; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + AdPodInfo Function( + int adPosition, + double maxDuration, + int podIndex, + double timeOffset, + int totalAds, + bool isBumper, + )? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.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.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final int? arg_adPosition = (args[1] as int?); + assert(arg_adPosition != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final double? arg_maxDuration = (args[2] as double?); + assert(arg_maxDuration != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null double.'); + final int? arg_podIndex = (args[3] as int?); + assert(arg_podIndex != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final double? arg_timeOffset = (args[4] as double?); + assert(arg_timeOffset != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null double.'); + final int? arg_totalAds = (args[5] as int?); + assert(arg_totalAds != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); + final bool? arg_isBumper = (args[6] as bool?); + assert(arg_isBumper != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null bool.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call( + arg_adPosition!, + arg_maxDuration!, + arg_podIndex!, + arg_timeOffset!, + arg_totalAds!, + arg_isBumper!) ?? + AdPodInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adPosition: arg_adPosition!, + maxDuration: arg_maxDuration!, + podIndex: arg_podIndex!, + timeOffset: arg_timeOffset!, + totalAds: arg_totalAds!, + isBumper: arg_isBumper!, + ), + 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 + AdPodInfo pigeon_copy() { + return AdPodInfo.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + adPosition: adPosition, + maxDuration: maxDuration, + podIndex: podIndex, + timeOffset: timeOffset, + totalAds: totalAds, + isBumper: isBumper, + ); + } +} + +/// FrameLayout is designed to block out an area on the screen to display a +/// single item. +/// +/// See https://developer.android.com/reference/android/widget/FrameLayout. +class FrameLayout extends ViewGroup { + FrameLayout({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached() { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecFrameLayout; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [FrameLayout] 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 + FrameLayout.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached(); + + late final _PigeonProxyApiBaseCodec __pigeon_codecFrameLayout = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + FrameLayout Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.FrameLayout.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.FrameLayout.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + FrameLayout.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } - /// Starts or resumes playing the video ad referenced by the AdMediaInfo, - /// provided loadAd has already been called for it. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: + @override + FrameLayout pigeon_copy() { + return FrameLayout.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// A special view that can contain other views (called children.) +/// +/// See https://developer.android.com/reference/android/view/ViewGroup. +class ViewGroup extends View { + /// Constructs [ViewGroup] without creating the associated native object. /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// playAd: (VideoAdPlayer pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + ViewGroup.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }) : super.pigeon_detached(); + + late final _PigeonProxyApiBaseCodec __pigeon_codecViewGroup = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + ViewGroup Function()? pigeon_newInstance, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.ViewGroup.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.ViewGroup.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + ViewGroup.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); + } + } + } + + Future addView(View view) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecViewGroup; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, view]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + @override + ViewGroup pigeon_copy() { + return ViewGroup.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// Displays a video file. +/// +/// See https://developer.android.com/reference/android/widget/VideoView. +class VideoView extends View { + VideoView({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + this.onPrepared, + this.onCompletion, + required this.onError, + }) : super.pigeon_detached() { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [VideoView] without creating the associated native object. /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - ) playAd; + /// This should only be used by subclasses created by this library or to + /// create copies for an [PigeonInstanceManager]. + @protected + VideoView.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + this.onPrepared, + this.onCompletion, + required this.onError, + }) : super.pigeon_detached(); - /// Cleans up and releases all resources used by the `VideoAdPlayer`. + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoView = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Callback to be invoked when the media source is ready for playback. /// /// For the associated Native object to be automatically garbage collected, /// it is required that the implementation of this `Function` doesn't have a @@ -2548,8 +2668,8 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { /// /// ```dart /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// release: (VideoAdPlayer pigeon_instance, ...) { + /// final VideoView instance = VideoView( + /// onPrepared: (VideoView pigeon_instance, ...) { /// print(weakMyVariable?.target); /// }, /// ); @@ -2557,9 +2677,12 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { /// /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to /// release the associated Native object manually. - final void Function(VideoAdPlayer pigeon_instance) release; + final void Function( + VideoView pigeon_instance, + MediaPlayer player, + )? onPrepared; - /// Removes a callback. + /// Callback to be invoked when playback of a media source has completed. /// /// For the associated Native object to be automatically garbage collected, /// it is required that the implementation of this `Function` doesn't have a @@ -2569,8 +2692,8 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { /// /// ```dart /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// removeCallback: (VideoAdPlayer pigeon_instance, ...) { + /// final VideoView instance = VideoView( + /// onCompletion: (VideoView pigeon_instance, ...) { /// print(weakMyVariable?.target); /// }, /// ); @@ -2579,11 +2702,12 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to /// release the associated Native object manually. final void Function( - VideoAdPlayer pigeon_instance, - VideoAdPlayerCallback callback, - ) removeCallback; + VideoView pigeon_instance, + MediaPlayer player, + )? onCompletion; - /// Stops playing the current ad. + /// Callback to be invoked when there has been an error during an asynchronous + /// operation. /// /// For the associated Native object to be automatically garbage collected, /// it is required that the implementation of this `Function` doesn't have a @@ -2593,8 +2717,8 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { /// /// ```dart /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoAdPlayer instance = VideoAdPlayer( - /// stopAd: (VideoAdPlayer pigeon_instance, ...) { + /// final VideoView instance = VideoView( + /// onError: (VideoView pigeon_instance, ...) { /// print(weakMyVariable?.target); /// }, /// ); @@ -2603,155 +2727,39 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to /// release the associated Native object manually. final void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - ) stopAd; + VideoView pigeon_instance, + MediaPlayer player, + int what, + int extra, + ) onError; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, void Function( - VideoAdPlayer pigeon_instance, - VideoAdPlayerCallback callback, - )? addCallback, - void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - AdPodInfo adPodInfo, - )? loadAd, - void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - )? pauseAd, - void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - )? playAd, - void Function(VideoAdPlayer pigeon_instance)? release, + VideoView pigeon_instance, + MediaPlayer player, + )? onPrepared, void Function( - VideoAdPlayer pigeon_instance, - VideoAdPlayerCallback callback, - )? removeCallback, + VideoView pigeon_instance, + MediaPlayer player, + )? onCompletion, void Function( - VideoAdPlayer pigeon_instance, - AdMediaInfo adMediaInfo, - )? stopAd, + VideoView pigeon_instance, + MediaPlayer player, + int what, + int extra, + )? onError, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( pigeon_instanceManager ?? PigeonInstanceManager.instance); final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; - { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null.'); - final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null, expected non-null VideoAdPlayer.'); - final VideoAdPlayerCallback? arg_callback = - (args[1] as VideoAdPlayerCallback?); - assert(arg_callback != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null, expected non-null VideoAdPlayerCallback.'); - try { - (addCallback ?? arg_pigeon_instance!.addCallback) - .call(arg_pigeon_instance!, arg_callback!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - - { - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null.'); - final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null VideoAdPlayer.'); - final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); - assert(arg_adMediaInfo != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null AdMediaInfo.'); - final AdPodInfo? arg_adPodInfo = (args[2] as AdPodInfo?); - assert(arg_adPodInfo != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null AdPodInfo.'); - try { - (loadAd ?? arg_pigeon_instance!.loadAd) - .call(arg_pigeon_instance!, arg_adMediaInfo!, arg_adPodInfo!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - - { - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null.'); - final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null, expected non-null VideoAdPlayer.'); - final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); - assert(arg_adMediaInfo != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null, expected non-null AdMediaInfo.'); - try { - (pauseAd ?? arg_pigeon_instance!.pauseAd) - .call(arg_pigeon_instance!, arg_adMediaInfo!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - { final BasicMessageChannel __pigeon_channel = BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd', + 'dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -2759,18 +2767,17 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null.'); final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); + final VideoView? arg_pigeon_instance = (args[0] as VideoView?); assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null, expected non-null VideoAdPlayer.'); - final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); - assert(arg_adMediaInfo != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null, expected non-null AdMediaInfo.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null, expected non-null VideoView.'); + final MediaPlayer? arg_player = (args[1] as MediaPlayer?); + assert(arg_player != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null, expected non-null MediaPlayer.'); try { - (playAd ?? arg_pigeon_instance!.playAd) - .call(arg_pigeon_instance!, arg_adMediaInfo!); + (onPrepared ?? arg_pigeon_instance!.onPrepared) + ?.call(arg_pigeon_instance!, arg_player!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2785,7 +2792,7 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release', + 'dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -2793,50 +2800,17 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release was null.'); - final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release was null, expected non-null VideoAdPlayer.'); - try { - (release ?? arg_pigeon_instance!.release) - .call(arg_pigeon_instance!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - - { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null.'); final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); + final VideoView? arg_pigeon_instance = (args[0] as VideoView?); assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null, expected non-null VideoAdPlayer.'); - final VideoAdPlayerCallback? arg_callback = - (args[1] as VideoAdPlayerCallback?); - assert(arg_callback != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null, expected non-null VideoAdPlayerCallback.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null, expected non-null VideoView.'); + final MediaPlayer? arg_player = (args[1] as MediaPlayer?); + assert(arg_player != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null, expected non-null MediaPlayer.'); try { - (removeCallback ?? arg_pigeon_instance!.removeCallback) - .call(arg_pigeon_instance!, arg_callback!); + (onCompletion ?? arg_pigeon_instance!.onCompletion) + ?.call(arg_pigeon_instance!, arg_player!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2851,7 +2825,7 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd', + 'dev.flutter.pigeon.interactive_media_ads.VideoView.onError', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -2859,18 +2833,23 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null.'); final List args = (message as List?)!; - final VideoAdPlayer? arg_pigeon_instance = - (args[0] as VideoAdPlayer?); + final VideoView? arg_pigeon_instance = (args[0] as VideoView?); assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null, expected non-null VideoAdPlayer.'); - final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); - assert(arg_adMediaInfo != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null, expected non-null AdMediaInfo.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null VideoView.'); + final MediaPlayer? arg_player = (args[1] as MediaPlayer?); + assert(arg_player != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null MediaPlayer.'); + final int? arg_what = (args[2] as int?); + assert(arg_what != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null int.'); + final int? arg_extra = (args[3] as int?); + assert(arg_extra != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null int.'); try { - (stopAd ?? arg_pigeon_instance!.stopAd) - .call(arg_pigeon_instance!, arg_adMediaInfo!); + (onError ?? arg_pigeon_instance!.onError) + .call(arg_pigeon_instance!, arg_player!, arg_what!, arg_extra!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -2883,13 +2862,12 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { } } - /// The volume of the player as a percentage from 0 to 100. - Future setVolume(int value) async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecVideoAdPlayer; + /// Sets the URI of the video. + Future setVideoUri(String uri) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume'; + 'dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri'; final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, @@ -2897,7 +2875,7 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { binaryMessenger: __pigeon_binaryMessenger, ); final List? __pigeon_replyList = - await __pigeon_channel.send([this, value]) as List?; + await __pigeon_channel.send([this, uri]) as List?; if (__pigeon_replyList == null) { throw _createConnectionError(__pigeon_channelName); } else if (__pigeon_replyList.length > 1) { @@ -2911,22 +2889,22 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { } } - /// The `VideoProgressUpdate` describing playback progress of the current - /// video. - Future setAdProgress(VideoProgressUpdate progress) async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecVideoAdPlayer; + /// The current position of the playing video. + /// + /// In milliseconds. + Future getCurrentPosition() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress'; + 'dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition'; final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, pigeonChannelCodec, binaryMessenger: __pigeon_binaryMessenger, ); - final List? __pigeon_replyList = await __pigeon_channel - .send([this, progress]) as List?; + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; if (__pigeon_replyList == null) { throw _createConnectionError(__pigeon_channelName); } else if (__pigeon_replyList.length > 1) { @@ -2935,91 +2913,122 @@ class VideoAdPlayer extends PigeonProxyApiBaseClass { message: __pigeon_replyList[1] as String?, details: __pigeon_replyList[2], ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); } else { - return; + return (__pigeon_replyList[0] as int?)!; } } @override - VideoAdPlayer pigeon_copy() { - return VideoAdPlayer.pigeon_detached( + VideoView pigeon_copy() { + return VideoView.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, - addCallback: addCallback, - loadAd: loadAd, - pauseAd: pauseAd, - playAd: playAd, - release: release, - removeCallback: removeCallback, - stopAd: stopAd, + onPrepared: onPrepared, + onCompletion: onCompletion, + onError: onError, ); } } -/// Defines an update to the video's progress. +/// This class represents the basic building block for user interface components. /// -/// 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 PigeonProxyApiBaseClass { - VideoProgressUpdate({ +/// See https://developer.android.com/reference/android/view/View. +class View extends PigeonProxyApiBaseClass { + /// Constructs [View] 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 + View.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - required int currentTimeMs, - required int durationMs, + }); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + View Function()? pigeon_newInstance, }) { - final int __pigeon_instanceIdentifier = - pigeon_instanceManager.addDartCreatedInstance(this); final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecVideoProgressUpdate; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - () async { - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_defaultConstructor'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = await __pigeon_channel.send( - [__pigeon_instanceIdentifier, currentTimeMs, durationMs]) - as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); } else { - return; + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.View.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.View.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + View.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ), + 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())); + } + }); } - }(); + } } - /// Constructs [VideoProgressUpdate] without creating the associated native object. + @override + View pigeon_copy() { + return View.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + ); + } +} + +/// MediaPlayer class can be used to control playback of audio/video files and +/// streams. +/// +/// See https://developer.android.com/reference/android/media/MediaPlayer. +class MediaPlayer extends PigeonProxyApiBaseClass { + /// Constructs [MediaPlayer] 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 - VideoProgressUpdate.pigeon_detached({ + MediaPlayer.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, }); - late final _PigeonProxyApiBaseCodec __pigeon_codecVideoProgressUpdate = + late final _PigeonProxyApiBaseCodec __pigeon_codecMediaPlayer = _PigeonProxyApiBaseCodec(pigeon_instanceManager); - /// Value to use for cases when progress is not yet defined, such as video - /// initialization. - static final VideoProgressUpdate videoTimeNotReady = - __pigeon_videoTimeNotReady(); - static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - VideoProgressUpdate Function()? pigeon_newInstance, + MediaPlayer Function()? pigeon_newInstance, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -3028,7 +3037,7 @@ class VideoProgressUpdate extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -3036,16 +3045,16 @@ class VideoProgressUpdate extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.MediaPlayer.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.VideoProgressUpdate.pigeon_newInstance was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance was null, expected non-null int.'); try { (pigeon_instanceManager ?? PigeonInstanceManager.instance) .addHostCreatedInstance( pigeon_newInstance?.call() ?? - VideoProgressUpdate.pigeon_detached( + MediaPlayer.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, ), @@ -3063,44 +3072,154 @@ class VideoProgressUpdate extends PigeonProxyApiBaseClass { } } - static VideoProgressUpdate __pigeon_videoTimeNotReady() { - final VideoProgressUpdate __pigeon_instance = - VideoProgressUpdate.pigeon_detached(); + /// Gets the duration of the file. + Future getDuration() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else if (__pigeon_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (__pigeon_replyList[0] as int?)!; + } + } + + /// Seeks to specified time position. + Future seekTo(int mSec) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this, mSec]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Starts or resumes playback. + Future start() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Pauses playback. + Future pause() async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// Stops playback after playback has been started or paused. + Future stop() async { final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec(PigeonInstanceManager.instance); - final BinaryMessenger __pigeon_binaryMessenger = - ServicesBinding.instance.defaultBinaryMessenger; - final int __pigeon_instanceIdentifier = PigeonInstanceManager.instance - .addDartCreatedInstance(__pigeon_instance); - () async { - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoProgressUpdate.videoTimeNotReady'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, + __pigeon_codecMediaPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = + await __pigeon_channel.send([this]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); - final List? __pigeon_replyList = await __pigeon_channel - .send([__pigeon_instanceIdentifier]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - }(); - return __pigeon_instance; + } else { + return; + } } @override - VideoProgressUpdate pigeon_copy() { - return VideoProgressUpdate.pigeon_detached( + MediaPlayer pigeon_copy() { + return MediaPlayer.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, ); @@ -3468,28 +3587,269 @@ class VideoAdPlayerCallback extends PigeonProxyApiBaseClass { } } -/// The minimal information required to play an ad. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. -class AdMediaInfo extends PigeonProxyApiBaseClass { - /// Constructs [AdMediaInfo] without creating the associated native object. +/// Defines the set of methods that a video player must implement to be used by +/// the IMA SDK, as well as a set of callbacks that it must fire. +/// +/// 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 PigeonProxyApiBaseClass { + VideoAdPlayer({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.addCallback, + required this.loadAd, + required this.pauseAd, + required this.playAd, + required this.release, + required this.removeCallback, + required this.stopAd, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [VideoAdPlayer] 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 + VideoAdPlayer.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.addCallback, + required this.loadAd, + required this.pauseAd, + required this.playAd, + required this.release, + required this.removeCallback, + required this.stopAd, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecVideoAdPlayer = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Adds a callback. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// addCallback: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) addCallback; + + /// Loads a video ad hosted at AdMediaInfo. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// loadAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + ) loadAd; + + /// Pauses playing the current ad. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// pauseAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) pauseAd; + + /// Starts or resumes playing the video ad referenced by the AdMediaInfo, + /// provided loadAd has already been called for it. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// playAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) playAd; + + /// Cleans up and releases all resources used by the `VideoAdPlayer`. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// release: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function(VideoAdPlayer pigeon_instance) release; + + /// Removes a callback. /// - /// This should only be used by subclasses created by this library or to - /// create copies for an [PigeonInstanceManager]. - @protected - AdMediaInfo.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.url, - }); + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// removeCallback: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + ) removeCallback; - final String url; + /// Stops playing the current ad. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final VideoAdPlayer instance = VideoAdPlayer( + /// stopAd: (VideoAdPlayer pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + ) stopAd; static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - AdMediaInfo Function(String url)? pigeon_newInstance, + void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + )? addCallback, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + AdPodInfo adPodInfo, + )? loadAd, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + )? pauseAd, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + )? playAd, + void Function(VideoAdPlayer pigeon_instance)? release, + void Function( + VideoAdPlayer pigeon_instance, + VideoAdPlayerCallback callback, + )? removeCallback, + void Function( + VideoAdPlayer pigeon_instance, + AdMediaInfo adMediaInfo, + )? stopAd, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -3498,7 +3858,7 @@ class AdMediaInfo extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -3506,25 +3866,19 @@ class AdMediaInfo extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback 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.AdMediaInfo.pigeon_newInstance was null, expected non-null int.'); - final String? arg_url = (args[1] as String?); - assert(arg_url != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdMediaInfo.pigeon_newInstance was null, expected non-null String.'); + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null, expected non-null VideoAdPlayer.'); + final VideoAdPlayerCallback? arg_callback = + (args[1] as VideoAdPlayerCallback?); + assert(arg_callback != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.addCallback was null, expected non-null VideoAdPlayerCallback.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call(arg_url!) ?? - AdMediaInfo.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - url: arg_url!, - ), - arg_pigeon_instanceIdentifier!, - ); + (addCallback ?? arg_pigeon_instance!.addCallback) + .call(arg_pigeon_instance!, arg_callback!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -3535,138 +3889,101 @@ class AdMediaInfo extends PigeonProxyApiBaseClass { }); } } - } - - @override - AdMediaInfo pigeon_copy() { - return AdMediaInfo.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - url: url, - ); - } -} -/// An ad may be part of a pod of ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. -class AdPodInfo extends PigeonProxyApiBaseClass { - /// Constructs [AdPodInfo] 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 - AdPodInfo.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - required this.adPosition, - required this.maxDuration, - required this.podIndex, - required this.timeOffset, - required this.totalAds, - required this.isBumper, - }); - - /// The position of the ad within the pod. - /// - /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the - /// ad is not part of a pod, this will return 1. - final int adPosition; - - /// The maximum duration of the pod in seconds. - /// - /// For unknown duration, -1 is returned. - final double maxDuration; - - /// Client side and DAI VOD: Returns the index of the ad pod. - final int podIndex; - - /// The content time offset at which the current ad pod was scheduled. - /// - /// For preroll pod, 0 is returned. For midrolls, the scheduled time is - /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this - /// ad is not part of a pod, or the pod is not part of an ad playlist. - final double timeOffset; - - /// The total number of ads contained within this pod, including bumpers. - final int totalAds; - - /// Returns true if the ad is a bumper ad. - final bool isBumper; + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null AdMediaInfo.'); + final AdPodInfo? arg_adPodInfo = (args[2] as AdPodInfo?); + assert(arg_adPodInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.loadAd was null, expected non-null AdPodInfo.'); + try { + (loadAd ?? arg_pigeon_instance!.loadAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!, arg_adPodInfo!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } + + { + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.pauseAd was null, expected non-null AdMediaInfo.'); + try { + (pauseAd ?? arg_pigeon_instance!.pauseAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - AdPodInfo Function( - int adPosition, - double maxDuration, - int podIndex, - double timeOffset, - int totalAds, - bool isBumper, - )? pigeon_newInstance, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { __pigeon_channel.setMessageHandler(null); } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd 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.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); - final int? arg_adPosition = (args[1] as int?); - assert(arg_adPosition != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); - final double? arg_maxDuration = (args[2] as double?); - assert(arg_maxDuration != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null double.'); - final int? arg_podIndex = (args[3] as int?); - assert(arg_podIndex != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); - final double? arg_timeOffset = (args[4] as double?); - assert(arg_timeOffset != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null double.'); - final int? arg_totalAds = (args[5] as int?); - assert(arg_totalAds != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null int.'); - final bool? arg_isBumper = (args[6] as bool?); - assert(arg_isBumper != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.AdPodInfo.pigeon_newInstance was null, expected non-null bool.'); + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.playAd was null, expected non-null AdMediaInfo.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call( - arg_adPosition!, - arg_maxDuration!, - arg_podIndex!, - arg_timeOffset!, - arg_totalAds!, - arg_isBumper!) ?? - AdPodInfo.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - adPosition: arg_adPosition!, - maxDuration: arg_maxDuration!, - podIndex: arg_podIndex!, - timeOffset: arg_timeOffset!, - totalAds: arg_totalAds!, - isBumper: arg_isBumper!, - ), - arg_pigeon_instanceIdentifier!, - ); + (playAd ?? arg_pigeon_instance!.playAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -3677,89 +3994,42 @@ class AdPodInfo extends PigeonProxyApiBaseClass { }); } } - } - - @override - AdPodInfo pigeon_copy() { - return AdPodInfo.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - adPosition: adPosition, - maxDuration: maxDuration, - podIndex: podIndex, - timeOffset: timeOffset, - totalAds: totalAds, - isBumper: isBumper, - ); - } -} -/// FrameLayout is designed to block out an area on the screen to display a -/// single item. -/// -/// See https://developer.android.com/reference/android/widget/FrameLayout. -class FrameLayout extends ViewGroup { - FrameLayout({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - }) : super.pigeon_detached() { - final int __pigeon_instanceIdentifier = - pigeon_instanceManager.addDartCreatedInstance(this); - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecFrameLayout; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - () async { - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_defaultConstructor'; + { final BasicMessageChannel __pigeon_channel = BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = await __pigeon_channel - .send([__pigeon_instanceIdentifier]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); } else { - return; + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release was null.'); + final List args = (message as List?)!; + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.release was null, expected non-null VideoAdPlayer.'); + try { + (release ?? arg_pigeon_instance!.release) + .call(arg_pigeon_instance!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); } - }(); - } - - /// Constructs [FrameLayout] 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 - FrameLayout.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - }) : super.pigeon_detached(); - - late final _PigeonProxyApiBaseCodec __pigeon_codecFrameLayout = - _PigeonProxyApiBaseCodec(pigeon_instanceManager); + } - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - FrameLayout Function()? pigeon_newInstance, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -3767,21 +4037,19 @@ class FrameLayout extends ViewGroup { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.FrameLayout.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback 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.FrameLayout.pigeon_newInstance was null, expected non-null int.'); + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null, expected non-null VideoAdPlayer.'); + final VideoAdPlayerCallback? arg_callback = + (args[1] as VideoAdPlayerCallback?); + assert(arg_callback != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.removeCallback was null, expected non-null VideoAdPlayerCallback.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - FrameLayout.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ), - arg_pigeon_instanceIdentifier!, - ); + (removeCallback ?? arg_pigeon_instance!.removeCallback) + .call(arg_pigeon_instance!, arg_callback!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -3792,70 +4060,30 @@ class FrameLayout extends ViewGroup { }); } } - } - - @override - FrameLayout pigeon_copy() { - return FrameLayout.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ); - } -} - -/// A special view that can contain other views (called children.) -/// -/// See https://developer.android.com/reference/android/view/ViewGroup. -class ViewGroup extends View { - /// Constructs [ViewGroup] 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 - ViewGroup.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - }) : super.pigeon_detached(); - - late final _PigeonProxyApiBaseCodec __pigeon_codecViewGroup = - _PigeonProxyApiBaseCodec(pigeon_instanceManager); - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - ViewGroup Function()? pigeon_newInstance, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; { - final BasicMessageChannel __pigeon_channel = BasicMessageChannel< - Object?>( - 'dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { __pigeon_channel.setMessageHandler(null); } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.ViewGroup.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd 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.ViewGroup.pigeon_newInstance was null, expected non-null int.'); - try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - ViewGroup.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ), - arg_pigeon_instanceIdentifier!, - ); + final VideoAdPlayer? arg_pigeon_instance = + (args[0] as VideoAdPlayer?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null, expected non-null VideoAdPlayer.'); + final AdMediaInfo? arg_adMediaInfo = (args[1] as AdMediaInfo?); + assert(arg_adMediaInfo != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.stopAd was null, expected non-null AdMediaInfo.'); + try { + (stopAd ?? arg_pigeon_instance!.stopAd) + .call(arg_pigeon_instance!, arg_adMediaInfo!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -3868,11 +4096,13 @@ class ViewGroup extends View { } } - Future addView(View view) async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecViewGroup; + /// The volume of the player as a percentage from 0 to 100. + Future setVolume(int value) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayer; final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.ViewGroup.addView'; + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setVolume'; final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, @@ -3880,7 +4110,36 @@ class ViewGroup extends View { binaryMessenger: __pigeon_binaryMessenger, ); final List? __pigeon_replyList = - await __pigeon_channel.send([this, view]) as List?; + await __pigeon_channel.send([this, value]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + } + + /// The `VideoProgressUpdate` describing playback progress of the current + /// video. + Future setAdProgress(VideoProgressUpdate progress) async { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecVideoAdPlayer; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.VideoAdPlayer.setAdProgress'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([this, progress]) as List?; if (__pigeon_replyList == null) { throw _createConnectionError(__pigeon_channelName); } else if (__pigeon_replyList.length > 1) { @@ -3895,32 +4154,38 @@ class ViewGroup extends View { } @override - ViewGroup pigeon_copy() { - return ViewGroup.pigeon_detached( + VideoAdPlayer pigeon_copy() { + return VideoAdPlayer.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + addCallback: addCallback, + loadAd: loadAd, + pauseAd: pauseAd, + playAd: playAd, + release: release, + removeCallback: removeCallback, + stopAd: stopAd, ); } } -/// Displays a video file. +/// Listener interface for notification of ad load or stream load completion. /// -/// See https://developer.android.com/reference/android/widget/VideoView. -class VideoView extends View { - VideoView({ +/// 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 PigeonProxyApiBaseClass { + AdsLoadedListener({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, - this.onPrepared, - this.onCompletion, - required this.onError, - }) : super.pigeon_detached() { + required this.onAdsManagerLoaded, + }) { final int __pigeon_instanceIdentifier = pigeon_instanceManager.addDartCreatedInstance(this); - final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdsLoadedListener; final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; () async { const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoView.pigeon_defaultConstructor'; + 'dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.pigeon_defaultConstructor'; final BasicMessageChannel __pigeon_channel = BasicMessageChannel( __pigeon_channelName, @@ -3943,214 +4208,81 @@ class VideoView extends View { }(); } - /// Constructs [VideoView] without creating the associated native object. + /// Constructs [AdsLoadedListener] 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 - VideoView.pigeon_detached({ - super.pigeon_binaryMessenger, - super.pigeon_instanceManager, - this.onPrepared, - this.onCompletion, - required this.onError, - }) : super.pigeon_detached(); - - late final _PigeonProxyApiBaseCodec __pigeon_codecVideoView = - _PigeonProxyApiBaseCodec(pigeon_instanceManager); - - /// Callback to be invoked when the media source is ready for playback. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoView instance = VideoView( - /// onPrepared: (VideoView pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoView pigeon_instance, - MediaPlayer player, - )? onPrepared; - - /// Callback to be invoked when playback of a media source has completed. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoView instance = VideoView( - /// onCompletion: (VideoView pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoView pigeon_instance, - MediaPlayer player, - )? onCompletion; - - /// Callback to be invoked when there has been an error during an asynchronous - /// operation. - /// - /// For the associated Native object to be automatically garbage collected, - /// it is required that the implementation of this `Function` doesn't have a - /// strong reference to the encapsulating class instance. When this `Function` - /// references a non-local variable, it is strongly recommended to access it - /// with a `WeakReference`: - /// - /// ```dart - /// final WeakReference weakMyVariable = WeakReference(myVariable); - /// final VideoView instance = VideoView( - /// onError: (VideoView pigeon_instance, ...) { - /// print(weakMyVariable?.target); - /// }, - /// ); - /// ``` - /// - /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to - /// release the associated Native object manually. - final void Function( - VideoView pigeon_instance, - MediaPlayer player, - int what, - int extra, - ) onError; - - static void pigeon_setUpMessageHandlers({ - bool pigeon_clearHandlers = false, - BinaryMessenger? pigeon_binaryMessenger, - PigeonInstanceManager? pigeon_instanceManager, - void Function( - VideoView pigeon_instance, - MediaPlayer player, - )? onPrepared, - void Function( - VideoView pigeon_instance, - MediaPlayer player, - )? onCompletion, - void Function( - VideoView pigeon_instance, - MediaPlayer player, - int what, - int extra, - )? onError, - }) { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - _PigeonProxyApiBaseCodec( - pigeon_instanceManager ?? PigeonInstanceManager.instance); - final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; - { - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null.'); - final List args = (message as List?)!; - final VideoView? arg_pigeon_instance = (args[0] as VideoView?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null, expected non-null VideoView.'); - final MediaPlayer? arg_player = (args[1] as MediaPlayer?); - assert(arg_player != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onPrepared was null, expected non-null MediaPlayer.'); - try { - (onPrepared ?? arg_pigeon_instance!.onPrepared) - ?.call(arg_pigeon_instance!, arg_player!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } - - { - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); - if (pigeon_clearHandlers) { - __pigeon_channel.setMessageHandler(null); - } else { - __pigeon_channel.setMessageHandler((Object? message) async { - assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null.'); - final List args = (message as List?)!; - final VideoView? arg_pigeon_instance = (args[0] as VideoView?); - assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null, expected non-null VideoView.'); - final MediaPlayer? arg_player = (args[1] as MediaPlayer?); - assert(arg_player != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onCompletion was null, expected non-null MediaPlayer.'); - try { - (onCompletion ?? arg_pigeon_instance!.onCompletion) - ?.call(arg_pigeon_instance!, arg_player!); - return wrapResponse(empty: true); - } on PlatformException catch (e) { - return wrapResponse(error: e); - } catch (e) { - return wrapResponse( - error: PlatformException(code: 'error', message: e.toString())); - } - }); - } - } + /// create copies for an [PigeonInstanceManager]. + @protected + AdsLoadedListener.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdsManagerLoaded, + }); + + late final _PigeonProxyApiBaseCodec __pigeon_codecAdsLoadedListener = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Called once the AdsManager or StreamManager has been loaded. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final AdsLoadedListener instance = AdsLoadedListener( + /// onAdsManagerLoaded: (AdsLoadedListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + AdsLoadedListener pigeon_instance, + AdsManagerLoadedEvent event, + ) onAdsManagerLoaded; + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function( + AdsLoadedListener pigeon_instance, + AdsManagerLoadedEvent event, + )? onAdsManagerLoaded, + }) { + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + _PigeonProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; { - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - 'dev.flutter.pigeon.interactive_media_ads.VideoView.onError', - pigeonChannelCodec, - binaryMessenger: binaryMessenger); + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { __pigeon_channel.setMessageHandler(null); } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null.'); final List args = (message as List?)!; - final VideoView? arg_pigeon_instance = (args[0] as VideoView?); + final AdsLoadedListener? arg_pigeon_instance = + (args[0] as AdsLoadedListener?); assert(arg_pigeon_instance != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null VideoView.'); - final MediaPlayer? arg_player = (args[1] as MediaPlayer?); - assert(arg_player != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null MediaPlayer.'); - final int? arg_what = (args[2] as int?); - assert(arg_what != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null int.'); - final int? arg_extra = (args[3] as int?); - assert(arg_extra != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.VideoView.onError was null, expected non-null int.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null, expected non-null AdsLoadedListener.'); + final AdsManagerLoadedEvent? arg_event = + (args[1] as AdsManagerLoadedEvent?); + assert(arg_event != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdsLoadedListener.onAdsManagerLoaded was null, expected non-null AdsManagerLoadedEvent.'); try { - (onError ?? arg_pigeon_instance!.onError) - .call(arg_pigeon_instance!, arg_player!, arg_what!, arg_extra!); + (onAdsManagerLoaded ?? arg_pigeon_instance!.onAdsManagerLoaded) + .call(arg_pigeon_instance!, arg_event!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -4163,98 +4295,101 @@ class VideoView extends View { } } - /// Sets the URI of the video. - Future setVideoUri(String uri) async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoView.setVideoUri'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this, uri]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - } - - /// The current position of the playing video. - /// - /// In milliseconds. - Future getCurrentPosition() async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = __pigeon_codecVideoView; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.VideoView.getCurrentPosition'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else if (__pigeon_replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (__pigeon_replyList[0] as int?)!; - } - } - @override - VideoView pigeon_copy() { - return VideoView.pigeon_detached( + AdsLoadedListener pigeon_copy() { + return AdsLoadedListener.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, - onPrepared: onPrepared, - onCompletion: onCompletion, - onError: onError, + onAdsManagerLoaded: onAdsManagerLoaded, ); } } -/// This class represents the basic building block for user interface components. +/// Interface for classes that will listen to AdErrorEvents. /// -/// See https://developer.android.com/reference/android/view/View. -class View extends PigeonProxyApiBaseClass { - /// Constructs [View] without creating the associated native object. +/// 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 PigeonProxyApiBaseClass { + AdErrorListener({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdError, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdErrorListener; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdErrorListener.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [AdErrorListener] 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 - View.pigeon_detached({ + AdErrorListener.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, + required this.onAdError, }); + late final _PigeonProxyApiBaseCodec __pigeon_codecAdErrorListener = + _PigeonProxyApiBaseCodec(pigeon_instanceManager); + + /// Called when an error occurs. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final AdErrorListener instance = AdErrorListener( + /// onAdError: (AdErrorListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + AdErrorListener pigeon_instance, + AdErrorEvent event, + ) onAdError; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - View Function()? pigeon_newInstance, + void Function( + AdErrorListener pigeon_instance, + AdErrorEvent event, + )? onAdError, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -4263,7 +4398,7 @@ class View extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -4271,21 +4406,18 @@ class View extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.View.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError 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.View.pigeon_newInstance was null, expected non-null int.'); + final AdErrorListener? arg_pigeon_instance = + (args[0] as AdErrorListener?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null, expected non-null AdErrorListener.'); + final AdErrorEvent? arg_event = (args[1] as AdErrorEvent?); + assert(arg_event != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdErrorListener.onAdError was null, expected non-null AdErrorEvent.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - View.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ), - arg_pigeon_instanceIdentifier!, - ); + (onAdError ?? arg_pigeon_instance!.onAdError) + .call(arg_pigeon_instance!, arg_event!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -4299,37 +4431,100 @@ class View extends PigeonProxyApiBaseClass { } @override - View pigeon_copy() { - return View.pigeon_detached( + AdErrorListener pigeon_copy() { + return AdErrorListener.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + onAdError: onAdError, ); } } -/// MediaPlayer class can be used to control playback of audio/video files and -/// streams. +/// Listener interface for ad events. /// -/// See https://developer.android.com/reference/android/media/MediaPlayer. -class MediaPlayer extends PigeonProxyApiBaseClass { - /// Constructs [MediaPlayer] without creating the associated native object. +/// 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 PigeonProxyApiBaseClass { + AdEventListener({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onAdEvent, + }) { + final int __pigeon_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonProxyApiBaseCodec pigeonChannelCodec = + __pigeon_codecAdEventListener; + final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; + () async { + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.AdEventListener.pigeon_defaultConstructor'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, + pigeonChannelCodec, + binaryMessenger: __pigeon_binaryMessenger, + ); + final List? __pigeon_replyList = await __pigeon_channel + .send([__pigeon_instanceIdentifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { + throw PlatformException( + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [AdEventListener] 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 - MediaPlayer.pigeon_detached({ + AdEventListener.pigeon_detached({ super.pigeon_binaryMessenger, super.pigeon_instanceManager, + required this.onAdEvent, }); - late final _PigeonProxyApiBaseCodec __pigeon_codecMediaPlayer = + late final _PigeonProxyApiBaseCodec __pigeon_codecAdEventListener = _PigeonProxyApiBaseCodec(pigeon_instanceManager); + /// Respond to an occurrence of an AdEvent. + /// + /// For the associated Native object to be automatically garbage collected, + /// it is required that the implementation of this `Function` doesn't have a + /// strong reference to the encapsulating class instance. When this `Function` + /// references a non-local variable, it is strongly recommended to access it + /// with a `WeakReference`: + /// + /// ```dart + /// final WeakReference weakMyVariable = WeakReference(myVariable); + /// final AdEventListener instance = AdEventListener( + /// onAdEvent: (AdEventListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function( + AdEventListener pigeon_instance, + AdEvent event, + ) onAdEvent; + static void pigeon_setUpMessageHandlers({ bool pigeon_clearHandlers = false, BinaryMessenger? pigeon_binaryMessenger, PigeonInstanceManager? pigeon_instanceManager, - MediaPlayer Function()? pigeon_newInstance, + void Function( + AdEventListener pigeon_instance, + AdEvent event, + )? onAdEvent, }) { final _PigeonProxyApiBaseCodec pigeonChannelCodec = _PigeonProxyApiBaseCodec( @@ -4338,7 +4533,7 @@ class MediaPlayer extends PigeonProxyApiBaseClass { { final BasicMessageChannel __pigeon_channel = BasicMessageChannel< Object?>( - 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance', + 'dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent', pigeonChannelCodec, binaryMessenger: binaryMessenger); if (pigeon_clearHandlers) { @@ -4346,21 +4541,18 @@ class MediaPlayer extends PigeonProxyApiBaseClass { } else { __pigeon_channel.setMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pigeon_newInstance was null.'); + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent 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.MediaPlayer.pigeon_newInstance was null, expected non-null int.'); + final AdEventListener? arg_pigeon_instance = + (args[0] as AdEventListener?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null, expected non-null AdEventListener.'); + final AdEvent? arg_event = (args[1] as AdEvent?); + assert(arg_event != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.AdEventListener.onAdEvent was null, expected non-null AdEvent.'); try { - (pigeon_instanceManager ?? PigeonInstanceManager.instance) - .addHostCreatedInstance( - pigeon_newInstance?.call() ?? - MediaPlayer.pigeon_detached( - pigeon_binaryMessenger: pigeon_binaryMessenger, - pigeon_instanceManager: pigeon_instanceManager, - ), - arg_pigeon_instanceIdentifier!, - ); + (onAdEvent ?? arg_pigeon_instance!.onAdEvent) + .call(arg_pigeon_instance!, arg_event!); return wrapResponse(empty: true); } on PlatformException catch (e) { return wrapResponse(error: e); @@ -4373,157 +4565,12 @@ class MediaPlayer extends PigeonProxyApiBaseClass { } } - /// Gets the duration of the file. - Future getDuration() async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecMediaPlayer; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.getDuration'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else if (__pigeon_replyList[0] == null) { - throw PlatformException( - code: 'null-error', - message: 'Host platform returned null value for non-null return value.', - ); - } else { - return (__pigeon_replyList[0] as int?)!; - } - } - - /// Seeks to specified time position. - Future seekTo(int mSec) async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecMediaPlayer; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.seekTo'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this, mSec]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - } - - /// Starts or resumes playback. - Future start() async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecMediaPlayer; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.start'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - } - - /// Pauses playback. - Future pause() async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecMediaPlayer; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.pause'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - } - - /// Stops playback after playback has been started or paused. - Future stop() async { - final _PigeonProxyApiBaseCodec pigeonChannelCodec = - __pigeon_codecMediaPlayer; - final BinaryMessenger? __pigeon_binaryMessenger = pigeon_binaryMessenger; - const String __pigeon_channelName = - 'dev.flutter.pigeon.interactive_media_ads.MediaPlayer.stop'; - final BasicMessageChannel __pigeon_channel = - BasicMessageChannel( - __pigeon_channelName, - pigeonChannelCodec, - binaryMessenger: __pigeon_binaryMessenger, - ); - final List? __pigeon_replyList = - await __pigeon_channel.send([this]) as List?; - if (__pigeon_replyList == null) { - throw _createConnectionError(__pigeon_channelName); - } else if (__pigeon_replyList.length > 1) { - throw PlatformException( - code: __pigeon_replyList[0]! as String, - message: __pigeon_replyList[1] as String?, - details: __pigeon_replyList[2], - ); - } else { - return; - } - } - @override - MediaPlayer pigeon_copy() { - return MediaPlayer.pigeon_detached( + AdEventListener pigeon_copy() { + return AdEventListener.pigeon_detached( pigeon_binaryMessenger: pigeon_binaryMessenger, pigeon_instanceManager: pigeon_instanceManager, + onAdEvent: onAdEvent, ); } } - 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 bda0f1183bf..1e7bf1f8332 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -130,38 +130,6 @@ abstract class AdsManagerLoadedEvent { late final AdsManager manager; } -/// Listener interface for notification of ad load or stream load completion. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', - ), -) -abstract class AdsLoadedListener { - AdsLoadedListener(); - - /// Called once the AdsManager or StreamManager has been loaded. - late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; -} - -/// Interface for classes that will listen to AdErrorEvents. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', - ), -) -abstract class AdErrorListener { - AdErrorListener(); - - /// Called when an error occurs. - late final void Function(AdErrorEvent event) onAdError; -} - /// An event raised when there is an error loading or playing ads. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. @@ -270,22 +238,6 @@ abstract class BaseManager { void init(); } -/// Listener interface for ad events. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', - ), -) -abstract class AdEventListener { - AdEventListener(); - - /// Respond to an occurrence of an AdEvent. - late final void Function(AdEvent event) onAdEvent; -} - /// Event to notify publisher that an event occurred with an Ad. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. @@ -342,49 +294,6 @@ abstract class ImaSdkFactory { ) abstract class ImaSdkSettings {} -/// Defines the set of methods that a video player must implement to be used by -/// the IMA SDK, as well as a set of callbacks that it must fire. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', - ), -) -abstract class VideoAdPlayer { - VideoAdPlayer(); - - /// Adds a callback. - late final void Function(VideoAdPlayerCallback callback) addCallback; - - /// Loads a video ad hosted at AdMediaInfo. - late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; - - /// Pauses playing the current ad. - late final void Function(AdMediaInfo adMediaInfo) pauseAd; - - /// Starts or resumes playing the video ad referenced by the AdMediaInfo, - /// provided loadAd has already been called for it. - late final void Function(AdMediaInfo adMediaInfo) playAd; - - /// Cleans up and releases all resources used by the `VideoAdPlayer`. - late final void Function() release; - - /// Removes a callback. - late final void Function(VideoAdPlayerCallback callback) removeCallback; - - /// Stops playing the current ad. - late final void Function(AdMediaInfo adMediaInfo) stopAd; - - /// The volume of the player as a percentage from 0 to 100. - void setVolume(int value); - - /// The `VideoProgressUpdate` describing playback progress of the current - /// video. - void setAdProgress(VideoProgressUpdate progress); -} - /// Defines an update to the video's progress. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. @@ -404,50 +313,6 @@ abstract class VideoProgressUpdate { late final VideoProgressUpdate videoTimeNotReady; } -/// Callbacks that the player must fire. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', - ), -) -abstract class VideoAdPlayerCallback { - /// Fire this callback periodically as ad playback occurs. - void onAdProgress( - AdMediaInfo adMediaInfo, - VideoProgressUpdate videoProgressUpdate, - ); - - /// Fire this callback when video playback stalls waiting for data. - void onBuffering(AdMediaInfo adMediaInfo); - - /// Fire this callback when all content has finished playing. - void onContentComplete(); - - /// Fire this callback when the video finishes playing. - void onEnded(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video has encountered an error. - void onError(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is ready to begin playback. - void onLoaded(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is paused. - void onPause(AdMediaInfo adMediaInfo); - - /// Fire this callback when the player begins playing a video. - void onPlay(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is unpaused. - void onResume(AdMediaInfo adMediaInfo); - - /// Fire this callback when the playback volume changes. - void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); -} - /// The minimal information required to play an ad. /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. @@ -585,3 +450,138 @@ abstract class MediaPlayer { /// Stops playback after playback has been started or paused. void stop(); } + +/// Callbacks that the player must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', + ), +) +abstract class VideoAdPlayerCallback { + /// Fire this callback periodically as ad playback occurs. + void onAdProgress( + AdMediaInfo adMediaInfo, + VideoProgressUpdate videoProgressUpdate, + ); + + /// Fire this callback when video playback stalls waiting for data. + void onBuffering(AdMediaInfo adMediaInfo); + + /// Fire this callback when all content has finished playing. + void onContentComplete(); + + /// Fire this callback when the video finishes playing. + void onEnded(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video has encountered an error. + void onError(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is ready to begin playback. + void onLoaded(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is paused. + void onPause(AdMediaInfo adMediaInfo); + + /// Fire this callback when the player begins playing a video. + void onPlay(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is unpaused. + void onResume(AdMediaInfo adMediaInfo); + + /// Fire this callback when the playback volume changes. + void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); +} + +/// Defines the set of methods that a video player must implement to be used by +/// the IMA SDK, as well as a set of callbacks that it must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', + ), +) +abstract class VideoAdPlayer { + VideoAdPlayer(); + + /// Adds a callback. + late final void Function(VideoAdPlayerCallback callback) addCallback; + + /// Loads a video ad hosted at AdMediaInfo. + late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; + + /// Pauses playing the current ad. + late final void Function(AdMediaInfo adMediaInfo) pauseAd; + + /// Starts or resumes playing the video ad referenced by the AdMediaInfo, + /// provided loadAd has already been called for it. + late final void Function(AdMediaInfo adMediaInfo) playAd; + + /// Cleans up and releases all resources used by the `VideoAdPlayer`. + late final void Function() release; + + /// Removes a callback. + late final void Function(VideoAdPlayerCallback callback) removeCallback; + + /// Stops playing the current ad. + late final void Function(AdMediaInfo adMediaInfo) stopAd; + + /// The volume of the player as a percentage from 0 to 100. + void setVolume(int value); + + /// The `VideoProgressUpdate` describing playback progress of the current + /// video. + void setAdProgress(VideoProgressUpdate progress); +} + +/// Listener interface for notification of ad load or stream load completion. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', + ), +) +abstract class AdsLoadedListener { + AdsLoadedListener(); + + /// Called once the AdsManager or StreamManager has been loaded. + late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; +} + +/// Interface for classes that will listen to AdErrorEvents. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', + ), +) +abstract class AdErrorListener { + AdErrorListener(); + + /// Called when an error occurs. + late final void Function(AdErrorEvent event) onAdError; +} + +/// Listener interface for ad events. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', + ), +) +abstract class AdEventListener { + AdEventListener(); + + /// Respond to an occurrence of an AdEvent. + late final void Function(AdEvent event) onAdEvent; +} From e85027d1305681b9afcd82769c364e9c5bddc77e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 6 May 2024 19:27:31 -0400 Subject: [PATCH 10/76] fix callback events --- .../interactive_media_ads/AdErrorProxyApi.kt | 9 +-- .../interactive_media_ads/AdEventProxyApi.kt | 25 ++++++- .../GeneratedInteractiveMediaAdsLibrary.kt | 56 ++++++++++++++-- .../example/lib/main.dart | 58 +++++++++++++++-- .../lib/src/android/android_ads_manager.dart | 30 +++++++++ .../android_interactive_media_ads.dart | 3 +- .../src/android/interactive_media_ads.g.dart | 65 +++++++++++++++++++ .../interactive_media_ads_android.dart | 65 +++++++++++++++++++ 8 files changed, 288 insertions(+), 23 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt index 0160609b6c0..b566528f6d5 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -5,12 +5,10 @@ import com.google.ads.interactivemedia.v3.api.AdError class AdErrorProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdError(pigeonRegistrar) { override fun errorCode(pigeon_instance: AdError): AdErrorCode { - when (pigeon_instance.errorCode) { + return when (pigeon_instance.errorCode) { AdError.AdErrorCode.ADS_PLAYER_NOT_PROVIDED -> AdErrorCode.ADS_PLAYER_WAS_NOT_PROVIDED else -> AdErrorCode.UNKNOWN_ERROR } - - return AdErrorCode.UNKNOWN_ERROR } override fun errorCodeNumber(pigeon_instance: AdError): Long { @@ -18,12 +16,11 @@ class AdErrorProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } override fun errorType(pigeon_instance: AdError): AdErrorType { - when (pigeon_instance.errorType) { + return when (pigeon_instance.errorType) { AdError.AdErrorType.LOAD -> AdErrorType.LOAD AdError.AdErrorType.PLAY -> AdErrorType.PLAY + else -> AdErrorType.UNKNOWN } - - return AdErrorType.UNKNOWN } override fun message(pigeon_instance: AdError): String { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt index 6cfc8feb5a1..bdf2e80f2d5 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt @@ -5,16 +5,35 @@ import com.google.ads.interactivemedia.v3.api.AdEvent class AdEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdEvent(pigeonRegistrar) { override fun type(pigeon_instance: AdEvent): AdEventType { - when (pigeon_instance.type) { + return when (pigeon_instance.type) { AdEvent.AdEventType.ALL_ADS_COMPLETED -> AdEventType.ALL_ADS_COMPLETED + AdEvent.AdEventType.AD_BREAK_FETCH_ERROR -> AdEventType.AD_BREAK_FETCH_ERROR + AdEvent.AdEventType.CLICKED -> AdEventType.CLICKED AdEvent.AdEventType.COMPLETED -> AdEventType.COMPLETED + AdEvent.AdEventType.CUEPOINTS_CHANGED -> AdEventType.CUEPOINTS_CHANGED AdEvent.AdEventType.CONTENT_PAUSE_REQUESTED -> AdEventType.CONTENT_PAUSE_REQUESTED AdEvent.AdEventType.CONTENT_RESUME_REQUESTED -> AdEventType.CONTENT_RESUME_REQUESTED + AdEvent.AdEventType.FIRST_QUARTILE -> AdEventType.FIRST_QUARTILE + AdEvent.AdEventType.LOG -> AdEventType.LOG AdEvent.AdEventType.AD_BREAK_READY -> AdEventType.AD_BREAK_READY + AdEvent.AdEventType.MIDPOINT -> AdEventType.MIDPOINT + AdEvent.AdEventType.PAUSED -> AdEventType.PAUSED + AdEvent.AdEventType.RESUMED -> AdEventType.RESUMED + AdEvent.AdEventType.SKIPPABLE_STATE_CHANGED -> AdEventType.SKIPPABLE_STATE_CHANGED + AdEvent.AdEventType.SKIPPED -> AdEventType.SKIPPED + AdEvent.AdEventType.STARTED -> AdEventType.STARTED + AdEvent.AdEventType.TAPPED -> AdEventType.TAPPED + AdEvent.AdEventType.ICON_TAPPED -> AdEventType.ICON_TAPPED + AdEvent.AdEventType.ICON_FALLBACK_IMAGE_CLOSED -> AdEventType.ICON_FALLBACK_IMAGE_CLOSED + AdEvent.AdEventType.THIRD_QUARTILE -> AdEventType.THIRD_QUARTILE AdEvent.AdEventType.LOADED -> AdEventType.LOADED + AdEvent.AdEventType.AD_PROGRESS -> AdEventType.AD_PROGRESS + AdEvent.AdEventType.AD_BUFFERING -> AdEventType.AD_BUFFERING + AdEvent.AdEventType.AD_BREAK_STARTED -> AdEventType.AD_BREAK_STARTED + AdEvent.AdEventType.AD_BREAK_ENDED -> AdEventType.AD_BREAK_ENDED + AdEvent.AdEventType.AD_PERIOD_STARTED -> AdEventType.AD_PERIOD_STARTED + AdEvent.AdEventType.AD_PERIOD_ENDED -> AdEventType.AD_PERIOD_ENDED else -> AdEventType.UNKNOWN } - - return AdEventType.UNKNOWN } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index f7116d8aa06..9e1fd522f76 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -710,23 +710,65 @@ enum class AdErrorType(val raw: Int) { * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. */ enum class AdEventType(val raw: Int) { + /** Fired when an ad break in a stream ends. */ + AD_BREAK_ENDED(0), + /** Fired when an ad break will not play back any ads. */ + AD_BREAK_FETCH_ERROR(1), /** Fired when an ad break is ready from VMAP or ad rule ads. */ - AD_BREAK_READY(0), + AD_BREAK_READY(2), + /** Fired when an ad break in a stream starts. */ + AD_BREAK_STARTED(3), + /** Fired when playback stalls while the ad buffers. */ + AD_BUFFERING(4), + /** Fired when an ad period in a stream ends. */ + AD_PERIOD_ENDED(5), + /** Fired when an ad period in a stream starts. */ + AD_PERIOD_STARTED(6), + /** Fired to inform of ad progress and can be used by publisher to display a countdown timer. */ + AD_PROGRESS(7), /** * Fired when the ads manager is done playing all the valid ads in the ads response, or when the * response doesn't return any valid ads. */ - ALL_ADS_COMPLETED(1), + ALL_ADS_COMPLETED(8), + /** Fired when an ad is clicked. */ + CLICKED(9), /** Fired when an ad completes playing. */ - COMPLETED(2), + COMPLETED(10), /** Fired when content should be paused. */ - CONTENT_PAUSE_REQUESTED(3), + CONTENT_PAUSE_REQUESTED(11), /** Fired when content should be resumed. */ - CONTENT_RESUME_REQUESTED(4), + CONTENT_RESUME_REQUESTED(12), + /** Fired when VOD stream cuepoints have changed. */ + CUEPOINTS_CHANGED(13), + /** Fired when the ad playhead crosses first quartile. */ + FIRST_QUARTILE(14), + /** The user has closed the icon fallback image dialog. */ + ICON_FALLBACK_IMAGE_CLOSED(15), + /** The user has tapped an ad icon. */ + ICON_TAPPED(16), /** Fired when the VAST response has been received. */ - LOADED(5), + LOADED(17), + /** Fired to enable the SDK to communicate a message to be logged, which is stored in adData. */ + LOG(18), + /** Fired when the ad playhead crosses midpoint. */ + MIDPOINT(19), + /** Fired when an ad is paused. */ + PAUSED(20), + /** Fired when an ad is resumed. */ + RESUMED(21), + /** Fired when an ad changes its skippable state. */ + SKIPPABLE_STATE_CHANGED(22), + /** Fired when an ad was skipped. */ + SKIPPED(23), + /** Fired when an ad starts playing. */ + STARTED(24), + /** Fired when a non-clickthrough portion of a video ad is clicked. */ + TAPPED(25), + /** Fired when the ad playhead crosses third quartile. */ + THIRD_QUARTILE(26), /** The event type is not recognized by this wrapper. */ - UNKNOWN(6); + UNKNOWN(27); companion object { fun ofRaw(raw: Int): AdEventType? { diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index a92d27954a4..25f277545e6 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -9,9 +9,12 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_driver/driver_extension.dart'; import 'package:interactive_media_ads/interactive_media_ads.dart'; +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as android_ima; import 'package:video_player/video_player.dart'; import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart'; import 'package:interactive_media_ads/src/android/android_interactive_media_ads.dart'; +import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; /// Entry point for integration tests that require espresso. @pragma('vm:entry-point') @@ -33,7 +36,7 @@ class AdExampleWidget extends StatefulWidget { class AdExampleWidgetState extends State { late final AdsLoader adsLoader; AdsManager? adsManager; - bool shouldShowContentVideo = false; + bool shouldShowContentVideo = true; late final VideoPlayerController contentVideoController; @@ -43,11 +46,13 @@ class AdExampleWidgetState extends State { }, ); + late final Timer progressTimer; + @override void initState() { super.initState(); contentVideoController = VideoPlayerController.networkUrl(Uri.parse( - 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerBlazes.mp4')) + 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4')) ..addListener(() { if (contentVideoController.value.position == contentVideoController.value.duration) { @@ -58,6 +63,27 @@ class AdExampleWidgetState extends State { // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed. setState(() {}); }); + + progressTimer = Timer.periodic(const Duration(seconds: 3), (Timer timer) { + if (contentVideoController.value.isInitialized && + shouldShowContentVideo && + contentVideoController.value.isPlaying) { + // print(contentVideoController.value.position.inMilliseconds); + // final AndroidAdDisplayContainer container = + // adDisplayContainer.platform as AndroidAdDisplayContainer; + // for (final android_ima.VideoAdPlayerCallback a + // in container.videoAdPlayerCallbacks) { + // a.onAdProgress( + // container.loadedAdMediaInfo!, + // android_ima.VideoProgressUpdate( + // currentTimeMs: + // contentVideoController.value.position.inMilliseconds, + // durationMs: contentVideoController.value.duration.inMilliseconds, + // ), + // ); + // } + } + }); } Future resumeContent() { @@ -78,11 +104,14 @@ class AdExampleWidgetState extends State { adsLoader = AdsLoader( container: container, onAdsLoaded: (OnAdsLoadedData data) { + print('AdLoaded'); final AdsManager manager = data.manager; adsManager = data.manager; + print(manager.platform.runtimeType); manager.setAdsManagerDelegate(AdsManagerDelegate( onAdEvent: (AdEvent event) { + print('AdEvent ${event.type}'); switch (event.type) { case AdEventType.loaded: manager.start(); @@ -138,20 +167,37 @@ class AdExampleWidgetState extends State { height: 300, child: Stack( children: [ + // The display container must be on screen before any Ads can be + // loaded and can't be removed between ads. This handles clicks for + // ads. + adDisplayContainer, if (contentVideoController.value.isInitialized && shouldShowContentVideo) AspectRatio( aspectRatio: contentVideoController.value.aspectRatio, child: VideoPlayer(contentVideoController), ), - // The display container must be on screen before any Ads can be - // loaded and can't be removed between ads. This handles clicks for - // ads. - adDisplayContainer, ], ), ), ), + floatingActionButton: + contentVideoController.value.isInitialized && shouldShowContentVideo + ? FloatingActionButton( + onPressed: () { + setState(() { + contentVideoController.value.isPlaying + ? contentVideoController.pause() + : contentVideoController.play(); + }); + }, + child: Icon( + contentVideoController.value.isPlaying + ? Icons.pause + : Icons.play_arrow, + ), + ) + : null, ); } } diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart index 686702e3da5..4a9d7d994b1 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart @@ -34,11 +34,16 @@ class AndroidAdsManager extends PlatformAdsManager { } static void _addListeners(WeakReference weakThis) { + print('Adding listeners'); + print(weakThis.target); weakThis.target?.manager.addAdEventListener( interactive_media_ads.AdEventListener( onAdEvent: (_, interactive_media_ads.AdEvent event) { late final AdEventType eventType; + print('OnAdEvent'); + print(event.type); + switch (event.type) { case interactive_media_ads.AdEventType.allAdsCompleted: eventType = AdEventType.allAdsCompleted; @@ -52,6 +57,27 @@ class AndroidAdsManager extends PlatformAdsManager { eventType = AdEventType.loaded; case interactive_media_ads.AdEventType.unknown: case interactive_media_ads.AdEventType.adBreakReady: + case interactive_media_ads.AdEventType.adBreakEnded: + case interactive_media_ads.AdEventType.adBreakFetchError: + case interactive_media_ads.AdEventType.adBreakStarted: + case interactive_media_ads.AdEventType.adBuffering: + case interactive_media_ads.AdEventType.adPeriodEnded: + case interactive_media_ads.AdEventType.adPeriodStarted: + case interactive_media_ads.AdEventType.adProgress: + case interactive_media_ads.AdEventType.clicked: + case interactive_media_ads.AdEventType.cuepointsChanged: + case interactive_media_ads.AdEventType.firstQuartile: + case interactive_media_ads.AdEventType.iconFallbackImageClosed: + case interactive_media_ads.AdEventType.iconTapped: + case interactive_media_ads.AdEventType.log: + case interactive_media_ads.AdEventType.midpoint: + case interactive_media_ads.AdEventType.paused: + case interactive_media_ads.AdEventType.resumed: + case interactive_media_ads.AdEventType.skippableStateChanged: + case interactive_media_ads.AdEventType.skipped: + case interactive_media_ads.AdEventType.started: + case interactive_media_ads.AdEventType.tapped: + case interactive_media_ads.AdEventType.thirdQuartile: return; } weakThis.target?.managerDelegate?.params.onAdEvent @@ -89,3 +115,7 @@ class AndroidAdsManager extends PlatformAdsManager { ); } } + +final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { + AndroidAdsManagerDelegate(super.params) : super.implementation(); +} diff --git a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart index 07302517b18..4b66352baa2 100644 --- a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart @@ -4,6 +4,7 @@ import '../platform_interface/platform_ads_loader.dart'; import '../platform_interface/platform_ads_manager_delegate.dart'; import 'android_ad_display_container.dart'; import 'android_ads_loader.dart'; +import 'android_ads_manager.dart'; final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { @override @@ -24,6 +25,6 @@ final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { PlatformAdsManagerDelegate createPlatformAdsManagerDelegate( PlatformAdsManagerDelegateCreationParams params, ) { - return PlatformAdsManagerDelegate(params); + return AndroidAdsManagerDelegate(params); } } 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 7ef41728b26..863a61782cf 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 @@ -464,13 +464,38 @@ enum AdErrorType { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. enum AdEventType { + /// Fired when an ad break in a stream ends. + adBreakEnded, + + /// Fired when an ad break will not play back any ads. + adBreakFetchError, + /// Fired when an ad break is ready from VMAP or ad rule ads. adBreakReady, + /// Fired when an ad break in a stream starts. + adBreakStarted, + + /// Fired when playback stalls while the ad buffers. + adBuffering, + + /// Fired when an ad period in a stream ends. + adPeriodEnded, + + /// Fired when an ad period in a stream starts. + adPeriodStarted, + + /// Fired to inform of ad progress and can be used by publisher to display a + /// countdown timer. + adProgress, + /// Fired when the ads manager is done playing all the valid ads in the ads /// response, or when the response doesn't return any valid ads. allAdsCompleted, + /// Fired when an ad is clicked. + clicked, + /// Fired when an ad completes playing. completed, @@ -480,9 +505,49 @@ enum AdEventType { /// Fired when content should be resumed. contentResumeRequested, + /// Fired when VOD stream cuepoints have changed. + cuepointsChanged, + + /// Fired when the ad playhead crosses first quartile. + firstQuartile, + + /// The user has closed the icon fallback image dialog. + iconFallbackImageClosed, + + /// The user has tapped an ad icon. + iconTapped, + /// Fired when the VAST response has been received. loaded, + /// Fired to enable the SDK to communicate a message to be logged, which is + /// stored in adData. + log, + + /// Fired when the ad playhead crosses midpoint. + midpoint, + + /// Fired when an ad is paused. + paused, + + /// Fired when an ad is resumed. + resumed, + + /// Fired when an ad changes its skippable state. + skippableStateChanged, + + /// Fired when an ad was skipped. + skipped, + + /// Fired when an ad starts playing. + started, + + /// Fired when a non-clickthrough portion of a video ad is clicked. + tapped, + + /// Fired when the ad playhead crosses third quartile. + thirdQuartile, + /// The event type is not recognized by this wrapper. unknown, } 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 1e7bf1f8332..bee71e2d6ad 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -51,13 +51,38 @@ enum AdErrorType { /// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. enum AdEventType { + /// Fired when an ad break in a stream ends. + adBreakEnded, + + /// Fired when an ad break will not play back any ads. + adBreakFetchError, + /// Fired when an ad break is ready from VMAP or ad rule ads. adBreakReady, + /// Fired when an ad break in a stream starts. + adBreakStarted, + + /// Fired when playback stalls while the ad buffers. + adBuffering, + + /// Fired when an ad period in a stream ends. + adPeriodEnded, + + /// Fired when an ad period in a stream starts. + adPeriodStarted, + + /// Fired to inform of ad progress and can be used by publisher to display a + /// countdown timer. + adProgress, + /// Fired when the ads manager is done playing all the valid ads in the ads /// response, or when the response doesn't return any valid ads. allAdsCompleted, + /// Fired when an ad is clicked. + clicked, + /// Fired when an ad completes playing. completed, @@ -67,9 +92,49 @@ enum AdEventType { /// Fired when content should be resumed. contentResumeRequested, + /// Fired when VOD stream cuepoints have changed. + cuepointsChanged, + + /// Fired when the ad playhead crosses first quartile. + firstQuartile, + + /// The user has closed the icon fallback image dialog. + iconFallbackImageClosed, + + /// The user has tapped an ad icon. + iconTapped, + /// Fired when the VAST response has been received. loaded, + /// Fired to enable the SDK to communicate a message to be logged, which is + /// stored in adData. + log, + + /// Fired when the ad playhead crosses midpoint. + midpoint, + + /// Fired when an ad is paused. + paused, + + /// Fired when an ad is resumed. + resumed, + + /// Fired when an ad changes its skippable state. + skippableStateChanged, + + /// Fired when an ad was skipped. + skipped, + + /// Fired when an ad starts playing. + started, + + /// Fired when a non-clickthrough portion of a video ad is clicked. + tapped, + + /// Fired when the ad playhead crosses third quartile. + thirdQuartile, + /// The event type is not recognized by this wrapper. unknown, } From 6739d7ff4305d827ff3c1f51afecc23f2595ef3e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 7 May 2024 15:42:20 -0400 Subject: [PATCH 11/76] remove prints --- packages/interactive_media_ads/example/lib/main.dart | 6 +----- .../lib/src/android/android_ads_manager.dart | 5 ----- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 25f277545e6..7815c025f89 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -104,14 +104,12 @@ class AdExampleWidgetState extends State { adsLoader = AdsLoader( container: container, onAdsLoaded: (OnAdsLoadedData data) { - print('AdLoaded'); final AdsManager manager = data.manager; adsManager = data.manager; - print(manager.platform.runtimeType); manager.setAdsManagerDelegate(AdsManagerDelegate( onAdEvent: (AdEvent event) { - print('AdEvent ${event.type}'); + debugPrint('AdEvent ${event.type}'); switch (event.type) { case AdEventType.loaded: manager.start(); @@ -127,8 +125,6 @@ class AdExampleWidgetState extends State { } }, onAdErrorEvent: (AdErrorEvent event) { - print('ERROR:'); - print(event.error.message); //manager.discardAdBreak(); resumeContent(); }, diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart index 4a9d7d994b1..504df08d731 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart @@ -34,16 +34,11 @@ class AndroidAdsManager extends PlatformAdsManager { } static void _addListeners(WeakReference weakThis) { - print('Adding listeners'); - print(weakThis.target); weakThis.target?.manager.addAdEventListener( interactive_media_ads.AdEventListener( onAdEvent: (_, interactive_media_ads.AdEvent event) { late final AdEventType eventType; - print('OnAdEvent'); - print(event.type); - switch (event.type) { case interactive_media_ads.AdEventType.allAdsCompleted: eventType = AdEventType.allAdsCompleted; From e80396294636bc6410eb4cf5f17d35a0209d056d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 7 May 2024 16:31:39 -0400 Subject: [PATCH 12/76] fix removeStrongReference error --- .../GeneratedInteractiveMediaAdsLibrary.kt | 682 +++++++++--------- .../src/android/interactive_media_ads.g.dart | 2 +- 2 files changed, 347 insertions(+), 337 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index 9e1fd522f76..6e4a06a5416 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -1,5 +1,6 @@ // Autogenerated from Pigeon (v18.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon +@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") package dev.flutter.packages.interactive_media_ads @@ -16,10 +17,10 @@ private fun wrapResult(result: Any?): List { } private fun wrapError(exception: Throwable): List { - if (exception is FlutterError) { - return listOf(exception.code, exception.message, exception.details) + return if (exception is FlutterError) { + listOf(exception.code, exception.message, exception.details) } else { - return listOf( + listOf( exception.javaClass.simpleName, exception.toString(), "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) @@ -901,13 +902,13 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsLoader val listenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener - var wrapped: List - try { - api.addAdErrorListener(pigeon_instanceArg, listenerArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.addAdErrorListener(pigeon_instanceArg, listenerArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -926,13 +927,13 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsLoader val listenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener - var wrapped: List - try { - api.addAdsLoadedListener(pigeon_instanceArg, listenerArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.addAdsLoadedListener(pigeon_instanceArg, listenerArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -950,13 +951,13 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsLoader val requestArg = args[1] as com.google.ads.interactivemedia.v3.api.AdsRequest - var wrapped: List - try { - api.requestAds(pigeon_instanceArg, requestArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.requestAds(pigeon_instanceArg, requestArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1189,13 +1190,13 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest val adTagUrlArg = args[1] as String - var wrapped: List - try { - api.setAdTagUrl(pigeon_instanceArg, adTagUrlArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.setAdTagUrl(pigeon_instanceArg, adTagUrlArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1214,13 +1215,13 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsRequest val providerArg = args[1] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider - var wrapped: List - try { - api.setContentProgressProvider(pigeon_instanceArg, providerArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.setContentProgressProvider(pigeon_instanceArg, providerArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1328,13 +1329,13 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsManager - var wrapped: List - try { - api.discardAdBreak(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.discardAdBreak(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1349,13 +1350,13 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsManager - var wrapped: List - try { - api.pause(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.pause(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1370,13 +1371,13 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.AdsManager - var wrapped: List - try { - api.start(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.start(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1467,13 +1468,13 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.BaseManager val errorListenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener - var wrapped: List - try { - api.addAdErrorListener(pigeon_instanceArg, errorListenerArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.addAdErrorListener(pigeon_instanceArg, errorListenerArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1492,13 +1493,13 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.BaseManager val adEventListenerArg = args[1] as com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener - var wrapped: List - try { - api.addAdEventListener(pigeon_instanceArg, adEventListenerArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.addAdEventListener(pigeon_instanceArg, adEventListenerArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1515,13 +1516,13 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.BaseManager - var wrapped: List - try { - api.destroy(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.destroy(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1536,13 +1537,13 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.BaseManager - var wrapped: List - try { - api.init(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.init(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1667,15 +1668,16 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.instance(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.instance(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1693,12 +1695,12 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr val args = message as List val containerArg = args[0] as android.view.ViewGroup val playerArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - var wrapped: List - try { - wrapped = listOf(api.createAdDisplayContainer(containerArg, playerArg)) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + listOf(api.createAdDisplayContainer(containerArg, playerArg)) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1715,12 +1717,12 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkFactory - var wrapped: List - try { - wrapped = listOf(api.createImaSdkSettings(pigeon_instanceArg)) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + listOf(api.createImaSdkSettings(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1739,13 +1741,12 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkFactory val settingsArg = args[1] as com.google.ads.interactivemedia.v3.api.ImaSdkSettings val containerArg = args[2] as com.google.ads.interactivemedia.v3.api.AdDisplayContainer - var wrapped: List - try { - wrapped = + val wrapped: List = + try { listOf(api.createAdsLoader(pigeon_instanceArg, settingsArg, containerArg)) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1762,12 +1763,12 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.ImaSdkFactory - var wrapped: List - try { - wrapped = listOf(api.createAdsRequest(pigeon_instanceArg)) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + listOf(api.createAdsRequest(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1873,18 +1874,20 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - val currentTimeMsArg = args[1].let { if (it is Int) it.toLong() else it as Long } - val durationMsArg = args[2].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), - pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val currentTimeMsArg = + args[1].let { num -> if (num is Int) num.toLong() else num as Long } + val durationMsArg = args[2].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(currentTimeMsArg, durationMsArg), + pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -1900,15 +1903,16 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.videoTimeNotReady(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.videoTimeNotReady(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2099,15 +2103,16 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2176,13 +2181,13 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) val args = message as List val pigeon_instanceArg = args[0] as android.view.ViewGroup val viewArg = args[1] as android.view.View - var wrapped: List - try { - api.addView(pigeon_instanceArg, viewArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.addView(pigeon_instanceArg, viewArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2259,15 +2264,16 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2285,13 +2291,13 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) val args = message as List val pigeon_instanceArg = args[0] as android.widget.VideoView val uriArg = args[1] as String - var wrapped: List - try { - api.setVideoUri(pigeon_instanceArg, uriArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.setVideoUri(pigeon_instanceArg, uriArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2308,12 +2314,12 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.widget.VideoView - var wrapped: List - try { - wrapped = listOf(api.getCurrentPosition(pigeon_instanceArg)) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + listOf(api.getCurrentPosition(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2483,12 +2489,12 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.media.MediaPlayer - var wrapped: List - try { - wrapped = listOf(api.getDuration(pigeon_instanceArg)) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + listOf(api.getDuration(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2505,14 +2511,14 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.media.MediaPlayer - val mSecArg = args[1].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.seekTo(pigeon_instanceArg, mSecArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val mSecArg = args[1].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.seekTo(pigeon_instanceArg, mSecArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2529,13 +2535,13 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.media.MediaPlayer - var wrapped: List - try { - api.start(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.start(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2552,13 +2558,13 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.media.MediaPlayer - var wrapped: List - try { - api.pause(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.pause(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2573,13 +2579,13 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar channel.setMessageHandler { message, reply -> val args = message as List val pigeon_instanceArg = args[0] as android.media.MediaPlayer - var wrapped: List - try { - api.stop(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.stop(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2721,13 +2727,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo val videoProgressUpdateArg = args[2] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - var wrapped: List - try { - api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onAdProgress(pigeon_instanceArg, adMediaInfoArg, videoProgressUpdateArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2749,13 +2755,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onBuffering(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onBuffering(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2775,13 +2781,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback - var wrapped: List - try { - api.onContentComplete(pigeon_instanceArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onContentComplete(pigeon_instanceArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2803,13 +2809,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onEnded(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onEnded(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2831,13 +2837,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onError(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onError(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2859,13 +2865,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onLoaded(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onLoaded(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2887,13 +2893,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onPause(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onPause(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2915,13 +2921,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onPlay(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onPlay(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2943,13 +2949,13 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - var wrapped: List - try { - api.onResume(pigeon_instanceArg, adMediaInfoArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.onResume(pigeon_instanceArg, adMediaInfoArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -2971,14 +2977,14 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback val adMediaInfoArg = args[1] as com.google.ads.interactivemedia.v3.api.player.AdMediaInfo - val percentageArg = args[2].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.onVolumeChanged(pigeon_instanceArg, adMediaInfoArg, percentageArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val percentageArg = args[2].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.onVolumeChanged(pigeon_instanceArg, adMediaInfoArg, percentageArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -3056,15 +3062,16 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -3082,14 +3089,14 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr val args = message as List val pigeon_instanceArg = args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer - val valueArg = args[1].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.setVolume(pigeon_instanceArg, valueArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val valueArg = args[1].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.setVolume(pigeon_instanceArg, valueArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -3109,13 +3116,13 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr args[0] as com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer val progressArg = args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate - var wrapped: List - try { - api.setAdProgress(pigeon_instanceArg, progressArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val wrapped: List = + try { + api.setAdProgress(pigeon_instanceArg, progressArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -3329,15 +3336,16 @@ abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiReg if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -3409,15 +3417,16 @@ abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegis if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { @@ -3488,15 +3497,16 @@ abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegis if (api != null) { channel.setMessageHandler { message, reply -> val args = message as List - val pigeon_identifierArg = args[0].let { if (it is Int) it.toLong() else it as Long } - var wrapped: List - try { - api.pigeonRegistrar.instanceManager.addDartCreatedInstance( - api.pigeon_defaultConstructor(), pigeon_identifierArg) - wrapped = listOf(null) - } catch (exception: Throwable) { - wrapped = wrapError(exception) - } + val pigeon_identifierArg = + args[0].let { num -> if (num is Int) num.toLong() else num as Long } + val wrapped: List = + try { + api.pigeonRegistrar.instanceManager.addDartCreatedInstance( + api.pigeon_defaultConstructor(), pigeon_identifierArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } reply.reply(wrapped) } } else { 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 863a61782cf..e3370e172e2 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 @@ -357,7 +357,7 @@ class _PigeonInstanceManagerApi { r'Argument for $channelName, expected non-null int.', ); (instanceManager ?? PigeonInstanceManager.instance).remove(identifier!); - return; + return []; }); } From 6b22ebca589cf0f6502c4b1d628539d85185e855 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 8 May 2024 21:13:26 -0400 Subject: [PATCH 13/76] also send time updates --- .../example/lib/main.dart | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 7815c025f89..f7dba788838 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -68,20 +68,20 @@ class AdExampleWidgetState extends State { if (contentVideoController.value.isInitialized && shouldShowContentVideo && contentVideoController.value.isPlaying) { - // print(contentVideoController.value.position.inMilliseconds); - // final AndroidAdDisplayContainer container = - // adDisplayContainer.platform as AndroidAdDisplayContainer; - // for (final android_ima.VideoAdPlayerCallback a - // in container.videoAdPlayerCallbacks) { - // a.onAdProgress( - // container.loadedAdMediaInfo!, - // android_ima.VideoProgressUpdate( - // currentTimeMs: - // contentVideoController.value.position.inMilliseconds, - // durationMs: contentVideoController.value.duration.inMilliseconds, - // ), - // ); - // } + print(contentVideoController.value.position.inMilliseconds); + final AndroidAdDisplayContainer container = + adDisplayContainer.platform as AndroidAdDisplayContainer; + for (final android_ima.VideoAdPlayerCallback a + in container.videoAdPlayerCallbacks) { + a.onAdProgress( + container.loadedAdMediaInfo!, + android_ima.VideoProgressUpdate( + currentTimeMs: + contentVideoController.value.position.inMilliseconds, + durationMs: contentVideoController.value.duration.inMilliseconds, + ), + ); + } } }); } From 957e2ba884e31905ace344b1d99899d1a7b01f43 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 9 May 2024 13:37:11 -0400 Subject: [PATCH 14/76] combine implementation files --- .../android/android_ad_display_container.dart | 350 +++++++++++++----- .../lib/src/android/android_ads_loader.dart | 101 ----- .../lib/src/android/android_ads_manager.dart | 116 ------ .../android_interactive_media_ads.dart | 7 +- .../lib/src/android/android_view_widget.dart | 4 + .../android/platform_views_service_proxy.dart | 4 + .../platform_ads_manager.dart | 2 +- 7 files changed, 278 insertions(+), 306 deletions(-) delete mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_loader.dart delete mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_manager.dart diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 40207133dd8..84e34671185 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -2,140 +2,318 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; + import 'package:flutter/widgets.dart'; import '../platform_interface/platform_interface.dart'; import 'android_view_widget.dart'; -import 'interactive_media_ads.g.dart'; +import 'interactive_media_ads.g.dart' as ima; +/// Android implementation of [PlatformAdDisplayContainer]. final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { + /// Constructs an [AndroidAdDisplayContainer]. AndroidAdDisplayContainer(super.params) : super.implementation() { - final WeakReference weakThis = - WeakReference(this); - videoView = _setUpVideoView(weakThis); - frameLayout.addView(videoView); - _setUpAdDisplayContainer(weakThis).then((AdDisplayContainer container) { - adDisplayContainer = container; - params.onContainerAdded(this); - }); + _videoView = _setUpVideoView( + WeakReference(this), + ); + _frameLayout.addView(_videoView); } - final Set videoAdPlayerCallbacks = - {}; - - AdMediaInfo? loadedAdMediaInfo; - int savedAdPosition = 0; - MediaPlayer? mediaPlayer; + final ima.FrameLayout _frameLayout = ima.FrameLayout(); + final Set _videoAdPlayerCallbacks = + {}; + late final ima.VideoView _videoView; + ima.AdMediaInfo? _loadedAdMediaInfo; + // The saved ad position, used to resumed ad playback following an ad click-through. + int _savedAdPosition = 0; + ima.MediaPlayer? _mediaPlayer; + late final ima.AdDisplayContainer _adDisplayContainer; - late final AdDisplayContainer adDisplayContainer; - - final FrameLayout frameLayout = FrameLayout(); + @override + Widget build(BuildContext context) { + return AndroidViewWidget( + view: _frameLayout, + onPlatformViewCreated: () async { + _adDisplayContainer = await _setUpAdDisplayContainer( + WeakReference(this), + ); + }, + ); + } - late final VideoView videoView; + void _resetPlayer() { + _mediaPlayer = null; + _savedAdPosition = 0; + } - static VideoView _setUpVideoView( + static ima.VideoView _setUpVideoView( WeakReference weakThis, ) { - return VideoView( - onCompletion: ( - VideoView pigeonInstance, - MediaPlayer player, - ) { - weakThis.target?.mediaPlayer = null; + return ima.VideoView( + onCompletion: (_, ima.MediaPlayer player) { + weakThis.target?._resetPlayer(); }, - onPrepared: ( - VideoView pigeonInstance, - MediaPlayer player, - ) { + onPrepared: (_, ima.MediaPlayer player) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - container.mediaPlayer = player; - if (container.savedAdPosition > 0) { - player.seekTo(container.savedAdPosition); + container._mediaPlayer = player; + if (container._savedAdPosition > 0) { + player.seekTo(container._savedAdPosition); } } player.start(); }, - onError: ( - VideoView pigeonInstance, - MediaPlayer player, - int what, - int extra, - ) { + onError: (_, ima.MediaPlayer player, int what, int extra) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - container.mediaPlayer = null; - container.savedAdPosition = 0; - for (final VideoAdPlayerCallback callback - in container.videoAdPlayerCallbacks) { - callback.onError(container.loadedAdMediaInfo!); + container._resetPlayer(); + for (final ima.VideoAdPlayerCallback callback + in container._videoAdPlayerCallbacks) { + callback.onError(container._loadedAdMediaInfo!); } } }, ); } - static Future _setUpAdDisplayContainer( + static Future _setUpAdDisplayContainer( WeakReference weakThis, ) async { - return ImaSdkFactory.createAdDisplayContainer( - weakThis.target!.frameLayout, - VideoAdPlayer( - addCallback: ( - VideoAdPlayer pigeonInstance, - VideoAdPlayerCallback callback, - ) { - weakThis.target?.videoAdPlayerCallbacks.add(callback); + return ima.ImaSdkFactory.createAdDisplayContainer( + weakThis.target!._frameLayout, + ima.VideoAdPlayer( + addCallback: (_, ima.VideoAdPlayerCallback callback) { + weakThis.target?._videoAdPlayerCallbacks.add(callback); }, - removeCallback: ( - VideoAdPlayer pigeonInstance, - VideoAdPlayerCallback callback, - ) { - weakThis.target?.videoAdPlayerCallbacks.remove(callback); + removeCallback: (_, ima.VideoAdPlayerCallback callback) { + weakThis.target?._videoAdPlayerCallbacks.remove(callback); }, - loadAd: ( - VideoAdPlayer pigeonInstance, - AdMediaInfo adMediaInfo, - AdPodInfo adPodInfo, - ) { - weakThis.target?.loadedAdMediaInfo = adMediaInfo; + loadAd: (_, ima.AdMediaInfo adMediaInfo, ima.AdPodInfo adPodInfo) { + weakThis.target?._loadedAdMediaInfo = adMediaInfo; }, - pauseAd: ( - VideoAdPlayer pigeonInstance, - AdMediaInfo adMediaInfo, - ) async { + pauseAd: (_, ima.AdMediaInfo adMediaInfo) async { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - await container.mediaPlayer!.pause(); - container.savedAdPosition = - await container.videoView.getCurrentPosition(); + await container._mediaPlayer!.pause(); + container._savedAdPosition = + await container._videoView.getCurrentPosition(); } }, - playAd: ( - VideoAdPlayer pigeonInstance, - AdMediaInfo adMediaInfo, - ) { - weakThis.target?.videoView.setVideoUri(adMediaInfo.url); + playAd: (_, ima.AdMediaInfo adMediaInfo) { + weakThis.target?._videoView.setVideoUri(adMediaInfo.url); }, - release: (VideoAdPlayer pigeonInstance) {}, - stopAd: ( - VideoAdPlayer pigeonInstance, - AdMediaInfo adMediaInfo, - ) { + release: (_) {}, + stopAd: (_, ima.AdMediaInfo adMediaInfo) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - container.savedAdPosition = 0; - container.mediaPlayer = null; - container.loadedAdMediaInfo = null; + container._resetPlayer(); + container._loadedAdMediaInfo = null; } }, ), ); } +} + +/// Android implementation of [PlatformAdsLoader]. +final class AndroidAdsLoader extends PlatformAdsLoader { + /// Constructs an [AndroidAdsLoader]. + AndroidAdsLoader(super.params) + : assert(params.container is AndroidAdDisplayContainer), + super.implementation() { + _adsLoaderFuture = _createAdsLoader(); + } + + final ima.ImaSdkFactory _sdkFactory = ima.ImaSdkFactory.instance; + late Future _adsLoaderFuture; @override - Widget build(BuildContext context) { - return AndroidViewWidget(view: frameLayout); + Future contentComplete() async { + final Set callbacks = + (params.container as AndroidAdDisplayContainer)._videoAdPlayerCallbacks; + await Future.wait( + callbacks.map( + (ima.VideoAdPlayerCallback callback) => callback.onContentComplete(), + ), + ); + } + + @override + Future requestAds(AdsRequest request) async { + final ima.AdsLoader adsLoader = await _adsLoaderFuture; + + final ima.AdsRequest androidRequest = await _sdkFactory.createAdsRequest(); + unawaited(androidRequest.setAdTagUrl(request.adTagUrl)); + + await adsLoader.requestAds(androidRequest); + } + + Future _createAdsLoader() async { + final ima.ImaSdkSettings settings = + await _sdkFactory.createImaSdkSettings(); + + final ima.AdsLoader adsLoader = + await ima.ImaSdkFactory.instance.createAdsLoader( + settings, + (params.container as AndroidAdDisplayContainer)._adDisplayContainer, + ); + + _addListeners(WeakReference(this), adsLoader); + + return adsLoader; + } + + static void _addListeners( + WeakReference weakThis, + ima.AdsLoader adsLoader, + ) { + adsLoader.addAdsLoadedListener(ima.AdsLoadedListener( + onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { + weakThis.target?.params.onAdsLoaded( + PlatformOnAdsLoadedData(manager: AndroidAdsManager._(event.manager)), + ); + }, + )); + adsLoader.addAdErrorListener(ima.AdErrorListener( + onAdError: (_, ima.AdErrorEvent event) { + final AdErrorType errorType = switch (event.error.errorType) { + ima.AdErrorType.load => AdErrorType.loading, + ima.AdErrorType.play => AdErrorType.playing, + ima.AdErrorType.unknown => AdErrorType.unknown, + }; + + final AdErrorCode errorCode = switch (event.error.errorCode) { + ima.AdErrorCode.adsPlayerWasNotProvided => + AdErrorCode.adsPlayerNotProvided, + ima.AdErrorCode.unknownError => AdErrorCode.unknownError, + }; + + weakThis.target?.params.onAdsLoadError( + AdsLoadErrorData( + error: AdError( + type: errorType, + code: errorCode, + message: event.error.message, + ), + ), + ); + }, + )); + } +} + +/// Android implementation of [PlatformAdsManager]. +class AndroidAdsManager extends PlatformAdsManager { + AndroidAdsManager._(ima.AdsManager manager) : _manager = manager; + + final ima.AdsManager _manager; + + PlatformAdsManagerDelegate? _managerDelegate; + + @override + Future destroy() { + return _manager.destroy(); } + + @override + Future init(AdsManagerInitParams params) { + return _manager.init(); + } + + @override + Future setAdsManagerDelegate( + PlatformAdsManagerDelegate delegate, + ) async { + _managerDelegate = delegate; + _addListeners(WeakReference(this)); + } + + @override + Future start(AdsManagerStartParams params) { + return _manager.start(); + } + + static void _addListeners(WeakReference weakThis) { + weakThis.target?._manager.addAdEventListener( + ima.AdEventListener( + onAdEvent: (_, ima.AdEvent event) { + late final AdEventType eventType; + + switch (event.type) { + case ima.AdEventType.allAdsCompleted: + eventType = AdEventType.allAdsCompleted; + case ima.AdEventType.completed: + eventType = AdEventType.complete; + case ima.AdEventType.contentPauseRequested: + eventType = AdEventType.contentPauseRequested; + case ima.AdEventType.contentResumeRequested: + eventType = AdEventType.contentResumeRequested; + case ima.AdEventType.loaded: + eventType = AdEventType.loaded; + case ima.AdEventType.unknown: + case ima.AdEventType.adBreakReady: + case ima.AdEventType.adBreakEnded: + case ima.AdEventType.adBreakFetchError: + case ima.AdEventType.adBreakStarted: + case ima.AdEventType.adBuffering: + case ima.AdEventType.adPeriodEnded: + case ima.AdEventType.adPeriodStarted: + case ima.AdEventType.adProgress: + case ima.AdEventType.clicked: + case ima.AdEventType.cuepointsChanged: + case ima.AdEventType.firstQuartile: + case ima.AdEventType.iconFallbackImageClosed: + case ima.AdEventType.iconTapped: + case ima.AdEventType.log: + case ima.AdEventType.midpoint: + case ima.AdEventType.paused: + case ima.AdEventType.resumed: + case ima.AdEventType.skippableStateChanged: + case ima.AdEventType.skipped: + case ima.AdEventType.started: + case ima.AdEventType.tapped: + case ima.AdEventType.thirdQuartile: + return; + } + weakThis.target?._managerDelegate?.params.onAdEvent + ?.call(AdEvent(type: eventType)); + }, + ), + ); + weakThis.target?._manager.addAdErrorListener( + ima.AdErrorListener( + onAdError: (_, ima.AdErrorEvent event) { + final AdErrorType errorType = switch (event.error.errorType) { + ima.AdErrorType.load => AdErrorType.loading, + ima.AdErrorType.play => AdErrorType.playing, + ima.AdErrorType.unknown => AdErrorType.unknown, + }; + + final AdErrorCode errorCode = switch (event.error.errorCode) { + ima.AdErrorCode.adsPlayerWasNotProvided => + AdErrorCode.adsPlayerNotProvided, + ima.AdErrorCode.unknownError => AdErrorCode.unknownError, + }; + + weakThis.target?._managerDelegate?.params.onAdErrorEvent?.call( + AdErrorEvent( + error: AdError( + type: errorType, + code: errorCode, + message: event.error.message, + ), + ), + ); + }, + ), + ); + } +} + +/// Android implementation of [PlatformAdsManagerDelegate]. +final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { + /// Constructs an [AndroidAdsManagerDelegate]. + AndroidAdsManagerDelegate(super.params) : super.implementation(); } diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart deleted file mode 100644 index 2e8a36eaa4d..00000000000 --- a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'dart:async'; - -import '../../interactive_media_ads.dart'; -import '../platform_interface/platform_ads_loader.dart'; -import 'android_ad_display_container.dart'; -import 'android_ads_manager.dart'; -import 'interactive_media_ads.g.dart' as interactive_media_ads; - -final class AndroidAdsLoader extends PlatformAdsLoader { - AndroidAdsLoader( - PlatformAdsLoaderCreationParams params, - ) : assert(params.container is AndroidAdDisplayContainer), - super.implementation(params) { - adsLoaderFuture = _createAdsLoader(); - } - - late Future adsLoaderFuture; - - final interactive_media_ads.ImaSdkFactory sdkFactory = - interactive_media_ads.ImaSdkFactory.instance; - - Future _createAdsLoader() async { - final interactive_media_ads.ImaSdkSettings settings = - await sdkFactory.createImaSdkSettings(); - - final interactive_media_ads.AdsLoader adsLoader = - await interactive_media_ads.ImaSdkFactory.instance.createAdsLoader( - settings, - (params.container as AndroidAdDisplayContainer).adDisplayContainer, - ); - - _addListeners( - WeakReference(this), - adsLoader, - ); - - return adsLoader; - } - - static void _addListeners( - WeakReference weakThis, - interactive_media_ads.AdsLoader adsLoader, - ) { - adsLoader.addAdsLoadedListener(interactive_media_ads.AdsLoadedListener( - onAdsManagerLoaded: ( - _, - interactive_media_ads.AdsManagerLoadedEvent event, - ) { - weakThis.target?.params.onAdsLoaded( - PlatformOnAdsLoadedData(manager: AndroidAdsManager(event.manager)), - ); - }, - )); - adsLoader.addAdErrorListener(interactive_media_ads.AdErrorListener( - onAdError: (_, interactive_media_ads.AdErrorEvent event) { - final AdErrorType errorType = switch (event.error.errorType) { - interactive_media_ads.AdErrorType.load => AdErrorType.loading, - interactive_media_ads.AdErrorType.play => AdErrorType.playing, - interactive_media_ads.AdErrorType.unknown => AdErrorType.unknown, - }; - - final AdErrorCode errorCode = switch (event.error.errorCode) { - interactive_media_ads.AdErrorCode.adsPlayerWasNotProvided => - AdErrorCode.adsPlayerNotProvided, - interactive_media_ads.AdErrorCode.unknownError => - AdErrorCode.unknownError, - }; - - weakThis.target?.params.onAdsLoadError( - AdsLoadErrorData( - error: AdError( - type: errorType, - code: errorCode, - message: event.error.message, - ), - ), - ); - }, - )); - } - - @override - Future contentComplete() async { - for (final interactive_media_ads.VideoAdPlayerCallback callback - in (params.container as AndroidAdDisplayContainer) - .videoAdPlayerCallbacks) { - unawaited(callback.onContentComplete()); - } - } - - @override - Future requestAds(AdsRequest request) async { - final interactive_media_ads.AdsLoader adsLoader = await adsLoaderFuture; - - final interactive_media_ads.AdsRequest androidRequest = - await sdkFactory.createAdsRequest(); - unawaited(androidRequest.setAdTagUrl(request.adTagUrl)); - - await adsLoader.requestAds(androidRequest); - } -} diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart deleted file mode 100644 index 504df08d731..00000000000 --- a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart +++ /dev/null @@ -1,116 +0,0 @@ -import '../../interactive_media_ads.dart'; -import '../platform_interface/platform_ads_manager.dart'; -import '../platform_interface/platform_ads_manager_delegate.dart'; -import 'interactive_media_ads.g.dart' as interactive_media_ads; - -class AndroidAdsManager extends PlatformAdsManager { - AndroidAdsManager(this.manager); - - final interactive_media_ads.AdsManager manager; - - PlatformAdsManagerDelegate? managerDelegate; - - @override - Future destroy() { - return manager.destroy(); - } - - @override - Future init(AdsManagerInitParams params) { - return manager.init(); - } - - @override - Future setAdsManagerDelegate( - PlatformAdsManagerDelegate delegate, - ) async { - managerDelegate = delegate; - _addListeners(WeakReference(this)); - } - - @override - Future start(AdsManagerStartParams params) { - return manager.start(); - } - - static void _addListeners(WeakReference weakThis) { - weakThis.target?.manager.addAdEventListener( - interactive_media_ads.AdEventListener( - onAdEvent: (_, interactive_media_ads.AdEvent event) { - late final AdEventType eventType; - - switch (event.type) { - case interactive_media_ads.AdEventType.allAdsCompleted: - eventType = AdEventType.allAdsCompleted; - case interactive_media_ads.AdEventType.completed: - eventType = AdEventType.complete; - case interactive_media_ads.AdEventType.contentPauseRequested: - eventType = AdEventType.contentPauseRequested; - case interactive_media_ads.AdEventType.contentResumeRequested: - eventType = AdEventType.contentResumeRequested; - case interactive_media_ads.AdEventType.loaded: - eventType = AdEventType.loaded; - case interactive_media_ads.AdEventType.unknown: - case interactive_media_ads.AdEventType.adBreakReady: - case interactive_media_ads.AdEventType.adBreakEnded: - case interactive_media_ads.AdEventType.adBreakFetchError: - case interactive_media_ads.AdEventType.adBreakStarted: - case interactive_media_ads.AdEventType.adBuffering: - case interactive_media_ads.AdEventType.adPeriodEnded: - case interactive_media_ads.AdEventType.adPeriodStarted: - case interactive_media_ads.AdEventType.adProgress: - case interactive_media_ads.AdEventType.clicked: - case interactive_media_ads.AdEventType.cuepointsChanged: - case interactive_media_ads.AdEventType.firstQuartile: - case interactive_media_ads.AdEventType.iconFallbackImageClosed: - case interactive_media_ads.AdEventType.iconTapped: - case interactive_media_ads.AdEventType.log: - case interactive_media_ads.AdEventType.midpoint: - case interactive_media_ads.AdEventType.paused: - case interactive_media_ads.AdEventType.resumed: - case interactive_media_ads.AdEventType.skippableStateChanged: - case interactive_media_ads.AdEventType.skipped: - case interactive_media_ads.AdEventType.started: - case interactive_media_ads.AdEventType.tapped: - case interactive_media_ads.AdEventType.thirdQuartile: - return; - } - weakThis.target?.managerDelegate?.params.onAdEvent - ?.call(AdEvent(type: eventType)); - }, - ), - ); - weakThis.target?.manager.addAdErrorListener( - interactive_media_ads.AdErrorListener( - onAdError: (_, interactive_media_ads.AdErrorEvent event) { - final AdErrorType errorType = switch (event.error.errorType) { - interactive_media_ads.AdErrorType.load => AdErrorType.loading, - interactive_media_ads.AdErrorType.play => AdErrorType.playing, - interactive_media_ads.AdErrorType.unknown => AdErrorType.unknown, - }; - - final AdErrorCode errorCode = switch (event.error.errorCode) { - interactive_media_ads.AdErrorCode.adsPlayerWasNotProvided => - AdErrorCode.adsPlayerNotProvided, - interactive_media_ads.AdErrorCode.unknownError => - AdErrorCode.unknownError, - }; - - weakThis.target?.managerDelegate?.params.onAdErrorEvent?.call( - AdErrorEvent( - error: AdError( - type: errorType, - code: errorCode, - message: event.error.message, - ), - ), - ); - }, - ), - ); - } -} - -final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { - AndroidAdsManagerDelegate(super.params) : super.implementation(); -} diff --git a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart index 4b66352baa2..76465b42a85 100644 --- a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart @@ -1,11 +1,14 @@ +// 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. + import '../platform_interface/interactive_media_ads_platform.dart'; import '../platform_interface/platform_ad_display_container.dart'; import '../platform_interface/platform_ads_loader.dart'; import '../platform_interface/platform_ads_manager_delegate.dart'; import 'android_ad_display_container.dart'; -import 'android_ads_loader.dart'; -import 'android_ads_manager.dart'; +/// Android implementation of [InteractiveMediaAdsPlatform]. final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { @override PlatformAdDisplayContainer createPlatformAdDisplayContainer( diff --git a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart index c745983ee1a..025e2f8d69a 100644 --- a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart +++ b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart @@ -1,3 +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. + import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; diff --git a/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart b/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart index b3c9d823e76..6e0501cb809 100644 --- a/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart +++ b/packages/interactive_media_ads/lib/src/android/platform_views_service_proxy.dart @@ -1,3 +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. + import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; diff --git a/packages/interactive_media_ads/lib/src/platform_interface/platform_ads_manager.dart b/packages/interactive_media_ads/lib/src/platform_interface/platform_ads_manager.dart index d80a17a6a73..85488aaa251 100644 --- a/packages/interactive_media_ads/lib/src/platform_interface/platform_ads_manager.dart +++ b/packages/interactive_media_ads/lib/src/platform_interface/platform_ads_manager.dart @@ -13,7 +13,7 @@ base class AdsManagerInitParams {} /// ads. base class AdsManagerStartParams {} -/// Interface for a platform implementation of a `AdsManager`. +/// Interface for a platform implementation of an `AdsManager`. abstract class PlatformAdsManager { /// Creates a [PlatformAdsManager]. @protected From d0be87367f421a6f4518e4afed7bcdf5d381bafe Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 9 May 2024 13:54:25 -0400 Subject: [PATCH 15/76] fix lint warnings --- .../example/lib/main.dart | 139 +++++++++--------- .../lib/interactive_media_ads.dart | 1 + .../android_interactive_media_ads.dart | 5 + packages/interactive_media_ads/pubspec.yaml | 1 + 4 files changed, 74 insertions(+), 72 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index f7dba788838..55bb10ebe37 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -4,17 +4,10 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_driver/driver_extension.dart'; import 'package:interactive_media_ads/interactive_media_ads.dart'; -import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' - as android_ima; import 'package:video_player/video_player.dart'; -import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart'; -import 'package:interactive_media_ads/src/android/android_interactive_media_ads.dart'; -import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; /// Entry point for integration tests that require espresso. @pragma('vm:entry-point') @@ -24,39 +17,42 @@ void integrationTestMain() { } void main() { - InteractiveMediaAdsPlatform.instance = AndroidInteractiveMediaAds(); - runApp(MaterialApp(home: AdExampleWidget())); + runApp(const MaterialApp(home: AdExampleWidget())); } +/// Example widget displaying an Ad during a video. class AdExampleWidget extends StatefulWidget { + /// Constructs an [AdExampleWidget]. + const AdExampleWidget({super.key}); + @override - AdExampleWidgetState createState() => AdExampleWidgetState(); + State createState() => _AdExampleWidgetState(); } -class AdExampleWidgetState extends State { - late final AdsLoader adsLoader; - AdsManager? adsManager; - bool shouldShowContentVideo = true; +class _AdExampleWidgetState extends State { + late final AdsLoader _adsLoader; + AdsManager? _adsManager; + bool _shouldShowContentVideo = true; - late final VideoPlayerController contentVideoController; + late final VideoPlayerController _contentVideoController; - late final AdDisplayContainer adDisplayContainer = AdDisplayContainer( + late final AdDisplayContainer _adDisplayContainer = AdDisplayContainer( onContainerAdded: (AdDisplayContainer container) { - requestAds(container); + _requestAds(container); }, ); - late final Timer progressTimer; + //late final Timer progressTimer; @override void initState() { super.initState(); - contentVideoController = VideoPlayerController.networkUrl(Uri.parse( + _contentVideoController = VideoPlayerController.networkUrl(Uri.parse( 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4')) ..addListener(() { - if (contentVideoController.value.position == - contentVideoController.value.duration) { - adsLoader.contentComplete(); + if (_contentVideoController.value.position == + _contentVideoController.value.duration) { + _adsLoader.contentComplete(); } }) ..initialize().then((_) { @@ -64,82 +60,81 @@ class AdExampleWidgetState extends State { setState(() {}); }); - progressTimer = Timer.periodic(const Duration(seconds: 3), (Timer timer) { - if (contentVideoController.value.isInitialized && - shouldShowContentVideo && - contentVideoController.value.isPlaying) { - print(contentVideoController.value.position.inMilliseconds); - final AndroidAdDisplayContainer container = - adDisplayContainer.platform as AndroidAdDisplayContainer; - for (final android_ima.VideoAdPlayerCallback a - in container.videoAdPlayerCallbacks) { - a.onAdProgress( - container.loadedAdMediaInfo!, - android_ima.VideoProgressUpdate( - currentTimeMs: - contentVideoController.value.position.inMilliseconds, - durationMs: contentVideoController.value.duration.inMilliseconds, - ), - ); - } - } - }); + // progressTimer = Timer.periodic(const Duration(seconds: 3), (Timer timer) { + // if (contentVideoController.value.isInitialized && + // shouldShowContentVideo && + // contentVideoController.value.isPlaying) { + // print(contentVideoController.value.position.inMilliseconds); + // final AndroidAdDisplayContainer container = + // adDisplayContainer.platform as AndroidAdDisplayContainer; + // for (final android_ima.VideoAdPlayerCallback a + // in container.videoAdPlayerCallbacks) { + // a.onAdProgress( + // container.loadedAdMediaInfo!, + // android_ima.VideoProgressUpdate( + // currentTimeMs: + // contentVideoController.value.position.inMilliseconds, + // durationMs: contentVideoController.value.duration.inMilliseconds, + // ), + // ); + // } + // } + // }); } - Future resumeContent() { + Future _resumeContent() { setState(() { - shouldShowContentVideo = true; + _shouldShowContentVideo = true; }); - return contentVideoController.play(); + return _contentVideoController.play(); } - Future pauseContent() { + Future _pauseContent() { setState(() { - shouldShowContentVideo = false; + _shouldShowContentVideo = false; }); - return contentVideoController.pause(); + return _contentVideoController.pause(); } - Future requestAds(AdDisplayContainer container) { - adsLoader = AdsLoader( + Future _requestAds(AdDisplayContainer container) { + _adsLoader = AdsLoader( container: container, onAdsLoaded: (OnAdsLoadedData data) { final AdsManager manager = data.manager; - adsManager = data.manager; + _adsManager = data.manager; manager.setAdsManagerDelegate(AdsManagerDelegate( onAdEvent: (AdEvent event) { - debugPrint('AdEvent ${event.type}'); + debugPrint('OnAdEvent: ${event.type}'); switch (event.type) { case AdEventType.loaded: manager.start(); case AdEventType.contentPauseRequested: - pauseContent(); + _pauseContent(); case AdEventType.contentResumeRequested: - resumeContent(); + _resumeContent(); case AdEventType.allAdsCompleted: manager.destroy(); - adsManager = null; + _adsManager = null; case AdEventType.clicked: case AdEventType.complete: } }, onAdErrorEvent: (AdErrorEvent event) { //manager.discardAdBreak(); - resumeContent(); + _resumeContent(); }, )); manager.init(); }, onAdsLoadError: (AdsLoadErrorData data) { - print('Error 2:'); - print(data.error.message); - resumeContent(); + debugPrint('OnAdsLoadError: ${data.error.message}'); + _resumeContent(); }, ); - return adsLoader.requestAds( + return _adsLoader.requestAds( AdsRequest( adTagUrl: 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=', @@ -150,8 +145,8 @@ class AdExampleWidgetState extends State { @override void dispose() { super.dispose(); - contentVideoController.dispose(); - adsManager?.destroy(); + _contentVideoController.dispose(); + _adsManager?.destroy(); } @override @@ -166,29 +161,29 @@ class AdExampleWidgetState extends State { // The display container must be on screen before any Ads can be // loaded and can't be removed between ads. This handles clicks for // ads. - adDisplayContainer, - if (contentVideoController.value.isInitialized && - shouldShowContentVideo) + _adDisplayContainer, + if (_contentVideoController.value.isInitialized && + _shouldShowContentVideo) AspectRatio( - aspectRatio: contentVideoController.value.aspectRatio, - child: VideoPlayer(contentVideoController), + aspectRatio: _contentVideoController.value.aspectRatio, + child: VideoPlayer(_contentVideoController), ), ], ), ), ), floatingActionButton: - contentVideoController.value.isInitialized && shouldShowContentVideo + _contentVideoController.value.isInitialized && _shouldShowContentVideo ? FloatingActionButton( onPressed: () { setState(() { - contentVideoController.value.isPlaying - ? contentVideoController.pause() - : contentVideoController.play(); + _contentVideoController.value.isPlaying + ? _contentVideoController.pause() + : _contentVideoController.play(); }); }, child: Icon( - contentVideoController.value.isPlaying + _contentVideoController.value.isPlaying ? Icons.pause : Icons.play_arrow, ), diff --git a/packages/interactive_media_ads/lib/interactive_media_ads.dart b/packages/interactive_media_ads/lib/interactive_media_ads.dart index 6c94b12b351..1c09ca5c9ef 100644 --- a/packages/interactive_media_ads/lib/interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/interactive_media_ads.dart @@ -5,6 +5,7 @@ export 'src/ad_display_container.dart'; export 'src/ads_loader.dart'; export 'src/ads_manager_delegate.dart'; +export 'src/android/android_interactive_media_ads.dart'; export 'src/platform_interface/ad_error.dart'; export 'src/platform_interface/ad_event.dart'; export 'src/platform_interface/ads_request.dart'; diff --git a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart index 76465b42a85..7801c6283bf 100644 --- a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart @@ -10,6 +10,11 @@ import 'android_ad_display_container.dart'; /// Android implementation of [InteractiveMediaAdsPlatform]. final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { + /// Registers this class as the default instance of [HelloPluginPlatform]. + static void registerWith() { + InteractiveMediaAdsPlatform.instance = AndroidInteractiveMediaAds(); + } + @override PlatformAdDisplayContainer createPlatformAdDisplayContainer( PlatformAdDisplayContainerCreationParams params, diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index c03ab3478c8..def7aa5e695 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -14,6 +14,7 @@ flutter: android: package: dev.flutter.packages.interactive_media_ads pluginClass: InteractiveMediaAdsPlugin + dartPluginClass: AndroidWebViewPlatform ios: pluginClass: InteractiveMediaAdsPlugin From 875d6be6bf4dca08d8b31c5b93c6544698928798 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 9 May 2024 13:55:10 -0400 Subject: [PATCH 16/76] fix Android dartPluginClass --- packages/interactive_media_ads/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index def7aa5e695..9bfc0283eb8 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -14,7 +14,7 @@ flutter: android: package: dev.flutter.packages.interactive_media_ads pluginClass: InteractiveMediaAdsPlugin - dartPluginClass: AndroidWebViewPlatform + dartPluginClass: AndroidInteractiveMediaAds ios: pluginClass: InteractiveMediaAdsPlugin From 0122f6cc4c645505f6859c3dda8ce8a8b2a9a838 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 9 May 2024 17:03:57 -0400 Subject: [PATCH 17/76] fix missing params call --- .../lib/src/android/android_ad_display_container.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 84e34671185..baa8c985774 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -38,6 +38,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _adDisplayContainer = await _setUpAdDisplayContainer( WeakReference(this), ); + params.onContainerAdded(this); }, ); } From d0971db07da1cca3e51d05b74541c42133f558b8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 10 May 2024 16:11:05 -0400 Subject: [PATCH 18/76] make tracking ad progress in ad display container --- .../example/lib/main.dart | 30 ++--------- .../android/android_ad_display_container.dart | 51 +++++++++++++++++-- 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 55bb10ebe37..fde368f1ef6 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -42,13 +42,14 @@ class _AdExampleWidgetState extends State { }, ); - //late final Timer progressTimer; - @override void initState() { super.initState(); - _contentVideoController = VideoPlayerController.networkUrl(Uri.parse( - 'http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4')) + _contentVideoController = VideoPlayerController.networkUrl( + Uri.parse( + 'https://storage.googleapis.com/gvabox/media/samples/stock.mp4', + ), + ) ..addListener(() { if (_contentVideoController.value.position == _contentVideoController.value.duration) { @@ -59,27 +60,6 @@ class _AdExampleWidgetState extends State { // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed. setState(() {}); }); - - // progressTimer = Timer.periodic(const Duration(seconds: 3), (Timer timer) { - // if (contentVideoController.value.isInitialized && - // shouldShowContentVideo && - // contentVideoController.value.isPlaying) { - // print(contentVideoController.value.position.inMilliseconds); - // final AndroidAdDisplayContainer container = - // adDisplayContainer.platform as AndroidAdDisplayContainer; - // for (final android_ima.VideoAdPlayerCallback a - // in container.videoAdPlayerCallbacks) { - // a.onAdProgress( - // container.loadedAdMediaInfo!, - // android_ima.VideoProgressUpdate( - // currentTimeMs: - // contentVideoController.value.position.inMilliseconds, - // durationMs: contentVideoController.value.duration.inMilliseconds, - // ), - // ); - // } - // } - // }); } Future _resumeContent() { diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index baa8c985774..57bb0894df7 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -24,11 +24,13 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { final Set _videoAdPlayerCallbacks = {}; late final ima.VideoView _videoView; + late final ima.AdDisplayContainer _adDisplayContainer; ima.AdMediaInfo? _loadedAdMediaInfo; // The saved ad position, used to resumed ad playback following an ad click-through. int _savedAdPosition = 0; ima.MediaPlayer? _mediaPlayer; - late final ima.AdDisplayContainer _adDisplayContainer; + Timer? _adProgressTimer; + int? _adDuration; @override Widget build(BuildContext context) { @@ -46,6 +48,34 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { void _resetPlayer() { _mediaPlayer = null; _savedAdPosition = 0; + _adDuration = null; + } + + void _startAdTracking() { + _adProgressTimer = Timer.periodic( + const Duration(seconds: 3), + (Timer timer) async { + final int currentPosition = await _videoView.getCurrentPosition(); + await Future.wait( + _videoAdPlayerCallbacks.map( + (ima.VideoAdPlayerCallback callback) async { + await callback.onAdProgress( + _loadedAdMediaInfo!, + ima.VideoProgressUpdate( + currentTimeMs: currentPosition, + durationMs: _adDuration!, + ), + ); + }, + ), + ); + }, + ); + } + + void _stopAdTracking() { + _adProgressTimer?.cancel(); + _adProgressTimer = null; } static ima.VideoView _setUpVideoView( @@ -53,18 +83,27 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ) { return ima.VideoView( onCompletion: (_, ima.MediaPlayer player) { - weakThis.target?._resetPlayer(); + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + weakThis.target?._resetPlayer(); + for (final ima.VideoAdPlayerCallback callback + in container._videoAdPlayerCallbacks) { + callback.onEnded(container._loadedAdMediaInfo!); + } + } }, - onPrepared: (_, ima.MediaPlayer player) { + onPrepared: (_, ima.MediaPlayer player) async { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { + container._adDuration = await player.getDuration(); container._mediaPlayer = player; if (container._savedAdPosition > 0) { - player.seekTo(container._savedAdPosition); + await player.seekTo(container._savedAdPosition); } } - player.start(); + await player.start(); + container?._startAdTracking(); }, onError: (_, ima.MediaPlayer player, int what, int extra) { final AndroidAdDisplayContainer? container = weakThis.target; @@ -98,6 +137,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { await container._mediaPlayer!.pause(); + container._stopAdTracking(); container._savedAdPosition = await container._videoView.getCurrentPosition(); } @@ -109,6 +149,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { stopAd: (_, ima.AdMediaInfo adMediaInfo) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { + container._stopAdTracking(); container._resetPlayer(); container._loadedAdMediaInfo = null; } From b1ace40cdb6be2b71effc82e60369db8dc8b15ea Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 13 May 2024 21:11:44 -0400 Subject: [PATCH 19/76] add missing error codes --- .../interactive_media_ads/AdErrorProxyApi.kt | 23 ++++- .../GeneratedInteractiveMediaAdsLibrary.kt | 57 +++++++++++- .../android/android_ad_display_container.dart | 88 ++++++++++++------- .../src/android/interactive_media_ads.g.dart | 69 +++++++++++++++ .../interactive_media_ads_android.dart | 69 +++++++++++++++ 5 files changed, 274 insertions(+), 32 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt index b566528f6d5..4186feed7c4 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -7,7 +7,28 @@ class AdErrorProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : override fun errorCode(pigeon_instance: AdError): AdErrorCode { return when (pigeon_instance.errorCode) { AdError.AdErrorCode.ADS_PLAYER_NOT_PROVIDED -> AdErrorCode.ADS_PLAYER_WAS_NOT_PROVIDED - else -> AdErrorCode.UNKNOWN_ERROR + AdError.AdErrorCode.INTERNAL_ERROR -> AdErrorCode.INTERNAL_ERROR + AdError.AdErrorCode.VAST_MALFORMED_RESPONSE -> AdErrorCode.VAST_MALFORMED_RESPONSE + AdError.AdErrorCode.UNKNOWN_AD_RESPONSE -> AdErrorCode.UNKNOWN_AD_RESPONSE + AdError.AdErrorCode.VAST_TRAFFICKING_ERROR -> AdErrorCode.VAST_TRAFFICKING_ERROR + AdError.AdErrorCode.VAST_LOAD_TIMEOUT -> AdErrorCode.VAST_LOAD_TIMEOUT + AdError.AdErrorCode.VAST_TOO_MANY_REDIRECTS -> AdErrorCode.VAST_TOO_MANY_REDIRECTS + AdError.AdErrorCode.VAST_NO_ADS_AFTER_WRAPPER -> AdErrorCode.VAST_NO_ADS_AFTER_WRAPPER + AdError.AdErrorCode.VIDEO_PLAY_ERROR -> AdErrorCode.VIDEO_PLAY_ERROR + AdError.AdErrorCode.VAST_MEDIA_LOAD_TIMEOUT -> AdErrorCode.VAST_MEDIA_LOAD_TIMEOUT + AdError.AdErrorCode.VAST_LINEAR_ASSET_MISMATCH -> AdErrorCode.VAST_LINEAR_ASSET_MISMATCH + AdError.AdErrorCode.OVERLAY_AD_PLAYING_FAILED -> AdErrorCode.OVERLAY_AD_PLAYING_FAILED + AdError.AdErrorCode.OVERLAY_AD_LOADING_FAILED -> AdErrorCode.OVERLAY_AD_LOADING_FAILED + AdError.AdErrorCode.VAST_NONLINEAR_ASSET_MISMATCH -> AdErrorCode.VAST_NONLINEAR_ASSET_MISMATCH + AdError.AdErrorCode.COMPANION_AD_LOADING_FAILED -> AdErrorCode.COMPANION_AD_LOADING_FAILED + AdError.AdErrorCode.UNKNOWN_ERROR -> AdErrorCode.UNKNOWN_ERROR + AdError.AdErrorCode.VAST_EMPTY_RESPONSE -> AdErrorCode.VAST_EMPTY_RESPONSE + AdError.AdErrorCode.FAILED_TO_REQUEST_ADS -> AdErrorCode.FAILED_TO_REQUEST_ADS + AdError.AdErrorCode.VAST_ASSET_NOT_FOUND -> AdErrorCode.VAST_ASSET_NOT_FOUND + AdError.AdErrorCode.ADS_REQUEST_NETWORK_ERROR -> AdErrorCode.ADS_REQUEST_NETWORK_ERROR + AdError.AdErrorCode.INVALID_ARGUMENTS -> AdErrorCode.INVALID_ARGUMENTS + AdError.AdErrorCode.PLAYLIST_NO_CONTENT_TRACKING -> AdErrorCode.PLAYLIST_NO_CONTENT_TRACKING + AdError.AdErrorCode.UNEXPECTED_ADS_LOADED_EVENT -> AdErrorCode.UNEXPECTED_ADS_LOADED_EVENT } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index 6e4a06a5416..fbed11c1101 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -673,8 +673,63 @@ private class PigeonProxyApiBaseCodec(val registrar: PigeonProxyApiRegistrar) : enum class AdErrorCode(val raw: Int) { /** Ads player was not provided. */ ADS_PLAYER_WAS_NOT_PROVIDED(0), + /** There was a problem requesting ads from the server. */ + ADS_REQUEST_NETWORK_ERROR(1), + /** A companion ad failed to load or render. */ + COMPANION_AD_LOADING_FAILED(2), + /** There was a problem requesting ads from the server. */ + FAILED_TO_REQUEST_ADS(3), + /** An error internal to the SDK occurred. */ + INTERNAL_ERROR(4), + /** Invalid arguments were provided to SDK methods. */ + INVALID_ARGUMENTS(5), + /** An overlay ad failed to load. */ + OVERLAY_AD_LOADING_FAILED(6), + /** An overlay ad failed to render. */ + OVERLAY_AD_PLAYING_FAILED(7), + /** Ads list was returned but ContentProgressProvider was not configured. */ + PLAYLIST_NO_CONTENT_TRACKING(8), + /** Ads loader sent ads loaded event when it was not expected. */ + UNEXPECTED_ADS_LOADED_EVENT(9), + /** The ad response was not understood and cannot be parsed. */ + UNKNOWN_AD_RESPONSE(10), /** An unexpected error occurred and the cause is not known. */ - UNKNOWN_ERROR(1); + UNKNOWN_ERROR(11), + /** No assets were found in the VAST ad response. */ + VAST_ASSET_NOT_FOUND(12), + /** A VAST response containing a single `` tag with no child tags. */ + VAST_EMPTY_RESPONSE(13), + /** + * Assets were found in the VAST ad response for a linear ad, but none of them matched the video + * player's capabilities. + */ + VAST_LINEAR_ASSET_MISMATCH(14), + /** + * At least one VAST wrapper ad loaded successfully and a subsequent wrapper or inline ad load has + * timed out. + */ + VAST_LOAD_TIMEOUT(15), + /** The ad response was not recognized as a valid VAST ad. */ + VAST_MALFORMED_RESPONSE(16), + /** Failed to load media assets from a VAST response. */ + VAST_MEDIA_LOAD_TIMEOUT(17), + /** + * Assets were found in the VAST ad response for a nonlinear ad, but none of them matched the + * video player's capabilities. + */ + VAST_NONLINEAR_ASSET_MISMATCH(18), + /** No Ads VAST response after one or more wrappers. */ + VAST_NO_ADS_AFTER_WRAPPER(19), + /** The maximum number of VAST wrapper redirects has been reached. */ + VAST_TOO_MANY_REDIRECTS(20), + /** + * Trafficking error. + * + * Video player received an ad type that it was not expecting and/or cannot display. + */ + VAST_TRAFFICKING_ERROR(21), + /** There was an error playing the video ad. */ + VIDEO_PLAY_ERROR(22); companion object { fun ofRaw(raw: Int): AdErrorCode? { diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 57bb0894df7..9346f472466 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -20,6 +20,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _frameLayout.addView(_videoView); } + static const int _progressPollingMs = 250; final ima.FrameLayout _frameLayout = ima.FrameLayout(); final Set _videoAdPlayerCallbacks = {}; @@ -53,7 +54,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { void _startAdTracking() { _adProgressTimer = Timer.periodic( - const Duration(seconds: 3), + const Duration(milliseconds: _progressPollingMs), (Timer timer) async { final int currentPosition = await _videoView.getCurrentPosition(); await Future.wait( @@ -137,9 +138,9 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { await container._mediaPlayer!.pause(); - container._stopAdTracking(); container._savedAdPosition = await container._videoView.getCurrentPosition(); + container._stopAdTracking(); } }, playAd: (_, ima.AdMediaInfo adMediaInfo) { @@ -220,23 +221,11 @@ final class AndroidAdsLoader extends PlatformAdsLoader { )); adsLoader.addAdErrorListener(ima.AdErrorListener( onAdError: (_, ima.AdErrorEvent event) { - final AdErrorType errorType = switch (event.error.errorType) { - ima.AdErrorType.load => AdErrorType.loading, - ima.AdErrorType.play => AdErrorType.playing, - ima.AdErrorType.unknown => AdErrorType.unknown, - }; - - final AdErrorCode errorCode = switch (event.error.errorCode) { - ima.AdErrorCode.adsPlayerWasNotProvided => - AdErrorCode.adsPlayerNotProvided, - ima.AdErrorCode.unknownError => AdErrorCode.unknownError, - }; - weakThis.target?.params.onAdsLoadError( AdsLoadErrorData( error: AdError( - type: errorType, - code: errorCode, + type: event.error.errorType.asInterfaceErrorType(), + code: event.error.errorCode.asInterfaceErrorCode(), message: event.error.message, ), ), @@ -327,23 +316,11 @@ class AndroidAdsManager extends PlatformAdsManager { weakThis.target?._manager.addAdErrorListener( ima.AdErrorListener( onAdError: (_, ima.AdErrorEvent event) { - final AdErrorType errorType = switch (event.error.errorType) { - ima.AdErrorType.load => AdErrorType.loading, - ima.AdErrorType.play => AdErrorType.playing, - ima.AdErrorType.unknown => AdErrorType.unknown, - }; - - final AdErrorCode errorCode = switch (event.error.errorCode) { - ima.AdErrorCode.adsPlayerWasNotProvided => - AdErrorCode.adsPlayerNotProvided, - ima.AdErrorCode.unknownError => AdErrorCode.unknownError, - }; - weakThis.target?._managerDelegate?.params.onAdErrorEvent?.call( AdErrorEvent( error: AdError( - type: errorType, - code: errorCode, + type: event.error.errorType.asInterfaceErrorType(), + code: event.error.errorCode.asInterfaceErrorCode(), message: event.error.message, ), ), @@ -359,3 +336,54 @@ final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { /// Constructs an [AndroidAdsManagerDelegate]. AndroidAdsManagerDelegate(super.params) : super.implementation(); } + +extension on ima.AdErrorType { + AdErrorType asInterfaceErrorType() { + return switch (this) { + ima.AdErrorType.load => AdErrorType.loading, + ima.AdErrorType.play => AdErrorType.playing, + ima.AdErrorType.unknown => AdErrorType.unknown, + }; + } +} + +extension on ima.AdErrorCode { + AdErrorCode asInterfaceErrorCode() { + return switch (this) { + ima.AdErrorCode.adsPlayerWasNotProvided => + AdErrorCode.adsPlayerNotProvided, + ima.AdErrorCode.adsRequestNetworkError => + AdErrorCode.adsRequestNetworkError, + ima.AdErrorCode.companionAdLoadingFailed => + AdErrorCode.companionAdLoadingFailed, + ima.AdErrorCode.failedToRequestAds => AdErrorCode.failedToRequestAds, + ima.AdErrorCode.internalError => AdErrorCode.internalError, + ima.AdErrorCode.invalidArguments => AdErrorCode.invalidArguments, + ima.AdErrorCode.overlayAdLoadingFailed => + AdErrorCode.overlayAdLoadingFailed, + ima.AdErrorCode.overlayAdPlayingFailed => + AdErrorCode.overlayAdPlayingFailed, + ima.AdErrorCode.playlistNoContentTracking => + AdErrorCode.playlistNoContentTracking, + ima.AdErrorCode.unexpectedAdsLoadedEvent => + AdErrorCode.unexpectedAdsLoadedEvent, + ima.AdErrorCode.unknownAdResponse => AdErrorCode.unknownAdResponse, + ima.AdErrorCode.unknownError => AdErrorCode.unknownError, + ima.AdErrorCode.vastAssetNotFound => AdErrorCode.vastAssetNotFound, + ima.AdErrorCode.vastEmptyResponse => AdErrorCode.vastEmptyResponse, + ima.AdErrorCode.vastLinearAssetMismatch => + AdErrorCode.vastLinearAssetMismatch, + ima.AdErrorCode.vastLoadTimeout => AdErrorCode.vastLoadTimeout, + ima.AdErrorCode.vastMalformedResponse => + AdErrorCode.vastMalformedResponse, + ima.AdErrorCode.vastMediaLoadTimeout => AdErrorCode.vastMediaLoadTimeout, + ima.AdErrorCode.vastNonlinearAssetMismatch => + AdErrorCode.vastNonlinearAssetMismatch, + ima.AdErrorCode.vastNoAdsAfterWrapper => + AdErrorCode.vastNoAdsAfterWrapper, + ima.AdErrorCode.vastTooManyRedirects => AdErrorCode.vastTooManyRedirects, + ima.AdErrorCode.vastTraffickingError => AdErrorCode.vastTraffickingError, + ima.AdErrorCode.videoPlayError => AdErrorCode.videoPlayError, + }; + } +} 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 e3370e172e2..e5af10c18d2 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 @@ -442,8 +442,77 @@ enum AdErrorCode { /// Ads player was not provided. adsPlayerWasNotProvided, + /// There was a problem requesting ads from the server. + adsRequestNetworkError, + + /// A companion ad failed to load or render. + companionAdLoadingFailed, + + /// There was a problem requesting ads from the server. + failedToRequestAds, + + /// An error internal to the SDK occurred. + internalError, + + /// Invalid arguments were provided to SDK methods. + invalidArguments, + + /// An overlay ad failed to load. + overlayAdLoadingFailed, + + /// An overlay ad failed to render. + overlayAdPlayingFailed, + + /// Ads list was returned but ContentProgressProvider was not configured. + playlistNoContentTracking, + + /// Ads loader sent ads loaded event when it was not expected. + unexpectedAdsLoadedEvent, + + /// The ad response was not understood and cannot be parsed. + unknownAdResponse, + /// An unexpected error occurred and the cause is not known. unknownError, + + /// No assets were found in the VAST ad response. + vastAssetNotFound, + + /// A VAST response containing a single `` tag with no child tags. + vastEmptyResponse, + + /// Assets were found in the VAST ad response for a linear ad, but none of + /// them matched the video player's capabilities. + vastLinearAssetMismatch, + + /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper + /// or inline ad load has timed out. + vastLoadTimeout, + + /// The ad response was not recognized as a valid VAST ad. + vastMalformedResponse, + + /// Failed to load media assets from a VAST response. + vastMediaLoadTimeout, + + /// Assets were found in the VAST ad response for a nonlinear ad, but none of + /// them matched the video player's capabilities. + vastNonlinearAssetMismatch, + + /// No Ads VAST response after one or more wrappers. + vastNoAdsAfterWrapper, + + /// The maximum number of VAST wrapper redirects has been reached. + vastTooManyRedirects, + + /// Trafficking error. + /// + /// Video player received an ad type that it was not expecting and/or cannot + /// display. + vastTraffickingError, + + /// There was an error playing the video ad. + videoPlayError, } /// Specifies when the error was encountered, during either ad loading or playback. 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 bee71e2d6ad..566f3515864 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -29,8 +29,77 @@ enum AdErrorCode { /// Ads player was not provided. adsPlayerWasNotProvided, + /// There was a problem requesting ads from the server. + adsRequestNetworkError, + + /// A companion ad failed to load or render. + companionAdLoadingFailed, + + /// There was a problem requesting ads from the server. + failedToRequestAds, + + /// An error internal to the SDK occurred. + internalError, + + /// Invalid arguments were provided to SDK methods. + invalidArguments, + + /// An overlay ad failed to load. + overlayAdLoadingFailed, + + /// An overlay ad failed to render. + overlayAdPlayingFailed, + + /// Ads list was returned but ContentProgressProvider was not configured. + playlistNoContentTracking, + + /// Ads loader sent ads loaded event when it was not expected. + unexpectedAdsLoadedEvent, + + /// The ad response was not understood and cannot be parsed. + unknownAdResponse, + /// An unexpected error occurred and the cause is not known. unknownError, + + /// No assets were found in the VAST ad response. + vastAssetNotFound, + + /// A VAST response containing a single `` tag with no child tags. + vastEmptyResponse, + + /// Assets were found in the VAST ad response for a linear ad, but none of + /// them matched the video player's capabilities. + vastLinearAssetMismatch, + + /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper + /// or inline ad load has timed out. + vastLoadTimeout, + + /// The ad response was not recognized as a valid VAST ad. + vastMalformedResponse, + + /// Failed to load media assets from a VAST response. + vastMediaLoadTimeout, + + /// Assets were found in the VAST ad response for a nonlinear ad, but none of + /// them matched the video player's capabilities. + vastNonlinearAssetMismatch, + + /// No Ads VAST response after one or more wrappers. + vastNoAdsAfterWrapper, + + /// The maximum number of VAST wrapper redirects has been reached. + vastTooManyRedirects, + + /// Trafficking error. + /// + /// Video player received an ad type that it was not expecting and/or cannot + /// display. + vastTraffickingError, + + /// There was an error playing the video ad. + videoPlayError, } /// Specifies when the error was encountered, during either ad loading or playback. From cc728d29c3840d7f3c92d63e74160badb40e7c37 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 13 May 2024 21:26:05 -0400 Subject: [PATCH 20/76] discard ad break --- packages/interactive_media_ads/example/lib/main.dart | 2 +- .../lib/src/android/android_ad_display_container.dart | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index fde368f1ef6..5b17286304d 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -101,7 +101,7 @@ class _AdExampleWidgetState extends State { } }, onAdErrorEvent: (AdErrorEvent event) { - //manager.discardAdBreak(); + debugPrint('AdErrorEvent: ${event.error.message}'); _resumeContent(); }, )); diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 9346f472466..93d97b11141 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -325,6 +325,7 @@ class AndroidAdsManager extends PlatformAdsManager { ), ), ); + weakThis.target?._manager.discardAdBreak(); }, ), ); From f34507103cf01cce58b10e34afe8488d28963320 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 13 May 2024 21:30:40 -0400 Subject: [PATCH 21/76] licenses --- .../packages/interactive_media_ads/AdErrorEventProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/AdErrorListenerProxyApi.kt | 4 ++++ .../flutter/packages/interactive_media_ads/AdErrorProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/AdEventListenerProxyApi.kt | 4 ++++ .../flutter/packages/interactive_media_ads/AdEventProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/AdMediaInfoProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/AdPodInfoProxyApi.kt | 4 ++++ .../interactive_media_ads/AdsLoadedListenerProxyApi.kt | 4 ++++ .../interactive_media_ads/AdsManagerLoadedEventProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/BaseManagerProxyApi.kt | 4 ++++ .../interactive_media_ads/ContentProgressProviderProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/FrameLayoutProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/MediaPlayerProxyApi.kt | 4 ++++ .../interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/VideoAdPlayerProxyApi.kt | 4 ++++ .../interactive_media_ads/VideoProgressUpdateProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/VideoViewProxyApi.kt | 4 ++++ .../packages/interactive_media_ads/ViewGroupProxyApi.kt | 4 ++++ .../flutter/packages/interactive_media_ads/ViewProxyApi.kt | 4 ++++ 21 files changed, 84 insertions(+) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt index ff760440ed9..1b204ec4dab 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt index 82b6c5b3057..201cd60bd87 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.app.Activity diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt index 4186feed7c4..ce1ac57a154 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt index c93763cfa05..96ad145213e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.app.Activity diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt index bdf2e80f2d5..4e27ad5b53b 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdEvent diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt index cc34e8e4671..cc9a8ee92fa 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt index 751a4137b2a..53b9fa3ab43 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdPodInfo diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt index 6676150603e..1a3257a461f 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsLoader diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt index 396d91725ca..9ada354d0e3 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsManager diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt index e7ae90232d9..7c6bf49d951 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdErrorEvent diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt index 00f9e53e19b..d111f9c0023 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads class ContentProgressProviderProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt index 02fda66ec14..ad037a15c20 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.widget.FrameLayout diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt index 8c19a8df3b8..fae90bfc460 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.view.ViewGroup diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt index edb815b95f4..9a8e6386c77 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads class ImaSdkSettingsProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt index 738affeae04..c09090c9e0c 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.media.MediaPlayer diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt index 1e0ce6f3c27..a6649afa22d 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index df344a85ea8..61ea2bd7304 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdPodInfo diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt index 9cf6795ba13..dbe7672053e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index 33ee5b47e6e..0381149f370 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.media.MediaPlayer diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt index 0999fd2d8d7..8597e32ea80 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import android.view.View diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt index 489b62c166f..4e3425378ee 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads class ViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiView(pigeonRegistrar) {} From 90965aa1feff682dbf1c69b969a5281883e4d53d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 13 May 2024 21:37:15 -0400 Subject: [PATCH 22/76] copyright header --- .../GeneratedInteractiveMediaAdsLibrary.kt | 3 +++ packages/interactive_media_ads/pigeons/copyright.txt | 3 +++ .../pigeons/interactive_media_ads_android.dart | 6 +----- 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 packages/interactive_media_ads/pigeons/copyright.txt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index fbed11c1101..3aa2566d913 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -1,3 +1,6 @@ +// 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 (v18.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon @file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") diff --git a/packages/interactive_media_ads/pigeons/copyright.txt b/packages/interactive_media_ads/pigeons/copyright.txt new file mode 100644 index 00000000000..fb682b1ab96 --- /dev/null +++ b/packages/interactive_media_ads/pigeons/copyright.txt @@ -0,0 +1,3 @@ +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. \ No newline at end of file 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 566f3515864..916960c7dfb 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -8,12 +8,8 @@ import 'package:pigeon/pigeon.dart'; @ConfigurePigeon( PigeonOptions( + copyrightHeader: 'pigeons/copyright.txt', dartOut: 'lib/src/android/interactive_media_ads.g.dart', - dartOptions: DartOptions(copyrightHeader: [ - '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.', - ]), kotlinOut: 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt', kotlinOptions: KotlinOptions( From 93c239b2c1745903c5996b5f0f0f2be02bcb15ea Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 13 May 2024 22:00:36 -0400 Subject: [PATCH 23/76] first test file --- .../AdDisplayContainerProxyApi.kt | 2 +- .../AdErrorEventProxyApiTest.kt | 25 +++++++++++++++++++ .../InteractiveMediaAdsPluginTest.kt | 6 ----- 3 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt index 6351c508860..8c7384ad080 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt @@ -5,4 +5,4 @@ package dev.flutter.packages.interactive_media_ads class AdDisplayContainerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiAdDisplayContainer(pigeonRegistrar) {} + PigeonApiAdDisplayContainer(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt new file mode 100644 index 00000000000..96f1b4e36a4 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt @@ -0,0 +1,25 @@ +// 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.AdError +import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import kotlin.test.Test +import org.mockito.Mockito.mock +import org.mockito.Mockito.`when` +import kotlin.test.assertEquals + +internal class AdErrorEventProxyApiTest { + @Test + fun error() { + val api = ProxyApiRegistrar(mock(), mock()).getPigeonApiAdErrorEvent() + + val mockEvent = mock() + val mockError = mock() + `when`(mockEvent.error).thenReturn(mockError) + + assertEquals(mockError, api.error(mockEvent)) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt index 3adc0d0a56b..e39ee943df4 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt @@ -20,12 +20,6 @@ import org.mockito.Mockito internal class InteractiveMediaAdsPluginTest { @Test fun onMethodCall_getPlatformVersion_returnsExpectedValue() { - val plugin = InteractiveMediaAdsPlugin() - val call = MethodCall("getPlatformVersion", null) - val mockResult: MethodChannel.Result = Mockito.mock(MethodChannel.Result::class.java) - plugin.onMethodCall(call, mockResult) - - Mockito.verify(mockResult).success("Android " + android.os.Build.VERSION.RELEASE) } } From c1b00f13bae9d49d280fe2088687b4ef3b27409b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 13:33:55 -0400 Subject: [PATCH 24/76] working tests --- .../android/build.gradle | 1 + .../AdErrorListenerProxyApi.kt | 5 ++- .../ProxyApiRegistrar.kt | 11 +++++- .../AdErrorEventProxyApiTest.kt | 4 +-- .../AdErrorListenerProxyApiTest.kt | 35 +++++++++++++++++++ .../TestProxyApiRegistrar.kt | 17 +++++++++ 6 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt diff --git a/packages/interactive_media_ads/android/build.gradle b/packages/interactive_media_ads/android/build.gradle index 46ccfe2232e..05c12b785ce 100644 --- a/packages/interactive_media_ads/android/build.gradle +++ b/packages/interactive_media_ads/android/build.gradle @@ -54,6 +54,7 @@ android { implementation 'com.google.ads.interactivemedia.v3:interactivemedia:3.33.0' testImplementation 'junit:junit:4.13.2' testImplementation 'org.jetbrains.kotlin:kotlin-test' + testImplementation "org.mockito.kotlin:mockito-kotlin:4.1.0" testImplementation 'org.mockito:mockito-inline:5.1.0' testImplementation 'androidx.test:core:1.3.0' diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt index 201cd60bd87..4460a004313 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -4,15 +4,14 @@ package dev.flutter.packages.interactive_media_ads -import android.app.Activity import com.google.ads.interactivemedia.v3.api.AdErrorEvent class AdErrorListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdErrorListener(pigeonRegistrar) { - private class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : + internal class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : AdErrorEvent.AdErrorListener { override fun onAdError(event: AdErrorEvent) { - ((api.pigeonRegistrar as ProxyApiRegistrar).context as Activity).runOnUiThread { + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.onAdError(this, event) {} } } 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 ad138eda865..8c2ccbe4588 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 @@ -5,10 +5,19 @@ package dev.flutter.packages.interactive_media_ads import android.content.Context +import android.os.Handler +import android.os.Looper import io.flutter.plugin.common.BinaryMessenger -class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) : +open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) : PigeonProxyApiRegistrar(binaryMessenger) { + + internal open fun runOnMainThread(callback: Runnable) { + Handler(Looper.getMainLooper()).post { + callback.run() + } + } + override fun getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { return BaseDisplayContainerProxyApi(this) } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt index 96f1b4e36a4..d9914380039 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt @@ -8,7 +8,7 @@ import com.google.ads.interactivemedia.v3.api.AdError import com.google.ads.interactivemedia.v3.api.AdErrorEvent import kotlin.test.Test import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` +import org.mockito.kotlin.whenever import kotlin.test.assertEquals internal class AdErrorEventProxyApiTest { @@ -18,7 +18,7 @@ internal class AdErrorEventProxyApiTest { val mockEvent = mock() val mockError = mock() - `when`(mockEvent.error).thenReturn(mockError) + whenever(mockEvent.error).thenReturn(mockError) assertEquals(mockError, api.error(mockEvent)) } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt new file mode 100644 index 00000000000..513a93f718b --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt @@ -0,0 +1,35 @@ +// 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.AdErrorEvent +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify +import kotlin.test.Test +import kotlin.test.assertTrue +import org.mockito.kotlin.any +import org.mockito.kotlin.eq +import org.mockito.kotlin.whenever + +internal class AdErrorListenerProxyApiTest { + @Test + fun pigeon_defaultConstructor() { + val api = ProxyApiRegistrar(mock(), mock()).getPigeonApiAdErrorListener() + + assertTrue(api.pigeon_defaultConstructor() is AdErrorListenerProxyApi.AdErrorListenerImpl) + } + + @Test + fun onAdError() { + val mockApi = mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = AdErrorListenerProxyApi.AdErrorListenerImpl(mockApi) + val mockEvent = mock() + instance.onAdError(mockEvent) + + verify(mockApi).onAdError(eq(instance), eq(mockEvent), any()) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt new file mode 100644 index 00000000000..f54111f2663 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt @@ -0,0 +1,17 @@ +// 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 org.mockito.kotlin.mock + +/** + * Test implementation of `ProxyApiRegistrar` that provides mocks and instantly runs callbacks + * instead of posting them. + */ +class TestProxyApiRegistrar : ProxyApiRegistrar(mock(), mock()) { + override fun runOnMainThread(callback: Runnable) { + callback.run() + } +} \ No newline at end of file From dce1723a2f59d44739a9819451eea0b17235c606 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 14:09:08 -0400 Subject: [PATCH 25/76] more working tests --- .../AdEventListenerProxyApi.kt | 4 +- .../AdsLoadedListenerProxyApi.kt | 6 +- .../AdErrorEventProxyApiTest.kt | 6 +- .../AdErrorProxyApiTest.kt | 54 ++++++++++++++ .../AdEventListenerProxyApiTest.kt | 35 ++++++++++ .../AdEventProxyApiTest.kt | 24 +++++++ .../AdMediaInfoProxyApiTest.kt | 20 ++++++ .../AdPodInfoProxyApiTest.kt | 70 +++++++++++++++++++ .../AdsLoadedListenerProxyApiTest.kt | 31 ++++++++ 9 files changed, 243 insertions(+), 7 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt index 96ad145213e..081485ca801 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -9,9 +9,9 @@ import com.google.ads.interactivemedia.v3.api.AdEvent class AdEventListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdEventListener(pigeonRegistrar) { - private class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { + internal class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { override fun onAdEvent(event: AdEvent) { - ((api.pigeonRegistrar as ProxyApiRegistrar).context as Activity).runOnUiThread { + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.onAdEvent(this, event) {} } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt index 1a3257a461f..afed975f822 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt @@ -9,10 +9,12 @@ import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent class AdsLoadedListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdsLoadedListener(pigeonRegistrar) { - private class AdsLoadedListenerImpl(val api: AdsLoadedListenerProxyApi) : + internal class AdsLoadedListenerImpl(val api: AdsLoadedListenerProxyApi) : AdsLoader.AdsLoadedListener { override fun onAdsManagerLoaded(event: AdsManagerLoadedEvent) { - api.onAdsManagerLoaded(this, event) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.onAdsManagerLoaded(this, event) {} + } } } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt index d9914380039..78eba21a325 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt @@ -16,10 +16,10 @@ internal class AdErrorEventProxyApiTest { fun error() { val api = ProxyApiRegistrar(mock(), mock()).getPigeonApiAdErrorEvent() - val mockEvent = mock() + val instance = mock() val mockError = mock() - whenever(mockEvent.error).thenReturn(mockError) + whenever(instance.error).thenReturn(mockError) - assertEquals(mockError, api.error(mockEvent)) + assertEquals(mockError, api.error(instance)) } } \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt new file mode 100644 index 00000000000..0018fecf589 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt @@ -0,0 +1,54 @@ +// 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.AdError +import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import org.mockito.Mockito +import org.mockito.kotlin.whenever +import kotlin.test.assertEquals +import kotlin.test.Test + +class AdErrorProxyApiTest { + @Test + fun errorCode() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + + val instance = Mockito.mock() + whenever(instance.errorCode).thenReturn(AdError.AdErrorCode.VIDEO_PLAY_ERROR) + + assertEquals(AdErrorCode.VIDEO_PLAY_ERROR, api.errorCode(instance)) + } + + @Test + fun errorCodeNumber() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + + val instance = Mockito.mock() + whenever(instance.errorCodeNumber).thenReturn(0) + + assertEquals(0, api.errorCodeNumber(instance)) + } + + @Test + fun errorType() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + + val instance = Mockito.mock() + whenever(instance.errorType).thenReturn(AdError.AdErrorType.LOAD) + + assertEquals(AdErrorType.LOAD, api.errorType(instance)) + } + + @Test + fun message() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + + val instance = Mockito.mock() + whenever(instance.message).thenReturn("message") + + assertEquals("message", api.message(instance)) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt new file mode 100644 index 00000000000..a6503ff98bb --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt @@ -0,0 +1,35 @@ +// 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.AdErrorEvent +import com.google.ads.interactivemedia.v3.api.AdEvent +import org.mockito.Mockito +import org.mockito.kotlin.any +import org.mockito.kotlin.eq +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertTrue + +class AdEventListenerProxyApiTest { + @Test + fun pigeon_defaultConstructor() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdEventListener() + + assertTrue(api.pigeon_defaultConstructor() is AdEventListenerProxyApi.AdEventListenerImpl) + } + + @Test + fun onAdEvent() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = AdEventListenerProxyApi.AdEventListenerImpl(mockApi) + val mockEvent = Mockito.mock() + instance.onAdEvent(mockEvent) + + Mockito.verify(mockApi).onAdEvent(eq(instance), eq(mockEvent), any()) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt new file mode 100644 index 00000000000..ecabb6b2230 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt @@ -0,0 +1,24 @@ +// 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.AdError +import com.google.ads.interactivemedia.v3.api.AdEvent +import org.mockito.Mockito +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdEventProxyApiTest { + @Test + fun type() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdEvent() + + val instance = Mockito.mock() + whenever(instance.type).thenReturn(AdEvent.AdEventType.PAUSED) + + assertEquals(AdEventType.PAUSED, api.type(instance)) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt new file mode 100644 index 00000000000..20f2ee97c2e --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt @@ -0,0 +1,20 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdError +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo +import org.mockito.Mockito +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdMediaInfoProxyApiTest { + @Test + fun url() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdMediaInfo() + + val instance = Mockito.mock() + whenever(instance.url).thenReturn("url") + + assertEquals("url", api.url(instance)) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt new file mode 100644 index 00000000000..9c20168d6dd --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt @@ -0,0 +1,70 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdPodInfo +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo +import org.mockito.Mockito +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdPodInfoProxyApiTest { + @Test + fun adPosition() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + + val instance = Mockito.mock() + whenever(instance.adPosition).thenReturn(0) + + assertEquals(0, api.adPosition(instance)) + } + + @Test + fun maxDuration() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + + val instance = Mockito.mock() + whenever(instance.maxDuration).thenReturn(0.0) + + assertEquals(0.0, api.maxDuration(instance)) + } + + @Test + fun podIndex() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + + val instance = Mockito.mock() + whenever(instance.podIndex).thenReturn(0) + + assertEquals(0, api.podIndex(instance)) + } + + @Test + fun timeOffset() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + + val instance = Mockito.mock() + whenever(instance.timeOffset).thenReturn(0.0) + + assertEquals(0.0, api.timeOffset(instance)) + } + + @Test + fun totalAds() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + + val instance = Mockito.mock() + whenever(instance.totalAds).thenReturn(0) + + assertEquals(0, api.totalAds(instance)) + } + + @Test + fun isBumper() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + + val instance = Mockito.mock() + whenever(instance.isBumper).thenReturn(true) + + assertEquals(true, api.isBumper(instance)) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt new file mode 100644 index 00000000000..4896a5a34a1 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt @@ -0,0 +1,31 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdEvent +import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent +import org.mockito.Mockito +import org.mockito.kotlin.any +import org.mockito.kotlin.eq +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertTrue + +class AdsLoadedListenerProxyApiTest { + @Test + fun pigeon_defaultConstructor() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoadedListener() + + assertTrue(api.pigeon_defaultConstructor() is AdsLoadedListenerProxyApi.AdsLoadedListenerImpl) + } + + @Test + fun onAdsManagerLoaded() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = AdsLoadedListenerProxyApi.AdsLoadedListenerImpl(mockApi) + val mockEvent = Mockito.mock() + instance.onAdsManagerLoaded(mockEvent) + + Mockito.verify(mockApi).onAdsManagerLoaded(eq(instance), eq(mockEvent), any()) + } +} \ No newline at end of file From 76af339355fd135124b56a260392e65cba2d8071 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 14:51:32 -0400 Subject: [PATCH 26/76] more tests --- .../AdsLoaderProxyApiTest.kt | 44 +++++++++++++++ .../AdsManagerLoadedEventProxyApiTest.kt | 22 ++++++++ .../AdsManagerProxyApiTest.kt | 38 +++++++++++++ .../AdsRequestProxyApiTest.kt | 30 +++++++++++ .../BaseManagerProxyApiTest.kt | 53 +++++++++++++++++++ .../ImaSdkFactoryProxyApiTest.kt | 49 +++++++++++++++++ 6 files changed, 236 insertions(+) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt new file mode 100644 index 00000000000..4657c402ec3 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt @@ -0,0 +1,44 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import com.google.ads.interactivemedia.v3.api.AdsLoader +import com.google.ads.interactivemedia.v3.api.AdsRequest +import org.mockito.Mockito +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import kotlin.test.Test + +class AdsLoaderProxyApiTest { + @Test + fun addAdErrorListener() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoader() + + val instance = mock() + val mockListener = mock() + api.addAdErrorListener(instance, mockListener) + + verify(instance).addAdErrorListener(mockListener) + } + + @Test + fun addAdsLoadedListener() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoader() + + val instance = mock() + val mockListener = mock() + api.addAdsLoadedListener(instance, mockListener) + + verify(instance).addAdsLoadedListener(mockListener) + } + + @Test + fun requestAds() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoader() + + val instance = mock() + val mockRequest = mock() + api.requestAds(instance, mockRequest) + + verify(instance).requestAds(mockRequest) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt new file mode 100644 index 00000000000..bd9a8988724 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt @@ -0,0 +1,22 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdError +import com.google.ads.interactivemedia.v3.api.AdsManager +import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent +import org.mockito.Mockito +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertEquals + +class AdsManagerLoadedEventProxyApiTest { + @Test + fun manager() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsManagerLoadedEvent() + + val instance = Mockito.mock() + val mockManager = Mockito.mock() + whenever(instance.adsManager).thenReturn(mockManager) + + assertEquals(mockManager, api.manager(instance)) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt new file mode 100644 index 00000000000..e6a5371d7c6 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt @@ -0,0 +1,38 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdsManager +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import kotlin.test.Test + +class AdsManagerProxyApiTest { + @Test + fun discardAdBreak() { + val api = TestProxyApiRegistrar().getPigeonApiAdsManager() + + val instance = mock() + api.discardAdBreak(instance) + + verify(instance).discardAdBreak() + } + + @Test + fun pause() { + val api = TestProxyApiRegistrar().getPigeonApiAdsManager() + + val instance = mock() + api.pause(instance) + + verify(instance).pause() + } + + @Test + fun start() { + val api = TestProxyApiRegistrar().getPigeonApiAdsManager() + + val instance = mock() + api.start(instance) + + verify(instance).start() + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..3d90c4192ce --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApiTest.kt @@ -0,0 +1,30 @@ +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 org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import kotlin.test.Test + +class AdsRequestProxyApiTest { + @Test + fun setAdTagUrl() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + api.setAdTagUrl(instance, "adTag") + + verify(instance).adTagUrl = "adTag" + } + + @Test + fun setContentProgressProvider() { + val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() + + val instance = mock() + val mockProvider = mock< ContentProgressProvider>() + api.setContentProgressProvider(instance, mockProvider) + + verify(instance).contentProgressProvider = mockProvider + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt new file mode 100644 index 00000000000..a4a20d8b265 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt @@ -0,0 +1,53 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import com.google.ads.interactivemedia.v3.api.AdEvent +import com.google.ads.interactivemedia.v3.api.AdsRequest +import com.google.ads.interactivemedia.v3.api.BaseManager +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import kotlin.test.Test + +class BaseManagerProxyApiTest { + @Test + fun addAdErrorListener() { + val api = TestProxyApiRegistrar().getPigeonApiBaseManager() + + val instance = mock() + val mockListener = mock() + api.addAdErrorListener(instance, mockListener) + + verify(instance).addAdErrorListener(mockListener) + } + + @Test + fun addAdEventListener() { + val api = TestProxyApiRegistrar().getPigeonApiBaseManager() + + val instance = mock() + val mockListener = mock() + api.addAdEventListener(instance, mockListener) + + verify(instance).addAdEventListener(mockListener) + } + + @Test + fun destroy() { + val api = TestProxyApiRegistrar().getPigeonApiBaseManager() + + val instance = mock() + api.destroy(instance) + + verify(instance).destroy() + } + + @Test + fun init() { + val api = TestProxyApiRegistrar().getPigeonApiBaseManager() + + val instance = mock() + api.init(instance) + + verify(instance).init() + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt new file mode 100644 index 00000000000..0b97605028e --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt @@ -0,0 +1,49 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdDisplayContainer +import com.google.ads.interactivemedia.v3.api.AdsLoader +import com.google.ads.interactivemedia.v3.api.AdsRequest +import com.google.ads.interactivemedia.v3.api.ImaSdkFactory +import com.google.ads.interactivemedia.v3.api.ImaSdkSettings +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import kotlin.test.Test +import kotlin.test.assertEquals + +class ImaSdkFactoryProxyApiTest { + @Test + fun createImaSdkSettings() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkFactory() + + val instance = mock() + val mockSettings = mock() + whenever(instance.createImaSdkSettings()).thenReturn(mockSettings) + + assertEquals(mockSettings, api.createImaSdkSettings(instance)) + } + + @Test + fun createAdsLoader() { + val registrar = TestProxyApiRegistrar() + val api = registrar.getPigeonApiImaSdkFactory() + + val instance = mock() + val mockAdsLoader = mock() + val mockSettings = mock() + val mockContainer = mock() + whenever(instance.createAdsLoader(registrar.context, mockSettings, mockContainer)).thenReturn(mockAdsLoader) + + assertEquals(mockAdsLoader, api.createAdsLoader(instance, mockSettings, mockContainer)) + } + + @Test + fun createAdsRequest() { + val api = TestProxyApiRegistrar().getPigeonApiImaSdkFactory() + + val instance = mock() + val mockRequest = mock() + whenever(instance.createAdsRequest()).thenReturn(mockRequest) + + assertEquals(mockRequest, api.createAdsRequest(instance)) + } +} \ No newline at end of file From c2d6f6763db4dc17b3ef6590b0130c1b5d25f9ed Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 15:05:01 -0400 Subject: [PATCH 27/76] media player test --- .../MediaPlayerProxyApiTest.kt | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt new file mode 100644 index 00000000000..df0e4174970 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt @@ -0,0 +1,62 @@ +package dev.flutter.packages.interactive_media_ads + +import android.media.MediaPlayer +import com.google.ads.interactivemedia.v3.api.AdsManager +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +import kotlin.test.Test +import kotlin.test.assertEquals + +class MediaPlayerProxyApiTest { + @Test + fun getDuration() { + val api = TestProxyApiRegistrar().getPigeonApiMediaPlayer() + + val instance = mock() + whenever(instance.duration).thenReturn(0) + + assertEquals(0, api.getDuration(instance)) + } + + @Test + fun seekTo() { + val api = TestProxyApiRegistrar().getPigeonApiMediaPlayer() + + val instance = mock() + api.seekTo(instance, 0) + + verify(instance).seekTo(0) + } + + @Test + fun start() { + val api = TestProxyApiRegistrar().getPigeonApiMediaPlayer() + + val instance = mock() + api.start(instance) + + verify(instance).start() + } + + @Test + fun pause() { + val api = TestProxyApiRegistrar().getPigeonApiMediaPlayer() + + val instance = mock() + api.pause(instance) + + verify(instance).pause() + } + + @Test + fun stop() { + val api = TestProxyApiRegistrar().getPigeonApiMediaPlayer() + + val instance = mock() + api.stop(instance) + + verify(instance).stop() + } +} \ No newline at end of file From 15aa0498e72025da82fd9434030b4d668a302eab Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 15:44:34 -0400 Subject: [PATCH 28/76] some more tests --- .../VideoAdPlayerProxyApi.kt | 12 +- .../VideoAdPlayerCallbackProxyApiTest.kt | 121 ++++++++++++++++++ .../VideoAdPlayerProxyApiTest.kt | 8 ++ 3 files changed, 135 insertions(+), 6 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index 61ea2bd7304..4ddfb637f53 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -16,16 +16,16 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } private class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi) : VideoAdPlayer { - var _volume: Int = 0 + var savedVolume: Int = 0 - var _adProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY + var savedAdProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY override fun getAdProgress(): VideoProgressUpdate { - return _adProgress + return savedAdProgress } override fun getVolume(): Int { - return _volume + return savedVolume } override fun addCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { @@ -58,10 +58,10 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } override fun setVolume(pigeon_instance: VideoAdPlayer, value: Long) { - (pigeon_instance as VideoAdPlayerImpl)._volume = value.toInt() + (pigeon_instance as VideoAdPlayerImpl).savedVolume = value.toInt() } override fun setAdProgress(pigeon_instance: VideoAdPlayer, progress: VideoProgressUpdate) { - (pigeon_instance as VideoAdPlayerImpl)._adProgress = progress + (pigeon_instance as VideoAdPlayerImpl).savedAdProgress = progress } } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt new file mode 100644 index 00000000000..be8cb563b0d --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt @@ -0,0 +1,121 @@ +package dev.flutter.packages.interactive_media_ads + +import com.google.ads.interactivemedia.v3.api.AdsRequest +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo +import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback +import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import kotlin.test.Test + +class VideoAdPlayerCallbackProxyApiTest { + @Test + fun onAdProgress() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + val mockUpdate = mock() + api.onAdProgress(instance, mockInfo, mockUpdate) + + verify(instance).onAdProgress(mockInfo, mockUpdate) + } + + @Test + fun onBuffering() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onBuffering(instance, mockInfo) + + verify(instance).onBuffering(mockInfo) + } + + @Test + fun onContentComplete() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + api.onContentComplete(instance) + + verify(instance).onContentComplete() + } + + @Test + fun onEnded() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onEnded(instance, mockInfo) + + verify(instance).onEnded(mockInfo) + } + + @Test + fun onError() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onError(instance, mockInfo) + + verify(instance).onError(mockInfo) + } + + @Test + fun onLoaded() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onLoaded(instance, mockInfo) + + verify(instance).onLoaded(mockInfo) + } + + @Test + fun onPause() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onPause(instance, mockInfo) + + verify(instance).onPause(mockInfo) + } + + @Test + fun onPlay() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onPlay(instance, mockInfo) + + verify(instance).onPlay(mockInfo) + } + + @Test + fun onResume() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onResume(instance, mockInfo) + + verify(instance).onResume(mockInfo) + } + + @Test + fun onVolumeChanged() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayerCallback() + + val instance = mock() + val mockInfo = mock() + api.onVolumeChanged(instance, mockInfo, 0) + + verify(instance).onVolumeChanged(mockInfo, 0) + } +} \ No newline at end of file diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt new file mode 100644 index 00000000000..1055d096e7d --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt @@ -0,0 +1,8 @@ +// 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 + +class VideoAdPlayerProxyApiTest { +} \ No newline at end of file From 7c3dc18785c1af4524b025c05f39acf2f01caaf6 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 17:19:13 -0400 Subject: [PATCH 29/76] finish platform unit tests --- .../AdErrorListenerProxyApi.kt | 4 +- .../AdEventListenerProxyApi.kt | 5 +- .../ProxyApiRegistrar.kt | 4 +- .../VideoAdPlayerCallbackProxyApi.kt | 2 +- .../VideoAdPlayerProxyApi.kt | 28 ++-- .../src/test/kotlin/android/net/Uri.kt | 22 +++ .../AdErrorEventProxyApiTest.kt | 4 +- .../AdErrorListenerProxyApiTest.kt | 6 +- .../AdErrorProxyApiTest.kt | 7 +- .../AdEventListenerProxyApiTest.kt | 7 +- .../AdEventProxyApiTest.kt | 7 +- .../AdMediaInfoProxyApiTest.kt | 11 +- .../AdPodInfoProxyApiTest.kt | 11 +- .../AdsLoadedListenerProxyApiTest.kt | 11 +- .../AdsLoaderProxyApiTest.kt | 8 +- .../AdsManagerLoadedEventProxyApiTest.kt | 11 +- .../AdsManagerProxyApiTest.kt | 8 +- .../AdsRequestProxyApiTest.kt | 10 +- .../BaseManagerProxyApiTest.kt | 9 +- .../ImaSdkFactoryProxyApiTest.kt | 13 +- .../InteractiveMediaAdsPluginTest.kt | 8 +- .../MediaPlayerProxyApiTest.kt | 12 +- .../TestProxyApiRegistrar.kt | 2 +- .../VideoAdPlayerCallbackProxyApiTest.kt | 9 +- .../VideoAdPlayerProxyApiTest.kt | 126 +++++++++++++++++- .../VideoViewProxyApiTest.kt | 38 ++++++ .../ViewGroupProxyApiTest.kt | 24 ++++ .../android/android_ad_display_container.dart | 109 +++++++-------- 28 files changed, 380 insertions(+), 136 deletions(-) create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/android/net/Uri.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt index 4460a004313..d8f7710f87f 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -11,9 +11,7 @@ class AdErrorListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : internal class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : AdErrorEvent.AdErrorListener { override fun onAdError(event: AdErrorEvent) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.onAdError(this, event) {} - } + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.onAdError(this, event) {} } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt index 081485ca801..ab297dd0240 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -4,16 +4,13 @@ package dev.flutter.packages.interactive_media_ads -import android.app.Activity import com.google.ads.interactivemedia.v3.api.AdEvent class AdEventListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiAdEventListener(pigeonRegistrar) { internal class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { override fun onAdEvent(event: AdEvent) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.onAdEvent(this, event) {} - } + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.onAdEvent(this, event) {} } } } 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 8c2ccbe4588..37c920b8564 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 @@ -13,9 +13,7 @@ open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Cont PigeonProxyApiRegistrar(binaryMessenger) { internal open fun runOnMainThread(callback: Runnable) { - Handler(Looper.getMainLooper()).post { - callback.run() - } + Handler(Looper.getMainLooper()).post { callback.run() } } override fun getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt index a6649afa22d..ef0c1ce2752 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt @@ -40,7 +40,7 @@ class VideoAdPlayerCallbackProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, adMediaInfo: AdMediaInfo ) { - pigeon_instance.onEnded(adMediaInfo) + pigeon_instance.onError(adMediaInfo) } override fun onLoaded( diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index 4ddfb637f53..0c79dca75a1 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -15,7 +15,7 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : return VideoAdPlayerImpl(this) } - private class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi) : VideoAdPlayer { + internal class VideoAdPlayerImpl(val api: VideoAdPlayerProxyApi) : VideoAdPlayer { var savedVolume: Int = 0 var savedAdProgress: VideoProgressUpdate = VideoProgressUpdate.VIDEO_TIME_NOT_READY @@ -29,31 +29,43 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } override fun addCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { - api.addCallback(this, callbackArg = callback) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.addCallback(this, callbackArg = callback) {} + } } override fun loadAd(adMediaInfo: AdMediaInfo, adPodInfo: AdPodInfo) { - api.loadAd(this, adMediaInfo, adPodInfo) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.loadAd(this, adMediaInfo, adPodInfo) {} + } } override fun pauseAd(adMediaInfo: AdMediaInfo) { - api.pauseAd(this, adMediaInfo) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.pauseAd(this, adMediaInfo) {} + } } override fun playAd(adMediaInfo: AdMediaInfo) { - api.playAd(this, adMediaInfo) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.playAd(this, adMediaInfo) {} + } } override fun release() { - api.release(this) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.release(this) {} } } override fun removeCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { - api.removeCallback(this, callbackArg = callback) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.removeCallback(this, callbackArg = callback) {} + } } override fun stopAd(adMediaInfo: AdMediaInfo) { - api.stopAd(this, adMediaInfo) {} + (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { + api.stopAd(this, adMediaInfo) {} + } } } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/android/net/Uri.kt b/packages/interactive_media_ads/android/src/test/kotlin/android/net/Uri.kt new file mode 100644 index 00000000000..107eef275d9 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/android/net/Uri.kt @@ -0,0 +1,22 @@ +// 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 android.net + +/** + * Redeclaration of Uri that works for tests. + * + * Without this redeclaration, `Uri.parse` always returns null. + */ +class Uri { + companion object { + @JvmStatic var lastValue: String? = null + + @JvmStatic + fun parse(value: String): Uri { + lastValue = value + return Uri() + } + } +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt index 78eba21a325..4d784252ae4 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt @@ -7,9 +7,9 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError import com.google.ads.interactivemedia.v3.api.AdErrorEvent import kotlin.test.Test +import kotlin.test.assertEquals import org.mockito.Mockito.mock import org.mockito.kotlin.whenever -import kotlin.test.assertEquals internal class AdErrorEventProxyApiTest { @Test @@ -22,4 +22,4 @@ internal class AdErrorEventProxyApiTest { assertEquals(mockError, api.error(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt index 513a93f718b..ca980ba01ab 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt @@ -5,10 +5,10 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdErrorEvent -import org.mockito.Mockito.mock -import org.mockito.Mockito.verify import kotlin.test.Test import kotlin.test.assertTrue +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.whenever @@ -32,4 +32,4 @@ internal class AdErrorListenerProxyApiTest { verify(mockApi).onAdError(eq(instance), eq(mockEvent), any()) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt index 0018fecf589..a7526e647a8 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt @@ -5,11 +5,10 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError -import com.google.ads.interactivemedia.v3.api.AdErrorEvent +import kotlin.test.Test +import kotlin.test.assertEquals import org.mockito.Mockito import org.mockito.kotlin.whenever -import kotlin.test.assertEquals -import kotlin.test.Test class AdErrorProxyApiTest { @Test @@ -51,4 +50,4 @@ class AdErrorProxyApiTest { assertEquals("message", api.message(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt index a6503ff98bb..be5e33d3cbf 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt @@ -4,14 +4,13 @@ package dev.flutter.packages.interactive_media_ads -import com.google.ads.interactivemedia.v3.api.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdEvent +import kotlin.test.Test +import kotlin.test.assertTrue import org.mockito.Mockito import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.whenever -import kotlin.test.Test -import kotlin.test.assertTrue class AdEventListenerProxyApiTest { @Test @@ -32,4 +31,4 @@ class AdEventListenerProxyApiTest { Mockito.verify(mockApi).onAdEvent(eq(instance), eq(mockEvent), any()) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt index ecabb6b2230..b2f721d63d2 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt @@ -4,12 +4,11 @@ package dev.flutter.packages.interactive_media_ads -import com.google.ads.interactivemedia.v3.api.AdError import com.google.ads.interactivemedia.v3.api.AdEvent -import org.mockito.Mockito -import org.mockito.kotlin.whenever import kotlin.test.Test import kotlin.test.assertEquals +import org.mockito.Mockito +import org.mockito.kotlin.whenever class AdEventProxyApiTest { @Test @@ -21,4 +20,4 @@ class AdEventProxyApiTest { assertEquals(AdEventType.PAUSED, api.type(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt index 20f2ee97c2e..bcce7840243 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt @@ -1,11 +1,14 @@ +// 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.AdError import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo -import org.mockito.Mockito -import org.mockito.kotlin.whenever import kotlin.test.Test import kotlin.test.assertEquals +import org.mockito.Mockito +import org.mockito.kotlin.whenever class AdMediaInfoProxyApiTest { @Test @@ -17,4 +20,4 @@ class AdMediaInfoProxyApiTest { assertEquals("url", api.url(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt index 9c20168d6dd..a58880199b9 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt @@ -1,11 +1,14 @@ +// 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.AdPodInfo -import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo -import org.mockito.Mockito -import org.mockito.kotlin.whenever import kotlin.test.Test import kotlin.test.assertEquals +import org.mockito.Mockito +import org.mockito.kotlin.whenever class AdPodInfoProxyApiTest { @Test @@ -67,4 +70,4 @@ class AdPodInfoProxyApiTest { assertEquals(true, api.isBumper(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt index 4896a5a34a1..ca7e14bc6eb 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt @@ -1,13 +1,16 @@ +// 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.AdEvent import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent +import kotlin.test.Test +import kotlin.test.assertTrue import org.mockito.Mockito import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.whenever -import kotlin.test.Test -import kotlin.test.assertTrue class AdsLoadedListenerProxyApiTest { @Test @@ -28,4 +31,4 @@ class AdsLoadedListenerProxyApiTest { Mockito.verify(mockApi).onAdsManagerLoaded(eq(instance), eq(mockEvent), any()) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt index 4657c402ec3..a5553a78bef 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt @@ -1,12 +1,16 @@ +// 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.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsRequest +import kotlin.test.Test import org.mockito.Mockito import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import kotlin.test.Test class AdsLoaderProxyApiTest { @Test @@ -41,4 +45,4 @@ class AdsLoaderProxyApiTest { verify(instance).requestAds(mockRequest) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt index bd9a8988724..a1e1b704e76 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt @@ -1,12 +1,15 @@ +// 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.AdError import com.google.ads.interactivemedia.v3.api.AdsManager import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent -import org.mockito.Mockito -import org.mockito.kotlin.whenever import kotlin.test.Test import kotlin.test.assertEquals +import org.mockito.Mockito +import org.mockito.kotlin.whenever class AdsManagerLoadedEventProxyApiTest { @Test @@ -19,4 +22,4 @@ class AdsManagerLoadedEventProxyApiTest { assertEquals(mockManager, api.manager(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt index e6a5371d7c6..8dc78843ef7 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApiTest.kt @@ -1,9 +1,13 @@ +// 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.AdsManager +import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import kotlin.test.Test class AdsManagerProxyApiTest { @Test @@ -35,4 +39,4 @@ class AdsManagerProxyApiTest { verify(instance).start() } -} \ No newline at end of file +} 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 3d90c4192ce..f8abe621502 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 @@ -1,10 +1,14 @@ +// 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.AdsRequest import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider +import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import kotlin.test.Test class AdsRequestProxyApiTest { @Test @@ -22,9 +26,9 @@ class AdsRequestProxyApiTest { val api = TestProxyApiRegistrar().getPigeonApiAdsRequest() val instance = mock() - val mockProvider = mock< ContentProgressProvider>() + val mockProvider = mock() api.setContentProgressProvider(instance, mockProvider) verify(instance).contentProgressProvider = mockProvider } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt index a4a20d8b265..0c9293d8d71 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApiTest.kt @@ -1,12 +1,15 @@ +// 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.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdEvent -import com.google.ads.interactivemedia.v3.api.AdsRequest import com.google.ads.interactivemedia.v3.api.BaseManager +import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import kotlin.test.Test class BaseManagerProxyApiTest { @Test @@ -50,4 +53,4 @@ class BaseManagerProxyApiTest { verify(instance).init() } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt index 0b97605028e..600e5e41a09 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApiTest.kt @@ -1,3 +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. + package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdDisplayContainer @@ -5,10 +9,10 @@ import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsRequest import com.google.ads.interactivemedia.v3.api.ImaSdkFactory import com.google.ads.interactivemedia.v3.api.ImaSdkSettings -import org.mockito.kotlin.mock -import org.mockito.kotlin.whenever import kotlin.test.Test import kotlin.test.assertEquals +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever class ImaSdkFactoryProxyApiTest { @Test @@ -31,7 +35,8 @@ class ImaSdkFactoryProxyApiTest { val mockAdsLoader = mock() val mockSettings = mock() val mockContainer = mock() - whenever(instance.createAdsLoader(registrar.context, mockSettings, mockContainer)).thenReturn(mockAdsLoader) + whenever(instance.createAdsLoader(registrar.context, mockSettings, mockContainer)) + .thenReturn(mockAdsLoader) assertEquals(mockAdsLoader, api.createAdsLoader(instance, mockSettings, mockContainer)) } @@ -46,4 +51,4 @@ class ImaSdkFactoryProxyApiTest { assertEquals(mockRequest, api.createAdsRequest(instance)) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt index e39ee943df4..0454c61d338 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt @@ -4,10 +4,7 @@ package dev.flutter.packages.interactive_media_ads -import io.flutter.plugin.common.MethodCall -import io.flutter.plugin.common.MethodChannel import kotlin.test.Test -import org.mockito.Mockito /* * This demonstrates a simple unit test of the Kotlin portion of this plugin's implementation. @@ -18,8 +15,5 @@ import org.mockito.Mockito */ internal class InteractiveMediaAdsPluginTest { - @Test - fun onMethodCall_getPlatformVersion_returnsExpectedValue() { - - } + @Test fun onMethodCall_getPlatformVersion_returnsExpectedValue() {} } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt index df0e4174970..cee45eb3d90 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApiTest.kt @@ -1,14 +1,16 @@ +// 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 android.media.MediaPlayer -import com.google.ads.interactivemedia.v3.api.AdsManager +import kotlin.test.Test +import kotlin.test.assertEquals import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import kotlin.test.Test -import kotlin.test.assertEquals - class MediaPlayerProxyApiTest { @Test fun getDuration() { @@ -59,4 +61,4 @@ class MediaPlayerProxyApiTest { verify(instance).stop() } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt index f54111f2663..0aba7066a28 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/TestProxyApiRegistrar.kt @@ -14,4 +14,4 @@ class TestProxyApiRegistrar : ProxyApiRegistrar(mock(), mock()) { override fun runOnMainThread(callback: Runnable) { callback.run() } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt index be8cb563b0d..125fd16f951 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApiTest.kt @@ -1,12 +1,15 @@ +// 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.AdsRequest import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import kotlin.test.Test class VideoAdPlayerCallbackProxyApiTest { @Test @@ -118,4 +121,4 @@ class VideoAdPlayerCallbackProxyApiTest { verify(instance).onVolumeChanged(mockInfo, 0) } -} \ No newline at end of file +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt index 1055d096e7d..01eb2b1f6dd 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApiTest.kt @@ -4,5 +4,129 @@ package dev.flutter.packages.interactive_media_ads +import com.google.ads.interactivemedia.v3.api.AdPodInfo +import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo +import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer +import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertTrue +import org.mockito.Mockito +import org.mockito.kotlin.any +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever + class VideoAdPlayerProxyApiTest { -} \ No newline at end of file + @Test + fun pigeon_defaultConstructor() { + val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiVideoAdPlayer() + + assertTrue(api.pigeon_defaultConstructor() is VideoAdPlayerProxyApi.VideoAdPlayerImpl) + } + + @Test + fun setVolume() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayer() + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(api as VideoAdPlayerProxyApi) + api.setVolume(instance, 0) + + assertEquals(0, instance.volume) + } + + @Test + fun setAdProgress() { + val api = TestProxyApiRegistrar().getPigeonApiVideoAdPlayer() + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(api as VideoAdPlayerProxyApi) + val mockProgressUpdate = mock() + api.setAdProgress(instance, mockProgressUpdate) + + assertEquals(mockProgressUpdate, instance.adProgress) + } + + @Test + fun addCallback() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + val mockCallback = Mockito.mock() + instance.addCallback(mockCallback) + + Mockito.verify(mockApi).addCallback(eq(instance), eq(mockCallback), any()) + } + + @Test + fun loadAd() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + val mockMediaInfo = mock() + val mockPodInfo = mock() + instance.loadAd(mockMediaInfo, mockPodInfo) + + Mockito.verify(mockApi).loadAd(eq(instance), eq(mockMediaInfo), eq(mockPodInfo), any()) + } + + @Test + fun pauseAd() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + val mockMediaInfo = mock() + instance.pauseAd(mockMediaInfo) + + Mockito.verify(mockApi).pauseAd(eq(instance), eq(mockMediaInfo), any()) + } + + @Test + fun playAd() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + val mockMediaInfo = mock() + instance.playAd(mockMediaInfo) + + Mockito.verify(mockApi).playAd(eq(instance), eq(mockMediaInfo), any()) + } + + @Test + fun release() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + instance.release() + + Mockito.verify(mockApi).release(eq(instance), any()) + } + + @Test + fun removeCallback() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + val mockCallback = Mockito.mock() + instance.removeCallback(mockCallback) + + Mockito.verify(mockApi).removeCallback(eq(instance), eq(mockCallback), any()) + } + + @Test + fun stopAd() { + val mockApi = Mockito.mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = VideoAdPlayerProxyApi.VideoAdPlayerImpl(mockApi) + val mockMediaInfo = mock() + instance.stopAd(mockMediaInfo) + + Mockito.verify(mockApi).stopAd(eq(instance), eq(mockMediaInfo), any()) + } +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApiTest.kt new file mode 100644 index 00000000000..f43af0aa428 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApiTest.kt @@ -0,0 +1,38 @@ +// 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 android.net.Uri +import android.widget.VideoView +import kotlin.test.Test +import kotlin.test.assertEquals +import org.mockito.kotlin.isNotNull +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class VideoViewProxyApiTest { + @Test + fun setVideoURI() { + val api = TestProxyApiRegistrar().getPigeonApiVideoView() + + val instance = mock() + api.setVideoUri(instance, "adTag") + + verify(instance).setVideoURI(isNotNull()) + assertEquals("adTag", Uri.lastValue) + } + + @Test + fun getCurrentPosition() { + val api = TestProxyApiRegistrar().getPigeonApiVideoView() + + val instance = mock() + whenever(instance.currentPosition).thenReturn(0) + api.getCurrentPosition(instance) + + assertEquals(0, api.getCurrentPosition(instance)) + } +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApiTest.kt new file mode 100644 index 00000000000..e73e29ed8ea --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApiTest.kt @@ -0,0 +1,24 @@ +// 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 android.view.View +import android.view.ViewGroup +import kotlin.test.Test +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify + +class ViewGroupProxyApiTest { + @Test + fun addView() { + val api = TestProxyApiRegistrar().getPigeonApiViewGroup() + + val instance = mock() + val mockView = mock() + api.addView(instance, mockView) + + verify(instance).addView(mockView) + } +} diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 93d97b11141..49b01437930 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -14,10 +14,11 @@ import 'interactive_media_ads.g.dart' as ima; final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { /// Constructs an [AndroidAdDisplayContainer]. AndroidAdDisplayContainer(super.params) : super.implementation() { - _videoView = _setUpVideoView( - WeakReference(this), - ); + final WeakReference weakThis = + WeakReference(this); + _videoView = _setUpVideoView(weakThis); _frameLayout.addView(_videoView); + _videoAdPlayer = _setUpVideoAdPlayer(weakThis); } static const int _progressPollingMs = 250; @@ -26,6 +27,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { {}; late final ima.VideoView _videoView; late final ima.AdDisplayContainer _adDisplayContainer; + late final ima.VideoAdPlayer _videoAdPlayer; ima.AdMediaInfo? _loadedAdMediaInfo; // The saved ad position, used to resumed ad playback following an ad click-through. int _savedAdPosition = 0; @@ -38,8 +40,9 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { return AndroidViewWidget( view: _frameLayout, onPlatformViewCreated: () async { - _adDisplayContainer = await _setUpAdDisplayContainer( - WeakReference(this), + _adDisplayContainer = await ima.ImaSdkFactory.createAdDisplayContainer( + _frameLayout, + _videoAdPlayer, ); params.onContainerAdded(this); }, @@ -56,19 +59,22 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _adProgressTimer = Timer.periodic( const Duration(milliseconds: _progressPollingMs), (Timer timer) async { - final int currentPosition = await _videoView.getCurrentPosition(); + final ima.VideoProgressUpdate currentProgress = ima.VideoProgressUpdate( + currentTimeMs: await _videoView.getCurrentPosition(), + durationMs: _adDuration!, + ); await Future.wait( - _videoAdPlayerCallbacks.map( - (ima.VideoAdPlayerCallback callback) async { - await callback.onAdProgress( - _loadedAdMediaInfo!, - ima.VideoProgressUpdate( - currentTimeMs: currentPosition, - durationMs: _adDuration!, - ), - ); - }, - ), + >[ + _videoAdPlayer.setAdProgress(currentProgress), + ..._videoAdPlayerCallbacks.map( + (ima.VideoAdPlayerCallback callback) async { + await callback.onAdProgress( + _loadedAdMediaInfo!, + currentProgress, + ); + }, + ), + ], ); }, ); @@ -119,43 +125,40 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ); } - static Future _setUpAdDisplayContainer( + static ima.VideoAdPlayer _setUpVideoAdPlayer( WeakReference weakThis, - ) async { - return ima.ImaSdkFactory.createAdDisplayContainer( - weakThis.target!._frameLayout, - ima.VideoAdPlayer( - addCallback: (_, ima.VideoAdPlayerCallback callback) { - weakThis.target?._videoAdPlayerCallbacks.add(callback); - }, - removeCallback: (_, ima.VideoAdPlayerCallback callback) { - weakThis.target?._videoAdPlayerCallbacks.remove(callback); - }, - loadAd: (_, ima.AdMediaInfo adMediaInfo, ima.AdPodInfo adPodInfo) { - weakThis.target?._loadedAdMediaInfo = adMediaInfo; - }, - pauseAd: (_, ima.AdMediaInfo adMediaInfo) async { - final AndroidAdDisplayContainer? container = weakThis.target; - if (container != null) { - await container._mediaPlayer!.pause(); - container._savedAdPosition = - await container._videoView.getCurrentPosition(); - container._stopAdTracking(); - } - }, - playAd: (_, ima.AdMediaInfo adMediaInfo) { - weakThis.target?._videoView.setVideoUri(adMediaInfo.url); - }, - release: (_) {}, - stopAd: (_, ima.AdMediaInfo adMediaInfo) { - final AndroidAdDisplayContainer? container = weakThis.target; - if (container != null) { - container._stopAdTracking(); - container._resetPlayer(); - container._loadedAdMediaInfo = null; - } - }, - ), + ) { + return ima.VideoAdPlayer( + addCallback: (_, ima.VideoAdPlayerCallback callback) { + weakThis.target?._videoAdPlayerCallbacks.add(callback); + }, + removeCallback: (_, ima.VideoAdPlayerCallback callback) { + weakThis.target?._videoAdPlayerCallbacks.remove(callback); + }, + loadAd: (_, ima.AdMediaInfo adMediaInfo, ima.AdPodInfo adPodInfo) { + weakThis.target?._loadedAdMediaInfo = adMediaInfo; + }, + pauseAd: (_, ima.AdMediaInfo adMediaInfo) async { + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + await container._mediaPlayer!.pause(); + container._savedAdPosition = + await container._videoView.getCurrentPosition(); + container._stopAdTracking(); + } + }, + playAd: (_, ima.AdMediaInfo adMediaInfo) { + weakThis.target?._videoView.setVideoUri(adMediaInfo.url); + }, + release: (_) {}, + stopAd: (_, ima.AdMediaInfo adMediaInfo) { + final AndroidAdDisplayContainer? container = weakThis.target; + if (container != null) { + container._stopAdTracking(); + container._resetPlayer(); + container._loadedAdMediaInfo = null; + } + }, ); } } From 48c7a420f832a1be1d9633829af41fe6cbe51bcb Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 19:41:09 -0400 Subject: [PATCH 30/76] switch tests to use TestProxyApiRegistrar --- .../AdErrorEventProxyApiTest.kt | 2 +- .../AdErrorListenerProxyApiTest.kt | 2 +- .../AdErrorProxyApiTest.kt | 8 ++++---- .../AdEventListenerProxyApiTest.kt | 2 +- .../AdEventProxyApiTest.kt | 2 +- .../AdMediaInfoProxyApiTest.kt | 2 +- .../AdPodInfoProxyApiTest.kt | 12 ++++++------ .../AdsLoadedListenerProxyApiTest.kt | 2 +- .../AdsLoaderProxyApiTest.kt | 6 +++--- .../AdsManagerLoadedEventProxyApiTest.kt | 2 +- .../InteractiveMediaAdsPluginTest.kt | 19 ------------------- 11 files changed, 20 insertions(+), 39 deletions(-) delete mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt index 4d784252ae4..e51f4f66894 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApiTest.kt @@ -14,7 +14,7 @@ import org.mockito.kotlin.whenever internal class AdErrorEventProxyApiTest { @Test fun error() { - val api = ProxyApiRegistrar(mock(), mock()).getPigeonApiAdErrorEvent() + val api = TestProxyApiRegistrar().getPigeonApiAdErrorEvent() val instance = mock() val mockError = mock() diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt index ca980ba01ab..10890f84d61 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApiTest.kt @@ -16,7 +16,7 @@ import org.mockito.kotlin.whenever internal class AdErrorListenerProxyApiTest { @Test fun pigeon_defaultConstructor() { - val api = ProxyApiRegistrar(mock(), mock()).getPigeonApiAdErrorListener() + val api = TestProxyApiRegistrar().getPigeonApiAdErrorListener() assertTrue(api.pigeon_defaultConstructor() is AdErrorListenerProxyApi.AdErrorListenerImpl) } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt index a7526e647a8..62e8efe927f 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApiTest.kt @@ -13,7 +13,7 @@ import org.mockito.kotlin.whenever class AdErrorProxyApiTest { @Test fun errorCode() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + val api = TestProxyApiRegistrar().getPigeonApiAdError() val instance = Mockito.mock() whenever(instance.errorCode).thenReturn(AdError.AdErrorCode.VIDEO_PLAY_ERROR) @@ -23,7 +23,7 @@ class AdErrorProxyApiTest { @Test fun errorCodeNumber() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + val api = TestProxyApiRegistrar().getPigeonApiAdError() val instance = Mockito.mock() whenever(instance.errorCodeNumber).thenReturn(0) @@ -33,7 +33,7 @@ class AdErrorProxyApiTest { @Test fun errorType() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + val api = TestProxyApiRegistrar().getPigeonApiAdError() val instance = Mockito.mock() whenever(instance.errorType).thenReturn(AdError.AdErrorType.LOAD) @@ -43,7 +43,7 @@ class AdErrorProxyApiTest { @Test fun message() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdError() + val api = TestProxyApiRegistrar().getPigeonApiAdError() val instance = Mockito.mock() whenever(instance.message).thenReturn("message") diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt index be5e33d3cbf..02904a9005b 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApiTest.kt @@ -15,7 +15,7 @@ import org.mockito.kotlin.whenever class AdEventListenerProxyApiTest { @Test fun pigeon_defaultConstructor() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdEventListener() + val api = TestProxyApiRegistrar().getPigeonApiAdEventListener() assertTrue(api.pigeon_defaultConstructor() is AdEventListenerProxyApi.AdEventListenerImpl) } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt index b2f721d63d2..fbab52be008 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApiTest.kt @@ -13,7 +13,7 @@ import org.mockito.kotlin.whenever class AdEventProxyApiTest { @Test fun type() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdEvent() + val api = TestProxyApiRegistrar().getPigeonApiAdEvent() val instance = Mockito.mock() whenever(instance.type).thenReturn(AdEvent.AdEventType.PAUSED) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt index bcce7840243..37602d5ab9e 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApiTest.kt @@ -13,7 +13,7 @@ import org.mockito.kotlin.whenever class AdMediaInfoProxyApiTest { @Test fun url() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdMediaInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdMediaInfo() val instance = Mockito.mock() whenever(instance.url).thenReturn("url") diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt index a58880199b9..b1610f25108 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApiTest.kt @@ -13,7 +13,7 @@ import org.mockito.kotlin.whenever class AdPodInfoProxyApiTest { @Test fun adPosition() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdPodInfo() val instance = Mockito.mock() whenever(instance.adPosition).thenReturn(0) @@ -23,7 +23,7 @@ class AdPodInfoProxyApiTest { @Test fun maxDuration() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdPodInfo() val instance = Mockito.mock() whenever(instance.maxDuration).thenReturn(0.0) @@ -33,7 +33,7 @@ class AdPodInfoProxyApiTest { @Test fun podIndex() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdPodInfo() val instance = Mockito.mock() whenever(instance.podIndex).thenReturn(0) @@ -43,7 +43,7 @@ class AdPodInfoProxyApiTest { @Test fun timeOffset() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdPodInfo() val instance = Mockito.mock() whenever(instance.timeOffset).thenReturn(0.0) @@ -53,7 +53,7 @@ class AdPodInfoProxyApiTest { @Test fun totalAds() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdPodInfo() val instance = Mockito.mock() whenever(instance.totalAds).thenReturn(0) @@ -63,7 +63,7 @@ class AdPodInfoProxyApiTest { @Test fun isBumper() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdPodInfo() + val api = TestProxyApiRegistrar().getPigeonApiAdPodInfo() val instance = Mockito.mock() whenever(instance.isBumper).thenReturn(true) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt index ca7e14bc6eb..5d89ba05da3 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApiTest.kt @@ -15,7 +15,7 @@ import org.mockito.kotlin.whenever class AdsLoadedListenerProxyApiTest { @Test fun pigeon_defaultConstructor() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoadedListener() + val api = TestProxyApiRegistrar().getPigeonApiAdsLoadedListener() assertTrue(api.pigeon_defaultConstructor() is AdsLoadedListenerProxyApi.AdsLoadedListenerImpl) } diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt index a5553a78bef..235d3028ad1 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt @@ -15,7 +15,7 @@ import org.mockito.kotlin.verify class AdsLoaderProxyApiTest { @Test fun addAdErrorListener() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoader() + val api = TestProxyApiRegistrar().getPigeonApiAdsLoader() val instance = mock() val mockListener = mock() @@ -26,7 +26,7 @@ class AdsLoaderProxyApiTest { @Test fun addAdsLoadedListener() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoader() + val api = TestProxyApiRegistrar().getPigeonApiAdsLoader() val instance = mock() val mockListener = mock() @@ -37,7 +37,7 @@ class AdsLoaderProxyApiTest { @Test fun requestAds() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsLoader() + val api = TestProxyApiRegistrar().getPigeonApiAdsLoader() val instance = mock() val mockRequest = mock() diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt index a1e1b704e76..ff3f3f51dce 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApiTest.kt @@ -14,7 +14,7 @@ import org.mockito.kotlin.whenever class AdsManagerLoadedEventProxyApiTest { @Test fun manager() { - val api = ProxyApiRegistrar(Mockito.mock(), Mockito.mock()).getPigeonApiAdsManagerLoadedEvent() + val api = TestProxyApiRegistrar().getPigeonApiAdsManagerLoadedEvent() val instance = Mockito.mock() val mockManager = Mockito.mock() diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt deleted file mode 100644 index 0454c61d338..00000000000 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsPluginTest.kt +++ /dev/null @@ -1,19 +0,0 @@ -// 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 kotlin.test.Test - -/* - * This demonstrates a simple unit test of the Kotlin portion of this plugin's implementation. - * - * Once you have built the plugin's example app, you can run these tests from the command - * line by running `./gradlew testDebugUnitTest` in the `example/android/` directory, or - * you can run them directly from IDEs that support JUnit such as Android Studio. - */ - -internal class InteractiveMediaAdsPluginTest { - @Test fun onMethodCall_getPlatformVersion_returnsExpectedValue() {} -} From c5842ad35ffbe3bfb6bd058d71c69cccb909fd1c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 19:58:12 -0400 Subject: [PATCH 31/76] fix ad size --- .../example/lib/main.dart | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 5b17286304d..98819a0bd1b 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -16,6 +16,9 @@ void integrationTestMain() { main(); } +const String _adTagUrl = + 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator='; + void main() { runApp(const MaterialApp(home: AdExampleWidget())); } @@ -51,9 +54,9 @@ class _AdExampleWidgetState extends State { ), ) ..addListener(() { - if (_contentVideoController.value.position == - _contentVideoController.value.duration) { + if (_contentVideoController.value.isCompleted) { _adsLoader.contentComplete(); + setState(() {}); } }) ..initialize().then((_) { @@ -114,12 +117,7 @@ class _AdExampleWidgetState extends State { }, ); - return _adsLoader.requestAds( - AdsRequest( - adTagUrl: - 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&sz=640x480&cust_params=sample_ct%3Dlinear&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=', - ), - ); + return _adsLoader.requestAds(AdsRequest(adTagUrl: _adTagUrl)); } @override @@ -135,13 +133,16 @@ class _AdExampleWidgetState extends State { body: Center( child: SizedBox( width: 300, - height: 300, child: Stack( children: [ // The display container must be on screen before any Ads can be // loaded and can't be removed between ads. This handles clicks for // ads. - _adDisplayContainer, + if (_contentVideoController.value.isInitialized) + AspectRatio( + aspectRatio: _contentVideoController.value.aspectRatio, + child: _adDisplayContainer, + ), if (_contentVideoController.value.isInitialized && _shouldShowContentVideo) AspectRatio( From 8157448339a8c2b0cec30ce046f3c1ac98125190 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 20:14:19 -0400 Subject: [PATCH 32/76] version bump --- packages/interactive_media_ads/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 477158a8871..352b72083fe 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Adds Android implementation. + ## 0.0.1 * Adds platform interface for Android and iOS. From 37fce6fd42ec3f001792c3081bc0b750fb5a24c8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 20:26:50 -0400 Subject: [PATCH 33/76] fix name --- .../lib/src/android/android_interactive_media_ads.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart index 7801c6283bf..0110c051036 100644 --- a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart @@ -10,7 +10,7 @@ import 'android_ad_display_container.dart'; /// Android implementation of [InteractiveMediaAdsPlatform]. final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { - /// Registers this class as the default instance of [HelloPluginPlatform]. + /// Registers this class as the default instance of [InteractiveMediaAdsPlatform]. static void registerWith() { InteractiveMediaAdsPlatform.instance = AndroidInteractiveMediaAds(); } From f00caf26458ff373015970cbb2e92255a74dc8c8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 14 May 2024 20:57:01 -0400 Subject: [PATCH 34/76] remove pigeon bro --- packages/interactive_media_ads/pubspec.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 9bfc0283eb8..0f4b9f578c9 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -27,11 +27,6 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 - pigeon: - git: - url: git@github.com:bparrishMines/packages.git - ref: pigeon_kotlin_split - path: packages/pigeon topics: - ads From bdac900169c8ee7d825e3ea8654322eb7656532a Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 15 May 2024 12:45:06 -0400 Subject: [PATCH 35/76] start proxy --- .../android/android_ad_display_container.dart | 28 +++++++++++++++++-- .../android/interactive_media_ads_proxy.dart | 28 +++++++++++++++++++ packages/interactive_media_ads/pubspec.yaml | 5 ++++ 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 49b01437930..ff31238f62e 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -9,6 +9,24 @@ import 'package:flutter/widgets.dart'; import '../platform_interface/platform_interface.dart'; import 'android_view_widget.dart'; import 'interactive_media_ads.g.dart' as ima; +import 'interactive_media_ads_proxy.dart'; + +final class AndroidAdDisplayContainerCreationParams + extends PlatformAdDisplayContainerCreationParams { + AndroidAdDisplayContainerCreationParams._( + PlatformAdDisplayContainerCreationParams params, { + this.proxy = const InteractiveMediaAdsProxy(), + }) : super(onContainerAdded: params.onContainerAdded); + + factory AndroidAdDisplayContainerCreationParams.fromPlatformAdDisplayContainerCreationParams( + PlatformAdDisplayContainerCreationParams params, { + InteractiveMediaAdsProxy proxy = const InteractiveMediaAdsProxy(), + }) { + return AndroidAdDisplayContainerCreationParams._(params, proxy: proxy); + } + + final InteractiveMediaAdsProxy proxy; +} /// Android implementation of [PlatformAdDisplayContainer]. final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { @@ -22,7 +40,9 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { } static const int _progressPollingMs = 250; - final ima.FrameLayout _frameLayout = ima.FrameLayout(); + + late final ima.FrameLayout _frameLayout = + _androidParams.proxy.newFrameLayout(); final Set _videoAdPlayerCallbacks = {}; late final ima.VideoView _videoView; @@ -35,6 +55,10 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { Timer? _adProgressTimer; int? _adDuration; + AndroidAdDisplayContainerCreationParams get _androidParams => + AndroidAdDisplayContainerCreationParams + .fromPlatformAdDisplayContainerCreationParams(params); + @override Widget build(BuildContext context) { return AndroidViewWidget( @@ -88,7 +112,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { static ima.VideoView _setUpVideoView( WeakReference weakThis, ) { - return ima.VideoView( + return weakThis.target!._androidParams.proxy.newVideoView( onCompletion: (_, ima.MediaPlayer player) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart new file mode 100644 index 00000000000..9d6cd0eb350 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart @@ -0,0 +1,28 @@ +import 'interactive_media_ads.g.dart'; + +/// Handles constructing objects and calling static methods for the Android +/// Interactive Media Ads native library. +/// +/// This class provides dependency injection for the implementations of the +/// platform interface classes. Improving the ease of unit testing and/or +/// overriding the underlying Android classes. +/// +/// By default each function calls the default constructor of the class it +/// intends to return. +class InteractiveMediaAdsProxy { + /// Constructs a [InteractiveMediaAdsProxy]. + const InteractiveMediaAdsProxy({ + this.newFrameLayout = FrameLayout.new, + this.newVideoView = VideoView.new, + }); + + /// Creates a new [FrameLayout]. + final FrameLayout Function() newFrameLayout; + + /// Creates a new [VideoView]. + final VideoView Function({ + void Function(VideoView, MediaPlayer)? onPrepared, + void Function(VideoView, MediaPlayer)? onCompletion, + required void Function(VideoView, MediaPlayer, int, int) onError, + }) newVideoView; +} diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 0f4b9f578c9..9bfc0283eb8 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -27,6 +27,11 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 + pigeon: + git: + url: git@github.com:bparrishMines/packages.git + ref: pigeon_kotlin_split + path: packages/pigeon topics: - ads From 1dc6a078b43f34b73c8158939bf04e1fc4c3af13 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 16 May 2024 13:30:11 -0400 Subject: [PATCH 36/76] change calls to proxy --- .../AdsLoaderProxyApiTest.kt | 1 - .../android/android_ad_display_container.dart | 101 ++++++++++++---- .../android/interactive_media_ads_proxy.dart | 111 +++++++++++++++++- packages/interactive_media_ads/pubspec.yaml | 2 +- 4 files changed, 184 insertions(+), 31 deletions(-) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt index 235d3028ad1..f70fb27f00b 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApiTest.kt @@ -8,7 +8,6 @@ import com.google.ads.interactivemedia.v3.api.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsRequest import kotlin.test.Test -import org.mockito.Mockito import org.mockito.kotlin.mock import org.mockito.kotlin.verify diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index ff31238f62e..ef10224f816 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -11,21 +11,31 @@ import 'android_view_widget.dart'; import 'interactive_media_ads.g.dart' as ima; import 'interactive_media_ads_proxy.dart'; +/// Android implementation of [PlatformAdDisplayContainerCreationParams]. final class AndroidAdDisplayContainerCreationParams extends PlatformAdDisplayContainerCreationParams { - AndroidAdDisplayContainerCreationParams._( - PlatformAdDisplayContainerCreationParams params, { - this.proxy = const InteractiveMediaAdsProxy(), - }) : super(onContainerAdded: params.onContainerAdded); - + /// Constructs a [AndroidAdDisplayContainerCreationParams]. + const AndroidAdDisplayContainerCreationParams({ + super.key, + required super.onContainerAdded, + InteractiveMediaAdsProxy? proxy, + }) : _proxy = proxy ?? const InteractiveMediaAdsProxy(), + super(); + + /// Creates a [AndroidAdDisplayContainerCreationParams] from an instance of + /// [PlatformAdDisplayContainerCreationParams]. factory AndroidAdDisplayContainerCreationParams.fromPlatformAdDisplayContainerCreationParams( PlatformAdDisplayContainerCreationParams params, { - InteractiveMediaAdsProxy proxy = const InteractiveMediaAdsProxy(), + @visibleForTesting InteractiveMediaAdsProxy? proxy, }) { - return AndroidAdDisplayContainerCreationParams._(params, proxy: proxy); + return AndroidAdDisplayContainerCreationParams( + key: params.key, + onContainerAdded: params.onContainerAdded, + proxy: proxy, + ); } - final InteractiveMediaAdsProxy proxy; + final InteractiveMediaAdsProxy _proxy; } /// Android implementation of [PlatformAdDisplayContainer]. @@ -42,7 +52,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { static const int _progressPollingMs = 250; late final ima.FrameLayout _frameLayout = - _androidParams.proxy.newFrameLayout(); + _androidParams._proxy.newFrameLayout(); final Set _videoAdPlayerCallbacks = {}; late final ima.VideoView _videoView; @@ -64,7 +74,8 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { return AndroidViewWidget( view: _frameLayout, onPlatformViewCreated: () async { - _adDisplayContainer = await ima.ImaSdkFactory.createAdDisplayContainer( + _adDisplayContainer = + await _androidParams._proxy.createAdDisplayContainerImaSdkFactory( _frameLayout, _videoAdPlayer, ); @@ -83,7 +94,8 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _adProgressTimer = Timer.periodic( const Duration(milliseconds: _progressPollingMs), (Timer timer) async { - final ima.VideoProgressUpdate currentProgress = ima.VideoProgressUpdate( + final ima.VideoProgressUpdate currentProgress = + _androidParams._proxy.newVideoProgressUpdate( currentTimeMs: await _videoView.getCurrentPosition(), durationMs: _adDuration!, ); @@ -112,7 +124,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { static ima.VideoView _setUpVideoView( WeakReference weakThis, ) { - return weakThis.target!._androidParams.proxy.newVideoView( + return weakThis.target!._androidParams._proxy.newVideoView( onCompletion: (_, ima.MediaPlayer player) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { @@ -187,6 +199,35 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { } } +/// Android implementation of [PlatformAdsLoaderCreationParams]. +final class AndroidAdsLoaderCreationParams + extends PlatformAdsLoaderCreationParams { + /// Constructs a [AndroidAdsLoaderCreationParams]. + const AndroidAdsLoaderCreationParams({ + required super.container, + required super.onAdsLoaded, + required super.onAdsLoadError, + InteractiveMediaAdsProxy? proxy, + }) : _proxy = proxy ?? const InteractiveMediaAdsProxy(), + super(); + + /// Creates a [AndroidAdsLoaderCreationParams] from an instance of + /// [PlatformAdsLoaderCreationParams]. + factory AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( + PlatformAdsLoaderCreationParams params, { + @visibleForTesting InteractiveMediaAdsProxy? proxy, + }) { + return AndroidAdsLoaderCreationParams( + container: params.container, + onAdsLoaded: params.onAdsLoaded, + onAdsLoadError: params.onAdsLoadError, + proxy: proxy, + ); + } + + final InteractiveMediaAdsProxy _proxy; +} + /// Android implementation of [PlatformAdsLoader]. final class AndroidAdsLoader extends PlatformAdsLoader { /// Constructs an [AndroidAdsLoader]. @@ -196,9 +237,14 @@ final class AndroidAdsLoader extends PlatformAdsLoader { _adsLoaderFuture = _createAdsLoader(); } - final ima.ImaSdkFactory _sdkFactory = ima.ImaSdkFactory.instance; + late final ima.ImaSdkFactory _sdkFactory = + _androidParams._proxy.instanceImaSdkFactory(); late Future _adsLoaderFuture; + AndroidAdsLoaderCreationParams get _androidParams => + AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( + params); + @override Future contentComplete() async { final Set callbacks = @@ -224,11 +270,12 @@ final class AndroidAdsLoader extends PlatformAdsLoader { final ima.ImaSdkSettings settings = await _sdkFactory.createImaSdkSettings(); - final ima.AdsLoader adsLoader = - await ima.ImaSdkFactory.instance.createAdsLoader( - settings, - (params.container as AndroidAdDisplayContainer)._adDisplayContainer, - ); + final ima.AdsLoader adsLoader = await _androidParams._proxy + .instanceImaSdkFactory() + .createAdsLoader( + settings, + (params.container as AndroidAdDisplayContainer)._adDisplayContainer, + ); _addListeners(WeakReference(this), adsLoader); @@ -239,14 +286,16 @@ final class AndroidAdsLoader extends PlatformAdsLoader { WeakReference weakThis, ima.AdsLoader adsLoader, ) { - adsLoader.addAdsLoadedListener(ima.AdsLoadedListener( + final InteractiveMediaAdsProxy proxy = + weakThis.target!._androidParams._proxy; + adsLoader.addAdsLoadedListener(proxy.newAdsLoadedListener( onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { weakThis.target?.params.onAdsLoaded( PlatformOnAdsLoadedData(manager: AndroidAdsManager._(event.manager)), ); }, )); - adsLoader.addAdErrorListener(ima.AdErrorListener( + adsLoader.addAdErrorListener(proxy.newAdErrorListener( onAdError: (_, ima.AdErrorEvent event) { weakThis.target?.params.onAdsLoadError( AdsLoadErrorData( @@ -264,9 +313,14 @@ final class AndroidAdsLoader extends PlatformAdsLoader { /// Android implementation of [PlatformAdsManager]. class AndroidAdsManager extends PlatformAdsManager { - AndroidAdsManager._(ima.AdsManager manager) : _manager = manager; + AndroidAdsManager._( + ima.AdsManager manager, { + InteractiveMediaAdsProxy? proxy, + }) : _manager = manager, + _proxy = proxy ?? const InteractiveMediaAdsProxy(); final ima.AdsManager _manager; + final InteractiveMediaAdsProxy _proxy; PlatformAdsManagerDelegate? _managerDelegate; @@ -294,8 +348,9 @@ class AndroidAdsManager extends PlatformAdsManager { } static void _addListeners(WeakReference weakThis) { + final InteractiveMediaAdsProxy proxy = weakThis.target!._proxy; weakThis.target?._manager.addAdEventListener( - ima.AdEventListener( + proxy.newAdEventListener( onAdEvent: (_, ima.AdEvent event) { late final AdEventType eventType; @@ -341,7 +396,7 @@ class AndroidAdsManager extends PlatformAdsManager { ), ); weakThis.target?._manager.addAdErrorListener( - ima.AdErrorListener( + proxy.newAdErrorListener( onAdError: (_, ima.AdErrorEvent event) { weakThis.target?._managerDelegate?.params.onAdErrorEvent?.call( AdErrorEvent( diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart index 9d6cd0eb350..86aa3fdc73b 100644 --- a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart @@ -1,3 +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. + import 'interactive_media_ads.g.dart'; /// Handles constructing objects and calling static methods for the Android @@ -10,19 +14,114 @@ import 'interactive_media_ads.g.dart'; /// By default each function calls the default constructor of the class it /// intends to return. class InteractiveMediaAdsProxy { - /// Constructs a [InteractiveMediaAdsProxy]. + /// Constructs an [InteractiveMediaAdsProxy]. const InteractiveMediaAdsProxy({ + this.newVideoProgressUpdate = VideoProgressUpdate.new, this.newFrameLayout = FrameLayout.new, this.newVideoView = VideoView.new, + this.newVideoAdPlayer = VideoAdPlayer.new, + this.newAdsLoadedListener = AdsLoadedListener.new, + this.newAdErrorListener = AdErrorListener.new, + this.newAdEventListener = AdEventListener.new, + this.createAdDisplayContainerImaSdkFactory = + ImaSdkFactory.createAdDisplayContainer, + this.instanceImaSdkFactory = _instanceImaSdkFactory, + this.videoTimeNotReadyVideoProgressUpdate = + _videoTimeNotReadyVideoProgressUpdate, }); - /// Creates a new [FrameLayout]. + /// Constructs [VideoProgressUpdate]. + final VideoProgressUpdate Function({ + required int currentTimeMs, + required int durationMs, + }) newVideoProgressUpdate; + + /// Constructs [FrameLayout]. final FrameLayout Function() newFrameLayout; - /// Creates a new [VideoView]. + /// Constructs [VideoView]. final VideoView Function({ - void Function(VideoView, MediaPlayer)? onPrepared, - void Function(VideoView, MediaPlayer)? onCompletion, - required void Function(VideoView, MediaPlayer, int, int) onError, + required void Function( + VideoView, + MediaPlayer, + int, + int, + ) onError, + void Function( + VideoView, + MediaPlayer, + )? onPrepared, + void Function( + VideoView, + MediaPlayer, + )? onCompletion, }) newVideoView; + + /// Constructs [VideoAdPlayer]. + final VideoAdPlayer Function({ + required void Function( + VideoAdPlayer, + VideoAdPlayerCallback, + ) addCallback, + required void Function( + VideoAdPlayer, + AdMediaInfo, + AdPodInfo, + ) loadAd, + required void Function( + VideoAdPlayer, + AdMediaInfo, + ) pauseAd, + required void Function( + VideoAdPlayer, + AdMediaInfo, + ) playAd, + required void Function(VideoAdPlayer) release, + required void Function( + VideoAdPlayer, + VideoAdPlayerCallback, + ) removeCallback, + required void Function( + VideoAdPlayer, + AdMediaInfo, + ) stopAd, + }) newVideoAdPlayer; + + /// Constructs [AdsLoadedListener]. + final AdsLoadedListener Function( + {required void Function( + AdsLoadedListener, + AdsManagerLoadedEvent, + ) onAdsManagerLoaded}) newAdsLoadedListener; + + /// Constructs [AdErrorListener]. + final AdErrorListener Function( + {required void Function( + AdErrorListener, + AdErrorEvent, + ) onAdError}) newAdErrorListener; + + /// Constructs [AdEventListener]. + final AdEventListener Function( + {required void Function( + AdEventListener, + AdEvent, + ) onAdEvent}) newAdEventListener; + + /// Calls to [ImaSdkFactory.createAdDisplayContainer]. + final Future Function( + ViewGroup, + VideoAdPlayer, + ) createAdDisplayContainerImaSdkFactory; + + /// Calls to [ImaSdkFactory.instance]. + final ImaSdkFactory Function() instanceImaSdkFactory; + + /// Calls to [VideoProgressUpdate.videoTimeNotReady]. + final VideoProgressUpdate Function() videoTimeNotReadyVideoProgressUpdate; + + static ImaSdkFactory _instanceImaSdkFactory() => ImaSdkFactory.instance; + + static VideoProgressUpdate _videoTimeNotReadyVideoProgressUpdate() => + VideoProgressUpdate.videoTimeNotReady; } diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 9bfc0283eb8..67d99b84671 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -30,7 +30,7 @@ dev_dependencies: pigeon: git: url: git@github.com:bparrishMines/packages.git - ref: pigeon_kotlin_split + ref: pigeon_helper path: packages/pigeon topics: From 713bdbddea66fd1d8446c7220067f6194c898110 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 16 May 2024 14:00:30 -0400 Subject: [PATCH 37/76] remove pigeon --- .../interactive_media_ads_android.dart | 1434 ++++++++--------- packages/interactive_media_ads/pubspec.yaml | 10 +- 2 files changed, 722 insertions(+), 722 deletions(-) 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 916960c7dfb..29e48e6d033 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -1,717 +1,717 @@ -// 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. - -// ignore_for_file: avoid_unused_constructor_parameters - -import 'package:pigeon/pigeon.dart'; - -@ConfigurePigeon( - PigeonOptions( - copyrightHeader: 'pigeons/copyright.txt', - dartOut: 'lib/src/android/interactive_media_ads.g.dart', - kotlinOut: - 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt', - kotlinOptions: KotlinOptions( - package: 'dev.flutter.packages.interactive_media_ads', - ), - ), -) - -/// The types of error that can be encountered. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. -enum AdErrorCode { - /// Ads player was not provided. - adsPlayerWasNotProvided, - - /// There was a problem requesting ads from the server. - adsRequestNetworkError, - - /// A companion ad failed to load or render. - companionAdLoadingFailed, - - /// There was a problem requesting ads from the server. - failedToRequestAds, - - /// An error internal to the SDK occurred. - internalError, - - /// Invalid arguments were provided to SDK methods. - invalidArguments, - - /// An overlay ad failed to load. - overlayAdLoadingFailed, - - /// An overlay ad failed to render. - overlayAdPlayingFailed, - - /// Ads list was returned but ContentProgressProvider was not configured. - playlistNoContentTracking, - - /// Ads loader sent ads loaded event when it was not expected. - unexpectedAdsLoadedEvent, - - /// The ad response was not understood and cannot be parsed. - unknownAdResponse, - - /// An unexpected error occurred and the cause is not known. - unknownError, - - /// No assets were found in the VAST ad response. - vastAssetNotFound, - - /// A VAST response containing a single `` tag with no child tags. - vastEmptyResponse, - - /// Assets were found in the VAST ad response for a linear ad, but none of - /// them matched the video player's capabilities. - vastLinearAssetMismatch, - - /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper - /// or inline ad load has timed out. - vastLoadTimeout, - - /// The ad response was not recognized as a valid VAST ad. - vastMalformedResponse, - - /// Failed to load media assets from a VAST response. - vastMediaLoadTimeout, - - /// Assets were found in the VAST ad response for a nonlinear ad, but none of - /// them matched the video player's capabilities. - vastNonlinearAssetMismatch, - - /// No Ads VAST response after one or more wrappers. - vastNoAdsAfterWrapper, - - /// The maximum number of VAST wrapper redirects has been reached. - vastTooManyRedirects, - - /// Trafficking error. - /// - /// Video player received an ad type that it was not expecting and/or cannot - /// display. - vastTraffickingError, - - /// There was an error playing the video ad. - videoPlayError, -} - -/// Specifies when the error was encountered, during either ad loading or playback. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. -enum AdErrorType { - /// Indicates that the error was encountered when the ad was being loaded. - load, - - /// Indicates that the error was encountered after the ad loaded, during ad play. - play, - - /// The error is not recognized by this wrapper. - unknown, -} - -/// Types of events that can occur during ad playback. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. -enum AdEventType { - /// Fired when an ad break in a stream ends. - adBreakEnded, - - /// Fired when an ad break will not play back any ads. - adBreakFetchError, - - /// Fired when an ad break is ready from VMAP or ad rule ads. - adBreakReady, - - /// Fired when an ad break in a stream starts. - adBreakStarted, - - /// Fired when playback stalls while the ad buffers. - adBuffering, - - /// Fired when an ad period in a stream ends. - adPeriodEnded, - - /// Fired when an ad period in a stream starts. - adPeriodStarted, - - /// Fired to inform of ad progress and can be used by publisher to display a - /// countdown timer. - adProgress, - - /// Fired when the ads manager is done playing all the valid ads in the ads - /// response, or when the response doesn't return any valid ads. - allAdsCompleted, - - /// Fired when an ad is clicked. - clicked, - - /// Fired when an ad completes playing. - completed, - - /// Fired when content should be paused. - contentPauseRequested, - - /// Fired when content should be resumed. - contentResumeRequested, - - /// Fired when VOD stream cuepoints have changed. - cuepointsChanged, - - /// Fired when the ad playhead crosses first quartile. - firstQuartile, - - /// The user has closed the icon fallback image dialog. - iconFallbackImageClosed, - - /// The user has tapped an ad icon. - iconTapped, - - /// Fired when the VAST response has been received. - loaded, - - /// Fired to enable the SDK to communicate a message to be logged, which is - /// stored in adData. - log, - - /// Fired when the ad playhead crosses midpoint. - midpoint, - - /// Fired when an ad is paused. - paused, - - /// Fired when an ad is resumed. - resumed, - - /// Fired when an ad changes its skippable state. - skippableStateChanged, - - /// Fired when an ad was skipped. - skipped, - - /// Fired when an ad starts playing. - started, - - /// Fired when a non-clickthrough portion of a video ad is clicked. - tapped, - - /// Fired when the ad playhead crosses third quartile. - thirdQuartile, - - /// The event type is not recognized by this wrapper. - unknown, -} - -/// A base class for more specialized container interfaces. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', - ), -) -abstract class BaseDisplayContainer {} - -/// A container in which to display the ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', - ), -) -abstract class AdDisplayContainer implements BaseDisplayContainer {} - -/// An object which allows publishers to request ads from ad servers or a -/// dynamic ad insertion stream. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', - ), -) -abstract class AdsLoader { - /// Registers a listener for errors that occur during the ads request. - void addAdErrorListener(AdErrorListener listener); - - /// Registers a listener for the ads manager loaded event. - void addAdsLoadedListener(AdsLoadedListener listener); - - /// Requests ads from a server. - void requestAds(AdsRequest request); -} - -/// An event raised when ads are successfully loaded from the ad server through an AdsLoader. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', - ), -) -abstract class AdsManagerLoadedEvent { - /// The ads manager that will control playback of the loaded ads, or null when - /// using dynamic ad insertion. - late final AdsManager manager; -} - -/// An event raised when there is an error loading or playing ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', - ), -) -abstract class AdErrorEvent { - /// The AdError that caused this event. - late final AdError error; -} - -/// An error that occurred in the SDK. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', - ), -) -abstract class AdError { - /// The error's code. - late final AdErrorCode errorCode; - - /// The error code's number. - late final int errorCodeNumber; - - /// The error's type. - late final AdErrorType errorType; - - /// A human-readable summary of the error. - late final String message; -} - -/// 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. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', - ), -) -abstract class AdsRequest { - /// Sets the URL from which ads will be requested. - void setAdTagUrl(String adTagUrl); - - /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks - /// based on content progress (cue points). - void setContentProgressProvider(ContentProgressProvider provider); -} - -/// Defines an interface to allow SDK to track progress of the content video. -/// -/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', - ), -) -abstract class ContentProgressProvider {} - -/// An object which handles playing ads after they've been received from the -/// server. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', - ), -) -abstract class AdsManager extends BaseManager { - /// Discards current ad break and resumes content. - void discardAdBreak(); - - /// Pauses the current ad. - void pause(); - - /// Starts playing the ads. - void start(); -} - -/// Base interface for managing ads.. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', - ), -) -abstract class BaseManager { - /// Registers a listener for errors that occur during the ad or stream - /// initialization and playback. - void addAdErrorListener(AdErrorListener errorListener); - - /// Registers a listener for ad events that occur during ad or stream - /// initialization and playback. - void addAdEventListener(AdEventListener adEventListener); - - /// Stops the ad and all tracking, then releases all assets that were loaded - /// to play the ad. - void destroy(); - - /// Initializes the ad experience using default rendering settings - void init(); -} - -/// Event to notify publisher that an event occurred with an Ad. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', - ), -) -abstract class AdEvent { - /// The type of event that occurred. - late final AdEventType type; -} - -/// Factory class for creating SDK objects. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', - ), -) -abstract class ImaSdkFactory { - @static - @attached - late final ImaSdkFactory instance; - - @static - AdDisplayContainer createAdDisplayContainer( - ViewGroup container, - VideoAdPlayer player, - ); - - /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. - ImaSdkSettings createImaSdkSettings(); - - /// Creates an `AdsLoader` for requesting ads using the specified settings - /// object. - AdsLoader createAdsLoader( - ImaSdkSettings settings, - AdDisplayContainer container, - ); - - /// Creates an AdsRequest object to contain the data used to request ads. - AdsRequest createAdsRequest(); -} - -/// Defines general SDK settings that are used when creating an `AdsLoader`. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', - ), -) -abstract class ImaSdkSettings {} - -/// Defines an update to the video's progress. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', - ), -) -abstract class VideoProgressUpdate { - VideoProgressUpdate(int currentTimeMs, int durationMs); - - /// Value to use for cases when progress is not yet defined, such as video - /// initialization. - @static - @attached - late final VideoProgressUpdate videoTimeNotReady; -} - -/// The minimal information required to play an ad. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', - ), -) -abstract class AdMediaInfo { - late final String url; -} - -/// An ad may be part of a pod of ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', - ), -) -abstract class AdPodInfo { - /// The position of the ad within the pod. - /// - /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the - /// ad is not part of a pod, this will return 1. - late final int adPosition; - - /// The maximum duration of the pod in seconds. - /// - /// For unknown duration, -1 is returned. - late final double maxDuration; - - /// Client side and DAI VOD: Returns the index of the ad pod. - late final int podIndex; - - /// The content time offset at which the current ad pod was scheduled. - /// - /// For preroll pod, 0 is returned. For midrolls, the scheduled time is - /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this - /// ad is not part of a pod, or the pod is not part of an ad playlist. - late final double timeOffset; - - /// The total number of ads contained within this pod, including bumpers. - late final int totalAds; - - /// Returns true if the ad is a bumper ad. - late final bool isBumper; -} - -/// FrameLayout is designed to block out an area on the screen to display a -/// single item. -/// -/// See https://developer.android.com/reference/android/widget/FrameLayout. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.widget.FrameLayout', - ), -) -abstract class FrameLayout extends ViewGroup { - FrameLayout(); -} - -/// A special view that can contain other views (called children.) -/// -/// See https://developer.android.com/reference/android/view/ViewGroup. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.view.ViewGroup', - ), -) -abstract class ViewGroup extends View { - void addView(View view); -} - -/// Displays a video file. -/// -/// See https://developer.android.com/reference/android/widget/VideoView. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.widget.VideoView', - ), -) -abstract class VideoView extends View { - VideoView(); - - /// Callback to be invoked when the media source is ready for playback. - late final void Function(MediaPlayer player)? onPrepared; - - /// Callback to be invoked when playback of a media source has completed. - late final void Function(MediaPlayer player)? onCompletion; - - /// Callback to be invoked when there has been an error during an asynchronous - /// operation. - late final void Function(MediaPlayer player, int what, int extra) onError; - - /// Sets the URI of the video. - void setVideoUri(String uri); - - /// The current position of the playing video. - /// - /// In milliseconds. - int getCurrentPosition(); -} - -/// This class represents the basic building block for user interface components. -/// -/// See https://developer.android.com/reference/android/view/View. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), -) -abstract class View {} - -/// MediaPlayer class can be used to control playback of audio/video files and -/// streams. -/// -/// See https://developer.android.com/reference/android/media/MediaPlayer. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.media.MediaPlayer', - ), -) -abstract class MediaPlayer { - /// Gets the duration of the file. - int getDuration(); - - /// Seeks to specified time position. - void seekTo(int mSec); - - /// Starts or resumes playback. - void start(); - - /// Pauses playback. - void pause(); - - /// Stops playback after playback has been started or paused. - void stop(); -} - -/// Callbacks that the player must fire. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', - ), -) -abstract class VideoAdPlayerCallback { - /// Fire this callback periodically as ad playback occurs. - void onAdProgress( - AdMediaInfo adMediaInfo, - VideoProgressUpdate videoProgressUpdate, - ); - - /// Fire this callback when video playback stalls waiting for data. - void onBuffering(AdMediaInfo adMediaInfo); - - /// Fire this callback when all content has finished playing. - void onContentComplete(); - - /// Fire this callback when the video finishes playing. - void onEnded(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video has encountered an error. - void onError(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is ready to begin playback. - void onLoaded(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is paused. - void onPause(AdMediaInfo adMediaInfo); - - /// Fire this callback when the player begins playing a video. - void onPlay(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is unpaused. - void onResume(AdMediaInfo adMediaInfo); - - /// Fire this callback when the playback volume changes. - void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); -} - -/// Defines the set of methods that a video player must implement to be used by -/// the IMA SDK, as well as a set of callbacks that it must fire. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', - ), -) -abstract class VideoAdPlayer { - VideoAdPlayer(); - - /// Adds a callback. - late final void Function(VideoAdPlayerCallback callback) addCallback; - - /// Loads a video ad hosted at AdMediaInfo. - late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; - - /// Pauses playing the current ad. - late final void Function(AdMediaInfo adMediaInfo) pauseAd; - - /// Starts or resumes playing the video ad referenced by the AdMediaInfo, - /// provided loadAd has already been called for it. - late final void Function(AdMediaInfo adMediaInfo) playAd; - - /// Cleans up and releases all resources used by the `VideoAdPlayer`. - late final void Function() release; - - /// Removes a callback. - late final void Function(VideoAdPlayerCallback callback) removeCallback; - - /// Stops playing the current ad. - late final void Function(AdMediaInfo adMediaInfo) stopAd; - - /// The volume of the player as a percentage from 0 to 100. - void setVolume(int value); - - /// The `VideoProgressUpdate` describing playback progress of the current - /// video. - void setAdProgress(VideoProgressUpdate progress); -} - -/// Listener interface for notification of ad load or stream load completion. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', - ), -) -abstract class AdsLoadedListener { - AdsLoadedListener(); - - /// Called once the AdsManager or StreamManager has been loaded. - late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; -} - -/// Interface for classes that will listen to AdErrorEvents. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', - ), -) -abstract class AdErrorListener { - AdErrorListener(); - - /// Called when an error occurs. - late final void Function(AdErrorEvent event) onAdError; -} - -/// Listener interface for ad events. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', - ), -) -abstract class AdEventListener { - AdEventListener(); - - /// Respond to an occurrence of an AdEvent. - late final void Function(AdEvent event) onAdEvent; -} +// // 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. +// +// // ignore_for_file: avoid_unused_constructor_parameters +// +// import 'package:pigeon/pigeon.dart'; +// +// @ConfigurePigeon( +// PigeonOptions( +// copyrightHeader: 'pigeons/copyright.txt', +// dartOut: 'lib/src/android/interactive_media_ads.g.dart', +// kotlinOut: +// 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt', +// kotlinOptions: KotlinOptions( +// package: 'dev.flutter.packages.interactive_media_ads', +// ), +// ), +// ) +// +// /// The types of error that can be encountered. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. +// enum AdErrorCode { +// /// Ads player was not provided. +// adsPlayerWasNotProvided, +// +// /// There was a problem requesting ads from the server. +// adsRequestNetworkError, +// +// /// A companion ad failed to load or render. +// companionAdLoadingFailed, +// +// /// There was a problem requesting ads from the server. +// failedToRequestAds, +// +// /// An error internal to the SDK occurred. +// internalError, +// +// /// Invalid arguments were provided to SDK methods. +// invalidArguments, +// +// /// An overlay ad failed to load. +// overlayAdLoadingFailed, +// +// /// An overlay ad failed to render. +// overlayAdPlayingFailed, +// +// /// Ads list was returned but ContentProgressProvider was not configured. +// playlistNoContentTracking, +// +// /// Ads loader sent ads loaded event when it was not expected. +// unexpectedAdsLoadedEvent, +// +// /// The ad response was not understood and cannot be parsed. +// unknownAdResponse, +// +// /// An unexpected error occurred and the cause is not known. +// unknownError, +// +// /// No assets were found in the VAST ad response. +// vastAssetNotFound, +// +// /// A VAST response containing a single `` tag with no child tags. +// vastEmptyResponse, +// +// /// Assets were found in the VAST ad response for a linear ad, but none of +// /// them matched the video player's capabilities. +// vastLinearAssetMismatch, +// +// /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper +// /// or inline ad load has timed out. +// vastLoadTimeout, +// +// /// The ad response was not recognized as a valid VAST ad. +// vastMalformedResponse, +// +// /// Failed to load media assets from a VAST response. +// vastMediaLoadTimeout, +// +// /// Assets were found in the VAST ad response for a nonlinear ad, but none of +// /// them matched the video player's capabilities. +// vastNonlinearAssetMismatch, +// +// /// No Ads VAST response after one or more wrappers. +// vastNoAdsAfterWrapper, +// +// /// The maximum number of VAST wrapper redirects has been reached. +// vastTooManyRedirects, +// +// /// Trafficking error. +// /// +// /// Video player received an ad type that it was not expecting and/or cannot +// /// display. +// vastTraffickingError, +// +// /// There was an error playing the video ad. +// videoPlayError, +// } +// +// /// Specifies when the error was encountered, during either ad loading or playback. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. +// enum AdErrorType { +// /// Indicates that the error was encountered when the ad was being loaded. +// load, +// +// /// Indicates that the error was encountered after the ad loaded, during ad play. +// play, +// +// /// The error is not recognized by this wrapper. +// unknown, +// } +// +// /// Types of events that can occur during ad playback. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. +// enum AdEventType { +// /// Fired when an ad break in a stream ends. +// adBreakEnded, +// +// /// Fired when an ad break will not play back any ads. +// adBreakFetchError, +// +// /// Fired when an ad break is ready from VMAP or ad rule ads. +// adBreakReady, +// +// /// Fired when an ad break in a stream starts. +// adBreakStarted, +// +// /// Fired when playback stalls while the ad buffers. +// adBuffering, +// +// /// Fired when an ad period in a stream ends. +// adPeriodEnded, +// +// /// Fired when an ad period in a stream starts. +// adPeriodStarted, +// +// /// Fired to inform of ad progress and can be used by publisher to display a +// /// countdown timer. +// adProgress, +// +// /// Fired when the ads manager is done playing all the valid ads in the ads +// /// response, or when the response doesn't return any valid ads. +// allAdsCompleted, +// +// /// Fired when an ad is clicked. +// clicked, +// +// /// Fired when an ad completes playing. +// completed, +// +// /// Fired when content should be paused. +// contentPauseRequested, +// +// /// Fired when content should be resumed. +// contentResumeRequested, +// +// /// Fired when VOD stream cuepoints have changed. +// cuepointsChanged, +// +// /// Fired when the ad playhead crosses first quartile. +// firstQuartile, +// +// /// The user has closed the icon fallback image dialog. +// iconFallbackImageClosed, +// +// /// The user has tapped an ad icon. +// iconTapped, +// +// /// Fired when the VAST response has been received. +// loaded, +// +// /// Fired to enable the SDK to communicate a message to be logged, which is +// /// stored in adData. +// log, +// +// /// Fired when the ad playhead crosses midpoint. +// midpoint, +// +// /// Fired when an ad is paused. +// paused, +// +// /// Fired when an ad is resumed. +// resumed, +// +// /// Fired when an ad changes its skippable state. +// skippableStateChanged, +// +// /// Fired when an ad was skipped. +// skipped, +// +// /// Fired when an ad starts playing. +// started, +// +// /// Fired when a non-clickthrough portion of a video ad is clicked. +// tapped, +// +// /// Fired when the ad playhead crosses third quartile. +// thirdQuartile, +// +// /// The event type is not recognized by this wrapper. +// unknown, +// } +// +// /// A base class for more specialized container interfaces. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', +// ), +// ) +// abstract class BaseDisplayContainer {} +// +// /// A container in which to display the ads. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', +// ), +// ) +// abstract class AdDisplayContainer implements BaseDisplayContainer {} +// +// /// An object which allows publishers to request ads from ad servers or a +// /// dynamic ad insertion stream. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', +// ), +// ) +// abstract class AdsLoader { +// /// Registers a listener for errors that occur during the ads request. +// void addAdErrorListener(AdErrorListener listener); +// +// /// Registers a listener for the ads manager loaded event. +// void addAdsLoadedListener(AdsLoadedListener listener); +// +// /// Requests ads from a server. +// void requestAds(AdsRequest request); +// } +// +// /// An event raised when ads are successfully loaded from the ad server through an AdsLoader. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', +// ), +// ) +// abstract class AdsManagerLoadedEvent { +// /// The ads manager that will control playback of the loaded ads, or null when +// /// using dynamic ad insertion. +// late final AdsManager manager; +// } +// +// /// An event raised when there is an error loading or playing ads. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', +// ), +// ) +// abstract class AdErrorEvent { +// /// The AdError that caused this event. +// late final AdError error; +// } +// +// /// An error that occurred in the SDK. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', +// ), +// ) +// abstract class AdError { +// /// The error's code. +// late final AdErrorCode errorCode; +// +// /// The error code's number. +// late final int errorCodeNumber; +// +// /// The error's type. +// late final AdErrorType errorType; +// +// /// A human-readable summary of the error. +// late final String message; +// } +// +// /// 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. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', +// ), +// ) +// abstract class AdsRequest { +// /// Sets the URL from which ads will be requested. +// void setAdTagUrl(String adTagUrl); +// +// /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks +// /// based on content progress (cue points). +// void setContentProgressProvider(ContentProgressProvider provider); +// } +// +// /// Defines an interface to allow SDK to track progress of the content video. +// /// +// /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', +// ), +// ) +// abstract class ContentProgressProvider {} +// +// /// An object which handles playing ads after they've been received from the +// /// server. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', +// ), +// ) +// abstract class AdsManager extends BaseManager { +// /// Discards current ad break and resumes content. +// void discardAdBreak(); +// +// /// Pauses the current ad. +// void pause(); +// +// /// Starts playing the ads. +// void start(); +// } +// +// /// Base interface for managing ads.. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', +// ), +// ) +// abstract class BaseManager { +// /// Registers a listener for errors that occur during the ad or stream +// /// initialization and playback. +// void addAdErrorListener(AdErrorListener errorListener); +// +// /// Registers a listener for ad events that occur during ad or stream +// /// initialization and playback. +// void addAdEventListener(AdEventListener adEventListener); +// +// /// Stops the ad and all tracking, then releases all assets that were loaded +// /// to play the ad. +// void destroy(); +// +// /// Initializes the ad experience using default rendering settings +// void init(); +// } +// +// /// Event to notify publisher that an event occurred with an Ad. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', +// ), +// ) +// abstract class AdEvent { +// /// The type of event that occurred. +// late final AdEventType type; +// } +// +// /// Factory class for creating SDK objects. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', +// ), +// ) +// abstract class ImaSdkFactory { +// @static +// @attached +// late final ImaSdkFactory instance; +// +// @static +// AdDisplayContainer createAdDisplayContainer( +// ViewGroup container, +// VideoAdPlayer player, +// ); +// +// /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. +// ImaSdkSettings createImaSdkSettings(); +// +// /// Creates an `AdsLoader` for requesting ads using the specified settings +// /// object. +// AdsLoader createAdsLoader( +// ImaSdkSettings settings, +// AdDisplayContainer container, +// ); +// +// /// Creates an AdsRequest object to contain the data used to request ads. +// AdsRequest createAdsRequest(); +// } +// +// /// Defines general SDK settings that are used when creating an `AdsLoader`. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', +// ), +// ) +// abstract class ImaSdkSettings {} +// +// /// Defines an update to the video's progress. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', +// ), +// ) +// abstract class VideoProgressUpdate { +// VideoProgressUpdate(int currentTimeMs, int durationMs); +// +// /// Value to use for cases when progress is not yet defined, such as video +// /// initialization. +// @static +// @attached +// late final VideoProgressUpdate videoTimeNotReady; +// } +// +// /// The minimal information required to play an ad. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', +// ), +// ) +// abstract class AdMediaInfo { +// late final String url; +// } +// +// /// An ad may be part of a pod of ads. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', +// ), +// ) +// abstract class AdPodInfo { +// /// The position of the ad within the pod. +// /// +// /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the +// /// ad is not part of a pod, this will return 1. +// late final int adPosition; +// +// /// The maximum duration of the pod in seconds. +// /// +// /// For unknown duration, -1 is returned. +// late final double maxDuration; +// +// /// Client side and DAI VOD: Returns the index of the ad pod. +// late final int podIndex; +// +// /// The content time offset at which the current ad pod was scheduled. +// /// +// /// For preroll pod, 0 is returned. For midrolls, the scheduled time is +// /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this +// /// ad is not part of a pod, or the pod is not part of an ad playlist. +// late final double timeOffset; +// +// /// The total number of ads contained within this pod, including bumpers. +// late final int totalAds; +// +// /// Returns true if the ad is a bumper ad. +// late final bool isBumper; +// } +// +// /// FrameLayout is designed to block out an area on the screen to display a +// /// single item. +// /// +// /// See https://developer.android.com/reference/android/widget/FrameLayout. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.widget.FrameLayout', +// ), +// ) +// abstract class FrameLayout extends ViewGroup { +// FrameLayout(); +// } +// +// /// A special view that can contain other views (called children.) +// /// +// /// See https://developer.android.com/reference/android/view/ViewGroup. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.view.ViewGroup', +// ), +// ) +// abstract class ViewGroup extends View { +// void addView(View view); +// } +// +// /// Displays a video file. +// /// +// /// See https://developer.android.com/reference/android/widget/VideoView. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.widget.VideoView', +// ), +// ) +// abstract class VideoView extends View { +// VideoView(); +// +// /// Callback to be invoked when the media source is ready for playback. +// late final void Function(MediaPlayer player)? onPrepared; +// +// /// Callback to be invoked when playback of a media source has completed. +// late final void Function(MediaPlayer player)? onCompletion; +// +// /// Callback to be invoked when there has been an error during an asynchronous +// /// operation. +// late final void Function(MediaPlayer player, int what, int extra) onError; +// +// /// Sets the URI of the video. +// void setVideoUri(String uri); +// +// /// The current position of the playing video. +// /// +// /// In milliseconds. +// int getCurrentPosition(); +// } +// +// /// This class represents the basic building block for user interface components. +// /// +// /// See https://developer.android.com/reference/android/view/View. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), +// ) +// abstract class View {} +// +// /// MediaPlayer class can be used to control playback of audio/video files and +// /// streams. +// /// +// /// See https://developer.android.com/reference/android/media/MediaPlayer. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.media.MediaPlayer', +// ), +// ) +// abstract class MediaPlayer { +// /// Gets the duration of the file. +// int getDuration(); +// +// /// Seeks to specified time position. +// void seekTo(int mSec); +// +// /// Starts or resumes playback. +// void start(); +// +// /// Pauses playback. +// void pause(); +// +// /// Stops playback after playback has been started or paused. +// void stop(); +// } +// +// /// Callbacks that the player must fire. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', +// ), +// ) +// abstract class VideoAdPlayerCallback { +// /// Fire this callback periodically as ad playback occurs. +// void onAdProgress( +// AdMediaInfo adMediaInfo, +// VideoProgressUpdate videoProgressUpdate, +// ); +// +// /// Fire this callback when video playback stalls waiting for data. +// void onBuffering(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when all content has finished playing. +// void onContentComplete(); +// +// /// Fire this callback when the video finishes playing. +// void onEnded(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video has encountered an error. +// void onError(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video is ready to begin playback. +// void onLoaded(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video is paused. +// void onPause(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the player begins playing a video. +// void onPlay(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video is unpaused. +// void onResume(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the playback volume changes. +// void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); +// } +// +// /// Defines the set of methods that a video player must implement to be used by +// /// the IMA SDK, as well as a set of callbacks that it must fire. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', +// ), +// ) +// abstract class VideoAdPlayer { +// VideoAdPlayer(); +// +// /// Adds a callback. +// late final void Function(VideoAdPlayerCallback callback) addCallback; +// +// /// Loads a video ad hosted at AdMediaInfo. +// late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; +// +// /// Pauses playing the current ad. +// late final void Function(AdMediaInfo adMediaInfo) pauseAd; +// +// /// Starts or resumes playing the video ad referenced by the AdMediaInfo, +// /// provided loadAd has already been called for it. +// late final void Function(AdMediaInfo adMediaInfo) playAd; +// +// /// Cleans up and releases all resources used by the `VideoAdPlayer`. +// late final void Function() release; +// +// /// Removes a callback. +// late final void Function(VideoAdPlayerCallback callback) removeCallback; +// +// /// Stops playing the current ad. +// late final void Function(AdMediaInfo adMediaInfo) stopAd; +// +// /// The volume of the player as a percentage from 0 to 100. +// void setVolume(int value); +// +// /// The `VideoProgressUpdate` describing playback progress of the current +// /// video. +// void setAdProgress(VideoProgressUpdate progress); +// } +// +// /// Listener interface for notification of ad load or stream load completion. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', +// ), +// ) +// abstract class AdsLoadedListener { +// AdsLoadedListener(); +// +// /// Called once the AdsManager or StreamManager has been loaded. +// late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; +// } +// +// /// Interface for classes that will listen to AdErrorEvents. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', +// ), +// ) +// abstract class AdErrorListener { +// AdErrorListener(); +// +// /// Called when an error occurs. +// late final void Function(AdErrorEvent event) onAdError; +// } +// +// /// Listener interface for ad events. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', +// ), +// ) +// abstract class AdEventListener { +// AdEventListener(); +// +// /// Respond to an occurrence of an AdEvent. +// late final void Function(AdEvent event) onAdEvent; +// } diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 67d99b84671..b4d67719397 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -27,11 +27,11 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 - pigeon: - git: - url: git@github.com:bparrishMines/packages.git - ref: pigeon_helper - path: packages/pigeon +# pigeon: +# git: +# url: git@github.com:bparrishMines/packages.git +# ref: pigeon_helper +# path: packages/pigeon topics: - ads From 828ea3af25062127ae8806ec10ffaced3ce53edd Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 16 May 2024 14:34:20 -0400 Subject: [PATCH 38/76] documentation --- .../example/lib/main.dart | 31 ++++++++--------- .../android/android_ad_display_container.dart | 34 +++++++++++++++---- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index 98819a0bd1b..d29765576b7 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -16,6 +16,8 @@ void integrationTestMain() { main(); } +// IMA sample tag for a single skippable inline video ad. See more IMA sample +// tags at https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/tags const String _adTagUrl = 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator='; @@ -133,24 +135,21 @@ class _AdExampleWidgetState extends State { body: Center( child: SizedBox( width: 300, - child: Stack( - children: [ - // The display container must be on screen before any Ads can be - // loaded and can't be removed between ads. This handles clicks for - // ads. - if (_contentVideoController.value.isInitialized) - AspectRatio( + child: _contentVideoController.value.isInitialized + ? Container() + : AspectRatio( aspectRatio: _contentVideoController.value.aspectRatio, - child: _adDisplayContainer, - ), - if (_contentVideoController.value.isInitialized && - _shouldShowContentVideo) - AspectRatio( - aspectRatio: _contentVideoController.value.aspectRatio, - child: VideoPlayer(_contentVideoController), + child: Stack( + children: [ + // The display container must be on screen before any Ads can be + // loaded and can't be removed between ads. This handles clicks for + // ads. + _adDisplayContainer, + if (_shouldShowContentVideo) + VideoPlayer(_contentVideoController) + ], + ), ), - ], - ), ), ), floatingActionButton: diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index ef10224f816..182276128c3 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -49,19 +49,35 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _videoAdPlayer = _setUpVideoAdPlayer(weakThis); } + // The duration between each update to the IMA SDK of the progress of the + // currently playing ad. static const int _progressPollingMs = 250; + // ViewGroup used to create the `ima.AdDisplayContainer`. late final ima.FrameLayout _frameLayout = _androidParams._proxy.newFrameLayout(); + + // Handles ad playback. + late final ima.VideoView _videoView; + ima.MediaPlayer? _mediaPlayer; + + // Callbacks that must be called to update to the state of ad playback. final Set _videoAdPlayerCallbacks = {}; - late final ima.VideoView _videoView; - late final ima.AdDisplayContainer _adDisplayContainer; + + // Handles ad playback callbacks from the IMA SDK. late final ima.VideoAdPlayer _videoAdPlayer; + + late final ima.AdDisplayContainer _adDisplayContainer; + + // Currently loaded ad. ima.AdMediaInfo? _loadedAdMediaInfo; + // The saved ad position, used to resumed ad playback following an ad click-through. int _savedAdPosition = 0; - ima.MediaPlayer? _mediaPlayer; + + // Timer used to periodically update the IMA SDK the progress of the currently + // playing ad. Timer? _adProgressTimer; int? _adDuration; @@ -90,6 +106,8 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _adDuration = null; } + // Starts periodically updating the IMA SDK the current progress of the + // currently playing ad. void _startAdTracking() { _adProgressTimer = Timer.periodic( const Duration(milliseconds: _progressPollingMs), @@ -116,6 +134,8 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ); } + // Stops periodically updating the IMA SDK the current progress of the + // currently playing ad. void _stopAdTracking() { _adProgressTimer?.cancel(); _adProgressTimer = null; @@ -291,7 +311,7 @@ final class AndroidAdsLoader extends PlatformAdsLoader { adsLoader.addAdsLoadedListener(proxy.newAdsLoadedListener( onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { weakThis.target?.params.onAdsLoaded( - PlatformOnAdsLoadedData(manager: AndroidAdsManager._(event.manager)), + PlatformOnAdsLoadedData(manager: AndroidAdsManager(event.manager)), ); }, )); @@ -313,7 +333,8 @@ final class AndroidAdsLoader extends PlatformAdsLoader { /// Android implementation of [PlatformAdsManager]. class AndroidAdsManager extends PlatformAdsManager { - AndroidAdsManager._( + /// Constructs an [AndroidAdsManager]. + AndroidAdsManager( ima.AdsManager manager, { InteractiveMediaAdsProxy? proxy, }) : _manager = manager, @@ -365,6 +386,8 @@ class AndroidAdsManager extends PlatformAdsManager { eventType = AdEventType.contentResumeRequested; case ima.AdEventType.loaded: eventType = AdEventType.loaded; + case ima.AdEventType.clicked: + eventType = AdEventType.clicked; case ima.AdEventType.unknown: case ima.AdEventType.adBreakReady: case ima.AdEventType.adBreakEnded: @@ -374,7 +397,6 @@ class AndroidAdsManager extends PlatformAdsManager { case ima.AdEventType.adPeriodEnded: case ima.AdEventType.adPeriodStarted: case ima.AdEventType.adProgress: - case ima.AdEventType.clicked: case ima.AdEventType.cuepointsChanged: case ima.AdEventType.firstQuartile: case ima.AdEventType.iconFallbackImageClosed: From b4e8cda76d579c415db8f961eb036b205648023d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 16 May 2024 18:21:55 -0400 Subject: [PATCH 39/76] fix key and some cleanup --- .../android/android_ad_display_container.dart | 21 +- .../lib/src/android/android_view_widget.dart | 11 +- .../android/ad_display_container_test.dart | 35 +++ .../ad_display_container_test.mocks.dart | 243 ++++++++++++++++++ 4 files changed, 297 insertions(+), 13 deletions(-) create mode 100644 packages/interactive_media_ads/test/android/ad_display_container_test.dart create mode 100644 packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 182276128c3..aab420f5f52 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -73,7 +73,8 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { // Currently loaded ad. ima.AdMediaInfo? _loadedAdMediaInfo; - // The saved ad position, used to resumed ad playback following an ad click-through. + // The saved ad position, used to resumed ad playback following an ad + // click-through. int _savedAdPosition = 0; // Timer used to periodically update the IMA SDK the progress of the currently @@ -81,13 +82,16 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { Timer? _adProgressTimer; int? _adDuration; - AndroidAdDisplayContainerCreationParams get _androidParams => - AndroidAdDisplayContainerCreationParams - .fromPlatformAdDisplayContainerCreationParams(params); + late final AndroidAdDisplayContainerCreationParams _androidParams = + params is AndroidAdDisplayContainerCreationParams + ? params as AndroidAdDisplayContainerCreationParams + : AndroidAdDisplayContainerCreationParams + .fromPlatformAdDisplayContainerCreationParams(params); @override Widget build(BuildContext context) { return AndroidViewWidget( + key: params.key, view: _frameLayout, onPlatformViewCreated: () async { _adDisplayContainer = @@ -261,9 +265,12 @@ final class AndroidAdsLoader extends PlatformAdsLoader { _androidParams._proxy.instanceImaSdkFactory(); late Future _adsLoaderFuture; - AndroidAdsLoaderCreationParams get _androidParams => - AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( - params); + late final AndroidAdsLoaderCreationParams _androidParams = + params is AndroidAdsLoaderCreationParams + ? params as AndroidAdsLoaderCreationParams + : AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( + params, + ); @override Future contentComplete() async { diff --git a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart index 025e2f8d69a..31c0d41e49a 100644 --- a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart +++ b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart @@ -8,7 +8,7 @@ import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; -import 'interactive_media_ads.g.dart' as interactive_media_ads; +import 'interactive_media_ads.g.dart' as ima; import 'platform_views_service_proxy.dart'; /// Represents a Flutter implementation of the Android [View](https://developer.android.com/reference/android/view/View) @@ -25,20 +25,20 @@ class AndroidViewWidget extends StatelessWidget { this.layoutDirection = TextDirection.ltr, this.onPlatformViewCreated, this.displayWithHybridComposition = false, - interactive_media_ads.PigeonInstanceManager? instanceManager, + ima.PigeonInstanceManager? instanceManager, this.platformViewsServiceProxy = const PlatformViewsServiceProxy(), }) : instanceManager = instanceManager ?? - interactive_media_ads.PigeonInstanceManager.instance; + ima.PigeonInstanceManager.instance; /// The reference to the Android native view that should be shown. - final interactive_media_ads.View view; + final ima.View view; /// Maintains instances used to communicate with the native objects they /// represent. /// /// This field is exposed for testing purposes only and should not be used /// outside of tests. - final interactive_media_ads.PigeonInstanceManager instanceManager; + final ima.PigeonInstanceManager instanceManager; /// Proxy that provides access to the platform views service. /// @@ -57,7 +57,6 @@ class AndroidViewWidget extends StatelessWidget { @override Widget build(BuildContext context) { return PlatformViewLink( - key: key, viewType: 'plugins.flutter.io/webview', surfaceFactory: ( BuildContext context, diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.dart new file mode 100644 index 00000000000..60823af1a79 --- /dev/null +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.dart @@ -0,0 +1,35 @@ +// 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. + +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as ima; +import 'package:mockito/annotations.dart'; + +@GenerateNiceMocks(>[ + MockSpec(), + MockSpec(), + MockSpec(), +]) +void main() { + group('AndroidAdDisplayContainer', () { + testWidgets('build', (WidgetTester tester) async { + final AndroidAdDisplayContainer container = AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + key: const Key('testKey'), + onContainerAdded: (_) {}, + ), + ); + + await tester.pumpWidget(Builder( + builder: (BuildContext context) => container.build(context), + )); + + expect(find.byType(PlatformViewLink), findsOneWidget); + expect(find.byKey(const Key('testKey')), findsOneWidget); + }); + }); +} diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart new file mode 100644 index 00000000000..dbfd01c9ad8 --- /dev/null +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart @@ -0,0 +1,243 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in interactive_media_ads/test/android/ad_display_container_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; + +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePigeonInstanceManager_0 extends _i1.SmartFake + implements _i2.PigeonInstanceManager { + _FakePigeonInstanceManager_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdDisplayContainer_1 extends _i1.SmartFake + implements _i2.AdDisplayContainer { + _FakeAdDisplayContainer_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFrameLayout_2 extends _i1.SmartFake implements _i2.FrameLayout { + _FakeFrameLayout_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoView_3 extends _i1.SmartFake implements _i2.VideoView { + _FakeVideoView_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [AdDisplayContainer]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdDisplayContainer extends _i1.Mock + implements _i2.AdDisplayContainer { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdDisplayContainer pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdDisplayContainer_1( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdDisplayContainer_1( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdDisplayContainer); +} + +/// A class which mocks [FrameLayout]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.FrameLayout pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeFrameLayout_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeFrameLayout_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.FrameLayout); + + @override + _i3.Future addView(_i2.View? view) => (super.noSuchMethod( + Invocation.method( + #addView, + [view], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); +} + +/// A class which mocks [VideoView]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoView extends _i1.Mock implements _i2.VideoView { + @override + void Function( + _i2.VideoView, + _i2.MediaPlayer, + int, + int, + ) get onError => (super.noSuchMethod( + Invocation.getter(#onError), + returnValue: ( + _i2.VideoView pigeon_instance, + _i2.MediaPlayer player, + int what, + int extra, + ) {}, + returnValueForMissingStub: ( + _i2.VideoView pigeon_instance, + _i2.MediaPlayer player, + int what, + int extra, + ) {}, + ) as void Function( + _i2.VideoView, + _i2.MediaPlayer, + int, + int, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i3.Future setVideoUri(String? uri) => (super.noSuchMethod( + Invocation.method( + #setVideoUri, + [uri], + ), + returnValue: _i3.Future.value(), + returnValueForMissingStub: _i3.Future.value(), + ) as _i3.Future); + + @override + _i3.Future getCurrentPosition() => (super.noSuchMethod( + Invocation.method( + #getCurrentPosition, + [], + ), + returnValue: _i3.Future.value(0), + returnValueForMissingStub: _i3.Future.value(0), + ) as _i3.Future); + + @override + _i2.VideoView pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoView_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoView_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoView); +} From c25d360d929a996ee846764fbf6a660c4e03eff3 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 16 May 2024 19:41:00 -0400 Subject: [PATCH 40/76] working addisplaycontainer test --- .../android/android_ad_display_container.dart | 30 +- .../android/ad_display_container_test.dart | 78 ++- .../ad_display_container_test.mocks.dart | 588 +++++++++++++++++- 3 files changed, 663 insertions(+), 33 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index aab420f5f52..4a95e80e56c 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -10,6 +10,7 @@ import '../platform_interface/platform_interface.dart'; import 'android_view_widget.dart'; import 'interactive_media_ads.g.dart' as ima; import 'interactive_media_ads_proxy.dart'; +import 'platform_views_service_proxy.dart'; /// Android implementation of [PlatformAdDisplayContainerCreationParams]. final class AndroidAdDisplayContainerCreationParams @@ -18,24 +19,30 @@ final class AndroidAdDisplayContainerCreationParams const AndroidAdDisplayContainerCreationParams({ super.key, required super.onContainerAdded, - InteractiveMediaAdsProxy? proxy, - }) : _proxy = proxy ?? const InteractiveMediaAdsProxy(), + @visibleForTesting InteractiveMediaAdsProxy? imaProxy, + @visibleForTesting PlatformViewsServiceProxy? platformViewsProxy, + }) : _imaProxy = imaProxy ?? const InteractiveMediaAdsProxy(), + _platformViewsProxy = + platformViewsProxy ?? const PlatformViewsServiceProxy(), super(); /// Creates a [AndroidAdDisplayContainerCreationParams] from an instance of /// [PlatformAdDisplayContainerCreationParams]. factory AndroidAdDisplayContainerCreationParams.fromPlatformAdDisplayContainerCreationParams( PlatformAdDisplayContainerCreationParams params, { - @visibleForTesting InteractiveMediaAdsProxy? proxy, + @visibleForTesting InteractiveMediaAdsProxy? imaProxy, + @visibleForTesting PlatformViewsServiceProxy? platformViewsProxy, }) { return AndroidAdDisplayContainerCreationParams( key: params.key, onContainerAdded: params.onContainerAdded, - proxy: proxy, + imaProxy: imaProxy, + platformViewsProxy: platformViewsProxy, ); } - final InteractiveMediaAdsProxy _proxy; + final InteractiveMediaAdsProxy _imaProxy; + final PlatformViewsServiceProxy _platformViewsProxy; } /// Android implementation of [PlatformAdDisplayContainer]. @@ -55,7 +62,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { // ViewGroup used to create the `ima.AdDisplayContainer`. late final ima.FrameLayout _frameLayout = - _androidParams._proxy.newFrameLayout(); + _androidParams._imaProxy.newFrameLayout(); // Handles ad playback. late final ima.VideoView _videoView; @@ -93,9 +100,10 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { return AndroidViewWidget( key: params.key, view: _frameLayout, + platformViewsServiceProxy: _androidParams._platformViewsProxy, onPlatformViewCreated: () async { - _adDisplayContainer = - await _androidParams._proxy.createAdDisplayContainerImaSdkFactory( + _adDisplayContainer = await _androidParams._imaProxy + .createAdDisplayContainerImaSdkFactory( _frameLayout, _videoAdPlayer, ); @@ -117,7 +125,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { const Duration(milliseconds: _progressPollingMs), (Timer timer) async { final ima.VideoProgressUpdate currentProgress = - _androidParams._proxy.newVideoProgressUpdate( + _androidParams._imaProxy.newVideoProgressUpdate( currentTimeMs: await _videoView.getCurrentPosition(), durationMs: _adDuration!, ); @@ -148,7 +156,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { static ima.VideoView _setUpVideoView( WeakReference weakThis, ) { - return weakThis.target!._androidParams._proxy.newVideoView( + return weakThis.target!._androidParams._imaProxy.newVideoView( onCompletion: (_, ima.MediaPlayer player) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { @@ -188,7 +196,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { static ima.VideoAdPlayer _setUpVideoAdPlayer( WeakReference weakThis, ) { - return ima.VideoAdPlayer( + return weakThis.target!._androidParams._imaProxy.newVideoAdPlayer( addCallback: (_, ima.VideoAdPlayerCallback callback) { weakThis.target?._videoAdPlayerCallbacks.add(callback); }, diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.dart index 60823af1a79..03eb8536d09 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.dart @@ -2,21 +2,32 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as ima; +import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart'; +import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart'; import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'ad_display_container_test.mocks.dart'; @GenerateNiceMocks(>[ MockSpec(), + MockSpec(), MockSpec(), + MockSpec(), + MockSpec(), MockSpec(), ]) void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + group('AndroidAdDisplayContainer', () { - testWidgets('build', (WidgetTester tester) async { + testWidgets('build with key', (WidgetTester tester) async { final AndroidAdDisplayContainer container = AndroidAdDisplayContainer( AndroidAdDisplayContainerCreationParams( key: const Key('testKey'), @@ -31,5 +42,70 @@ void main() { expect(find.byType(PlatformViewLink), findsOneWidget); expect(find.byKey(const Key('testKey')), findsOneWidget); }); + + testWidgets('onContainerAdded is called', (WidgetTester tester) async { + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + required dynamic onError, + dynamic onPrepared, + dynamic onCompletion, + }) => + MockVideoView(), + createAdDisplayContainerImaSdkFactory: ( + _, + __, + ) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required dynamic addCallback, + required dynamic loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) => + MockVideoAdPlayer(), + ); + + final MockPlatformViewsServiceProxy mockPlatformViewsProxy = + MockPlatformViewsServiceProxy(); + final MockSurfaceAndroidViewController mockAndroidViewController = + MockSurfaceAndroidViewController(); + + when( + mockPlatformViewsProxy.initSurfaceAndroidView( + // TODO: Need to capture this id + id: anyNamed('id'), + viewType: anyNamed('viewType'), + layoutDirection: anyNamed('layoutDirection'), + creationParams: anyNamed('creationParams'), + creationParamsCodec: anyNamed('creationParamsCodec'), + onFocus: anyNamed('onFocus'), + ), + ).thenReturn(mockAndroidViewController); + + final AndroidAdDisplayContainer container = AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + key: const Key('testKey'), + onContainerAdded: expectAsync1((_) {}), + platformViewsProxy: mockPlatformViewsProxy, + imaProxy: imaProxy, + ), + ); + + await tester.pumpWidget(Builder( + builder: (BuildContext context) => container.build(context), + )); + + (verify(mockAndroidViewController + .addOnPlatformViewCreatedListener(captureAny)) + .captured[0] as void Function(int)) + .call(0); + + await tester.pumpAndSettle(); + }); }); } diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart index dbfd01c9ad8..bdd19fbc064 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart @@ -3,10 +3,14 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i3; +import 'dart:async' as _i5; +import 'dart:ui' as _i3; +import 'package:flutter/services.dart' as _i4; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as _i2; +import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart' + as _i6; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -44,8 +48,8 @@ class _FakeAdDisplayContainer_1 extends _i1.SmartFake ); } -class _FakeFrameLayout_2 extends _i1.SmartFake implements _i2.FrameLayout { - _FakeFrameLayout_2( +class _FakeOffset_2 extends _i1.SmartFake implements _i3.Offset { + _FakeOffset_2( Object parent, Invocation parentInvocation, ) : super( @@ -54,8 +58,60 @@ class _FakeFrameLayout_2 extends _i1.SmartFake implements _i2.FrameLayout { ); } -class _FakeVideoView_3 extends _i1.SmartFake implements _i2.VideoView { - _FakeVideoView_3( +class _FakeSize_3 extends _i1.SmartFake implements _i3.Size { + _FakeSize_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFrameLayout_4 extends _i1.SmartFake implements _i2.FrameLayout { + _FakeFrameLayout_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeExpensiveAndroidViewController_5 extends _i1.SmartFake + implements _i4.ExpensiveAndroidViewController { + _FakeExpensiveAndroidViewController_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSurfaceAndroidViewController_6 extends _i1.SmartFake + implements _i4.SurfaceAndroidViewController { + _FakeSurfaceAndroidViewController_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoAdPlayer_7 extends _i1.SmartFake implements _i2.VideoAdPlayer { + _FakeVideoAdPlayer_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoView_8 extends _i1.SmartFake implements _i2.VideoView { + _FakeVideoView_8( Object parent, Invocation parentInvocation, ) : super( @@ -105,6 +161,195 @@ class MockAdDisplayContainer extends _i1.Mock ) as _i2.AdDisplayContainer); } +/// A class which mocks [SurfaceAndroidViewController]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockSurfaceAndroidViewController extends _i1.Mock + implements _i4.SurfaceAndroidViewController { + @override + bool get requiresViewComposition => (super.noSuchMethod( + Invocation.getter(#requiresViewComposition), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + int get viewId => (super.noSuchMethod( + Invocation.getter(#viewId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + bool get awaitingCreation => (super.noSuchMethod( + Invocation.getter(#awaitingCreation), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + _i4.PointTransformer get pointTransformer => (super.noSuchMethod( + Invocation.getter(#pointTransformer), + returnValue: (_i3.Offset position) => _FakeOffset_2( + this, + Invocation.getter(#pointTransformer), + ), + returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_2( + this, + Invocation.getter(#pointTransformer), + ), + ) as _i4.PointTransformer); + + @override + set pointTransformer(_i4.PointTransformer? transformer) => super.noSuchMethod( + Invocation.setter( + #pointTransformer, + transformer, + ), + returnValueForMissingStub: null, + ); + + @override + bool get isCreated => (super.noSuchMethod( + Invocation.getter(#isCreated), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + List<_i4.PlatformViewCreatedCallback> get createdCallbacks => + (super.noSuchMethod( + Invocation.getter(#createdCallbacks), + returnValue: <_i4.PlatformViewCreatedCallback>[], + returnValueForMissingStub: <_i4.PlatformViewCreatedCallback>[], + ) as List<_i4.PlatformViewCreatedCallback>); + + @override + _i5.Future setOffset(_i3.Offset? off) => (super.noSuchMethod( + Invocation.method( + #setOffset, + [off], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future create({ + _i3.Size? size, + _i3.Offset? position, + }) => + (super.noSuchMethod( + Invocation.method( + #create, + [], + { + #size: size, + #position: position, + }, + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future<_i3.Size> setSize(_i3.Size? size) => (super.noSuchMethod( + Invocation.method( + #setSize, + [size], + ), + returnValue: _i5.Future<_i3.Size>.value(_FakeSize_3( + this, + Invocation.method( + #setSize, + [size], + ), + )), + returnValueForMissingStub: _i5.Future<_i3.Size>.value(_FakeSize_3( + this, + Invocation.method( + #setSize, + [size], + ), + )), + ) as _i5.Future<_i3.Size>); + + @override + _i5.Future sendMotionEvent(_i4.AndroidMotionEvent? event) => + (super.noSuchMethod( + Invocation.method( + #sendMotionEvent, + [event], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + void addOnPlatformViewCreatedListener( + _i4.PlatformViewCreatedCallback? listener) => + super.noSuchMethod( + Invocation.method( + #addOnPlatformViewCreatedListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + void removeOnPlatformViewCreatedListener( + _i4.PlatformViewCreatedCallback? listener) => + super.noSuchMethod( + Invocation.method( + #removeOnPlatformViewCreatedListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + _i5.Future setLayoutDirection(_i3.TextDirection? layoutDirection) => + (super.noSuchMethod( + Invocation.method( + #setLayoutDirection, + [layoutDirection], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future dispatchPointerEvent(_i4.PointerEvent? event) => + (super.noSuchMethod( + Invocation.method( + #dispatchPointerEvent, + [event], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future clearFocus() => (super.noSuchMethod( + Invocation.method( + #clearFocus, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future dispose() => (super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + /// A class which mocks [FrameLayout]. /// /// See the documentation for Mockito's code generation for more information. @@ -128,14 +373,14 @@ class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { #pigeon_copy, [], ), - returnValue: _FakeFrameLayout_2( + returnValue: _FakeFrameLayout_4( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeFrameLayout_2( + returnValueForMissingStub: _FakeFrameLayout_4( this, Invocation.method( #pigeon_copy, @@ -145,14 +390,315 @@ class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { ) as _i2.FrameLayout); @override - _i3.Future addView(_i2.View? view) => (super.noSuchMethod( + _i5.Future addView(_i2.View? view) => (super.noSuchMethod( Invocation.method( #addView, [view], ), - returnValue: _i3.Future.value(), - returnValueForMissingStub: _i3.Future.value(), - ) as _i3.Future); + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [PlatformViewsServiceProxy]. +/// +/// See the documentation for Mockito's code generation for more information. +// ignore: must_be_immutable +class MockPlatformViewsServiceProxy extends _i1.Mock + implements _i6.PlatformViewsServiceProxy { + @override + _i4.ExpensiveAndroidViewController initExpensiveAndroidView({ + required int? id, + required String? viewType, + required _i3.TextDirection? layoutDirection, + dynamic creationParams, + _i4.MessageCodec? creationParamsCodec, + _i3.VoidCallback? onFocus, + }) => + (super.noSuchMethod( + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + returnValue: _FakeExpensiveAndroidViewController_5( + this, + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + returnValueForMissingStub: _FakeExpensiveAndroidViewController_5( + this, + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + ) as _i4.ExpensiveAndroidViewController); + + @override + _i4.SurfaceAndroidViewController initSurfaceAndroidView({ + required int? id, + required String? viewType, + required _i3.TextDirection? layoutDirection, + dynamic creationParams, + _i4.MessageCodec? creationParamsCodec, + _i3.VoidCallback? onFocus, + }) => + (super.noSuchMethod( + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + returnValue: _FakeSurfaceAndroidViewController_6( + this, + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + returnValueForMissingStub: _FakeSurfaceAndroidViewController_6( + this, + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + ) as _i4.SurfaceAndroidViewController); +} + +/// A class which mocks [VideoAdPlayer]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { + @override + void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + ) get addCallback => (super.noSuchMethod( + Invocation.getter(#addCallback), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + _i2.AdPodInfo, + ) get loadAd => (super.noSuchMethod( + Invocation.getter(#loadAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + _i2.AdPodInfo adPodInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + _i2.AdPodInfo adPodInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + _i2.AdPodInfo, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + ) get pauseAd => (super.noSuchMethod( + Invocation.getter(#pauseAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + ) get playAd => (super.noSuchMethod( + Invocation.getter(#playAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + )); + + @override + void Function(_i2.VideoAdPlayer) get release => (super.noSuchMethod( + Invocation.getter(#release), + returnValue: (_i2.VideoAdPlayer pigeon_instance) {}, + returnValueForMissingStub: (_i2.VideoAdPlayer pigeon_instance) {}, + ) as void Function(_i2.VideoAdPlayer)); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + ) get removeCallback => (super.noSuchMethod( + Invocation.getter(#removeCallback), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + ) get stopAd => (super.noSuchMethod( + Invocation.getter(#stopAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future setVolume(int? value) => (super.noSuchMethod( + Invocation.method( + #setVolume, + [value], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setAdProgress(_i2.VideoProgressUpdate? progress) => + (super.noSuchMethod( + Invocation.method( + #setAdProgress, + [progress], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i2.VideoAdPlayer pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoAdPlayer_7( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoAdPlayer_7( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoAdPlayer); } /// A class which mocks [VideoView]. @@ -200,24 +746,24 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { ) as _i2.PigeonInstanceManager); @override - _i3.Future setVideoUri(String? uri) => (super.noSuchMethod( + _i5.Future setVideoUri(String? uri) => (super.noSuchMethod( Invocation.method( #setVideoUri, [uri], ), - returnValue: _i3.Future.value(), - returnValueForMissingStub: _i3.Future.value(), - ) as _i3.Future); + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); @override - _i3.Future getCurrentPosition() => (super.noSuchMethod( + _i5.Future getCurrentPosition() => (super.noSuchMethod( Invocation.method( #getCurrentPosition, [], ), - returnValue: _i3.Future.value(0), - returnValueForMissingStub: _i3.Future.value(0), - ) as _i3.Future); + returnValue: _i5.Future.value(0), + returnValueForMissingStub: _i5.Future.value(0), + ) as _i5.Future); @override _i2.VideoView pigeon_copy() => (super.noSuchMethod( @@ -225,14 +771,14 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { #pigeon_copy, [], ), - returnValue: _FakeVideoView_3( + returnValue: _FakeVideoView_8( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeVideoView_3( + returnValueForMissingStub: _FakeVideoView_8( this, Invocation.method( #pigeon_copy, From b182af5ec8a188c8f3395b62050704e0f50d9724 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 16:27:48 -0400 Subject: [PATCH 41/76] onerror and oncompletion test --- .../example/lib/main.dart | 2 +- .../android/android_ad_display_container.dart | 4 +- .../android/ad_display_container_test.dart | 178 +++- .../ad_display_container_test.mocks.dart | 971 +++++++++++++----- 4 files changed, 873 insertions(+), 282 deletions(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index d29765576b7..cc1b129202a 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -135,7 +135,7 @@ class _AdExampleWidgetState extends State { body: Center( child: SizedBox( width: 300, - child: _contentVideoController.value.isInitialized + child: !_contentVideoController.value.isInitialized ? Container() : AspectRatio( aspectRatio: _contentVideoController.value.aspectRatio, diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 4a95e80e56c..96b4da54e7b 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -157,7 +157,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { WeakReference weakThis, ) { return weakThis.target!._androidParams._imaProxy.newVideoView( - onCompletion: (_, ima.MediaPlayer player) { + onCompletion: (_, __) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { weakThis.target?._resetPlayer(); @@ -180,7 +180,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { await player.start(); container?._startAdTracking(); }, - onError: (_, ima.MediaPlayer player, int what, int extra) { + onError: (_, __, ___, ____) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { container._resetPlayer(); diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.dart index 03eb8536d09..c513490c25e 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.dart @@ -17,11 +17,15 @@ import 'ad_display_container_test.mocks.dart'; @GenerateNiceMocks(>[ MockSpec(), - MockSpec(), + MockSpec(), + MockSpec(), MockSpec(), - MockSpec(), + MockSpec(), MockSpec(), + MockSpec(), MockSpec(), + MockSpec(), + MockSpec(), ]) void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -75,9 +79,9 @@ void main() { final MockSurfaceAndroidViewController mockAndroidViewController = MockSurfaceAndroidViewController(); + late final int platformViewId; when( mockPlatformViewsProxy.initSurfaceAndroidView( - // TODO: Need to capture this id id: anyNamed('id'), viewType: anyNamed('viewType'), layoutDirection: anyNamed('layoutDirection'), @@ -85,11 +89,13 @@ void main() { creationParamsCodec: anyNamed('creationParamsCodec'), onFocus: anyNamed('onFocus'), ), - ).thenReturn(mockAndroidViewController); + ).thenAnswer((Invocation invocation) { + platformViewId = invocation.namedArguments[const Symbol('id')] as int; + return mockAndroidViewController; + }); final AndroidAdDisplayContainer container = AndroidAdDisplayContainer( AndroidAdDisplayContainerCreationParams( - key: const Key('testKey'), onContainerAdded: expectAsync1((_) {}), platformViewsProxy: mockPlatformViewsProxy, imaProxy: imaProxy, @@ -103,9 +109,169 @@ void main() { (verify(mockAndroidViewController .addOnPlatformViewCreatedListener(captureAny)) .captured[0] as void Function(int)) - .call(0); + .call(platformViewId); await tester.pumpAndSettle(); }); + + test('completing the ad notifies IMA SDK the ad has ended', () { + late final void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAdCallback; + + late final void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallbackCallback; + + late final void Function( + ima.VideoView, + ima.MediaPlayer, + ) onCompletionCallback; + + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + required dynamic onError, + dynamic onPrepared, + void Function( + ima.VideoView, + ima.MediaPlayer, + )? onCompletion, + }) { + onCompletionCallback = onCompletion!; + return MockVideoView(); + }, + createAdDisplayContainerImaSdkFactory: ( + _, + __, + ) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallback, + required void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) { + loadAdCallback = loadAd; + addCallbackCallback = addCallback; + return MockVideoAdPlayer(); + }, + ); + + AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (_) {}, + imaProxy: imaProxy, + ), + ); + + final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); + + loadAdCallback(MockVideoAdPlayer(), mockAdMediaInfo, MockAdPodInfo()); + + final MockVideoAdPlayerCallback mockPlayerCallback = + MockVideoAdPlayerCallback(); + addCallbackCallback(MockVideoAdPlayer(), mockPlayerCallback); + + onCompletionCallback(MockVideoView(), MockMediaPlayer()); + + verify(mockPlayerCallback.onEnded(mockAdMediaInfo)); + }); + + test('error loading the ad notifies IMA SDK of error', () { + late final void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAdCallback; + + late final void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallbackCallback; + + late final void Function( + ima.VideoView, + ima.MediaPlayer, + int, + int, + ) onErrorCallback; + + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + required void Function( + ima.VideoView, + ima.MediaPlayer, + int, + int, + ) onError, + dynamic onPrepared, + dynamic onCompletion, + }) { + onErrorCallback = onError; + return MockVideoView(); + }, + createAdDisplayContainerImaSdkFactory: ( + _, + __, + ) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallback, + required void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) { + loadAdCallback = loadAd; + addCallbackCallback = addCallback; + return MockVideoAdPlayer(); + }, + ); + + AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (_) {}, + imaProxy: imaProxy, + ), + ); + + final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); + + loadAdCallback(MockVideoAdPlayer(), mockAdMediaInfo, MockAdPodInfo()); + + final MockVideoAdPlayerCallback mockPlayerCallback = + MockVideoAdPlayerCallback(); + addCallbackCallback(MockVideoAdPlayer(), mockPlayerCallback); + + onErrorCallback(MockVideoView(), MockMediaPlayer(), 0, 0); + + verify(mockPlayerCallback.onError(mockAdMediaInfo)); + }); }); } diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart index bdd19fbc064..c6eef600005 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart @@ -3,15 +3,16 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i5; +import 'dart:async' as _i6; import 'dart:ui' as _i3; import 'package:flutter/services.dart' as _i4; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as _i2; import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart' - as _i6; + as _i7; import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i5; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -48,8 +49,8 @@ class _FakeAdDisplayContainer_1 extends _i1.SmartFake ); } -class _FakeOffset_2 extends _i1.SmartFake implements _i3.Offset { - _FakeOffset_2( +class _FakeAdMediaInfo_2 extends _i1.SmartFake implements _i2.AdMediaInfo { + _FakeAdMediaInfo_2( Object parent, Invocation parentInvocation, ) : super( @@ -58,8 +59,8 @@ class _FakeOffset_2 extends _i1.SmartFake implements _i3.Offset { ); } -class _FakeSize_3 extends _i1.SmartFake implements _i3.Size { - _FakeSize_3( +class _FakeAdPodInfo_3 extends _i1.SmartFake implements _i2.AdPodInfo { + _FakeAdPodInfo_3( Object parent, Invocation parentInvocation, ) : super( @@ -78,9 +79,8 @@ class _FakeFrameLayout_4 extends _i1.SmartFake implements _i2.FrameLayout { ); } -class _FakeExpensiveAndroidViewController_5 extends _i1.SmartFake - implements _i4.ExpensiveAndroidViewController { - _FakeExpensiveAndroidViewController_5( +class _FakeMediaPlayer_5 extends _i1.SmartFake implements _i2.MediaPlayer { + _FakeMediaPlayer_5( Object parent, Invocation parentInvocation, ) : super( @@ -89,9 +89,8 @@ class _FakeExpensiveAndroidViewController_5 extends _i1.SmartFake ); } -class _FakeSurfaceAndroidViewController_6 extends _i1.SmartFake - implements _i4.SurfaceAndroidViewController { - _FakeSurfaceAndroidViewController_6( +class _FakeVideoAdPlayer_6 extends _i1.SmartFake implements _i2.VideoAdPlayer { + _FakeVideoAdPlayer_6( Object parent, Invocation parentInvocation, ) : super( @@ -100,8 +99,9 @@ class _FakeSurfaceAndroidViewController_6 extends _i1.SmartFake ); } -class _FakeVideoAdPlayer_7 extends _i1.SmartFake implements _i2.VideoAdPlayer { - _FakeVideoAdPlayer_7( +class _FakeVideoAdPlayerCallback_7 extends _i1.SmartFake + implements _i2.VideoAdPlayerCallback { + _FakeVideoAdPlayerCallback_7( Object parent, Invocation parentInvocation, ) : super( @@ -120,6 +120,48 @@ class _FakeVideoView_8 extends _i1.SmartFake implements _i2.VideoView { ); } +class _FakeOffset_9 extends _i1.SmartFake implements _i3.Offset { + _FakeOffset_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSize_10 extends _i1.SmartFake implements _i3.Size { + _FakeSize_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeExpensiveAndroidViewController_11 extends _i1.SmartFake + implements _i4.ExpensiveAndroidViewController { + _FakeExpensiveAndroidViewController_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSurfaceAndroidViewController_12 extends _i1.SmartFake + implements _i4.SurfaceAndroidViewController { + _FakeSurfaceAndroidViewController_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + /// A class which mocks [AdDisplayContainer]. /// /// See the documentation for Mockito's code generation for more information. @@ -161,193 +203,139 @@ class MockAdDisplayContainer extends _i1.Mock ) as _i2.AdDisplayContainer); } -/// A class which mocks [SurfaceAndroidViewController]. +/// A class which mocks [AdMediaInfo]. /// /// See the documentation for Mockito's code generation for more information. -class MockSurfaceAndroidViewController extends _i1.Mock - implements _i4.SurfaceAndroidViewController { - @override - bool get requiresViewComposition => (super.noSuchMethod( - Invocation.getter(#requiresViewComposition), - returnValue: false, - returnValueForMissingStub: false, - ) as bool); - - @override - int get viewId => (super.noSuchMethod( - Invocation.getter(#viewId), - returnValue: 0, - returnValueForMissingStub: 0, - ) as int); - - @override - bool get awaitingCreation => (super.noSuchMethod( - Invocation.getter(#awaitingCreation), - returnValue: false, - returnValueForMissingStub: false, - ) as bool); - +class MockAdMediaInfo extends _i1.Mock implements _i2.AdMediaInfo { @override - _i4.PointTransformer get pointTransformer => (super.noSuchMethod( - Invocation.getter(#pointTransformer), - returnValue: (_i3.Offset position) => _FakeOffset_2( + String get url => (super.noSuchMethod( + Invocation.getter(#url), + returnValue: _i5.dummyValue( this, - Invocation.getter(#pointTransformer), + Invocation.getter(#url), ), - returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_2( + returnValueForMissingStub: _i5.dummyValue( this, - Invocation.getter(#pointTransformer), + Invocation.getter(#url), ), - ) as _i4.PointTransformer); + ) as String); @override - set pointTransformer(_i4.PointTransformer? transformer) => super.noSuchMethod( - Invocation.setter( - #pointTransformer, - transformer, + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), ), - returnValueForMissingStub: null, - ); - - @override - bool get isCreated => (super.noSuchMethod( - Invocation.getter(#isCreated), - returnValue: false, - returnValueForMissingStub: false, - ) as bool); - - @override - List<_i4.PlatformViewCreatedCallback> get createdCallbacks => - (super.noSuchMethod( - Invocation.getter(#createdCallbacks), - returnValue: <_i4.PlatformViewCreatedCallback>[], - returnValueForMissingStub: <_i4.PlatformViewCreatedCallback>[], - ) as List<_i4.PlatformViewCreatedCallback>); - - @override - _i5.Future setOffset(_i3.Offset? off) => (super.noSuchMethod( - Invocation.method( - #setOffset, - [off], + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + ) as _i2.PigeonInstanceManager); @override - _i5.Future create({ - _i3.Size? size, - _i3.Offset? position, - }) => - (super.noSuchMethod( + _i2.AdMediaInfo pigeon_copy() => (super.noSuchMethod( Invocation.method( - #create, + #pigeon_copy, [], - { - #size: size, - #position: position, - }, - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); - - @override - _i5.Future<_i3.Size> setSize(_i3.Size? size) => (super.noSuchMethod( - Invocation.method( - #setSize, - [size], ), - returnValue: _i5.Future<_i3.Size>.value(_FakeSize_3( + returnValue: _FakeAdMediaInfo_2( this, Invocation.method( - #setSize, - [size], + #pigeon_copy, + [], ), - )), - returnValueForMissingStub: _i5.Future<_i3.Size>.value(_FakeSize_3( + ), + returnValueForMissingStub: _FakeAdMediaInfo_2( this, Invocation.method( - #setSize, - [size], + #pigeon_copy, + [], ), - )), - ) as _i5.Future<_i3.Size>); + ), + ) as _i2.AdMediaInfo); +} +/// A class which mocks [AdPodInfo]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdPodInfo extends _i1.Mock implements _i2.AdPodInfo { @override - _i5.Future sendMotionEvent(_i4.AndroidMotionEvent? event) => - (super.noSuchMethod( - Invocation.method( - #sendMotionEvent, - [event], - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + int get adPosition => (super.noSuchMethod( + Invocation.getter(#adPosition), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); @override - void addOnPlatformViewCreatedListener( - _i4.PlatformViewCreatedCallback? listener) => - super.noSuchMethod( - Invocation.method( - #addOnPlatformViewCreatedListener, - [listener], - ), - returnValueForMissingStub: null, - ); + double get maxDuration => (super.noSuchMethod( + Invocation.getter(#maxDuration), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); @override - void removeOnPlatformViewCreatedListener( - _i4.PlatformViewCreatedCallback? listener) => - super.noSuchMethod( - Invocation.method( - #removeOnPlatformViewCreatedListener, - [listener], - ), - returnValueForMissingStub: null, - ); + int get podIndex => (super.noSuchMethod( + Invocation.getter(#podIndex), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); @override - _i5.Future setLayoutDirection(_i3.TextDirection? layoutDirection) => - (super.noSuchMethod( - Invocation.method( - #setLayoutDirection, - [layoutDirection], - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + double get timeOffset => (super.noSuchMethod( + Invocation.getter(#timeOffset), + returnValue: 0.0, + returnValueForMissingStub: 0.0, + ) as double); @override - _i5.Future dispatchPointerEvent(_i4.PointerEvent? event) => - (super.noSuchMethod( - Invocation.method( - #dispatchPointerEvent, - [event], - ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + int get totalAds => (super.noSuchMethod( + Invocation.getter(#totalAds), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); @override - _i5.Future clearFocus() => (super.noSuchMethod( - Invocation.method( - #clearFocus, - [], + bool get isBumper => (super.noSuchMethod( + Invocation.getter(#isBumper), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + ) as _i2.PigeonInstanceManager); @override - _i5.Future dispose() => (super.noSuchMethod( + _i2.AdPodInfo pigeon_copy() => (super.noSuchMethod( Invocation.method( - #dispose, + #pigeon_copy, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _FakeAdPodInfo_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdPodInfo_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdPodInfo); } /// A class which mocks [FrameLayout]. @@ -390,129 +378,104 @@ class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { ) as _i2.FrameLayout); @override - _i5.Future addView(_i2.View? view) => (super.noSuchMethod( + _i6.Future addView(_i2.View? view) => (super.noSuchMethod( Invocation.method( #addView, [view], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); } -/// A class which mocks [PlatformViewsServiceProxy]. +/// A class which mocks [MediaPlayer]. /// /// See the documentation for Mockito's code generation for more information. -// ignore: must_be_immutable -class MockPlatformViewsServiceProxy extends _i1.Mock - implements _i6.PlatformViewsServiceProxy { +class MockMediaPlayer extends _i1.Mock implements _i2.MediaPlayer { @override - _i4.ExpensiveAndroidViewController initExpensiveAndroidView({ - required int? id, - required String? viewType, - required _i3.TextDirection? layoutDirection, - dynamic creationParams, - _i4.MessageCodec? creationParamsCodec, - _i3.VoidCallback? onFocus, - }) => - (super.noSuchMethod( + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i6.Future getDuration() => (super.noSuchMethod( Invocation.method( - #initExpensiveAndroidView, + #getDuration, [], - { - #id: id, - #viewType: viewType, - #layoutDirection: layoutDirection, - #creationParams: creationParams, - #creationParamsCodec: creationParamsCodec, - #onFocus: onFocus, - }, ), - returnValue: _FakeExpensiveAndroidViewController_5( - this, - Invocation.method( - #initExpensiveAndroidView, - [], - { - #id: id, - #viewType: viewType, - #layoutDirection: layoutDirection, - #creationParams: creationParams, - #creationParamsCodec: creationParamsCodec, - #onFocus: onFocus, - }, - ), + returnValue: _i6.Future.value(0), + returnValueForMissingStub: _i6.Future.value(0), + ) as _i6.Future); + + @override + _i6.Future seekTo(int? mSec) => (super.noSuchMethod( + Invocation.method( + #seekTo, + [mSec], ), - returnValueForMissingStub: _FakeExpensiveAndroidViewController_5( - this, - Invocation.method( - #initExpensiveAndroidView, - [], - { - #id: id, - #viewType: viewType, - #layoutDirection: layoutDirection, - #creationParams: creationParams, - #creationParamsCodec: creationParamsCodec, - #onFocus: onFocus, - }, - ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future start() => (super.noSuchMethod( + Invocation.method( + #start, + [], ), - ) as _i4.ExpensiveAndroidViewController); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i4.SurfaceAndroidViewController initSurfaceAndroidView({ - required int? id, - required String? viewType, - required _i3.TextDirection? layoutDirection, - dynamic creationParams, - _i4.MessageCodec? creationParamsCodec, - _i3.VoidCallback? onFocus, - }) => - (super.noSuchMethod( + _i6.Future pause() => (super.noSuchMethod( Invocation.method( - #initSurfaceAndroidView, + #pause, + [], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future stop() => (super.noSuchMethod( + Invocation.method( + #stop, + [], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i2.MediaPlayer pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, [], - { - #id: id, - #viewType: viewType, - #layoutDirection: layoutDirection, - #creationParams: creationParams, - #creationParamsCodec: creationParamsCodec, - #onFocus: onFocus, - }, ), - returnValue: _FakeSurfaceAndroidViewController_6( + returnValue: _FakeMediaPlayer_5( this, Invocation.method( - #initSurfaceAndroidView, + #pigeon_copy, [], - { - #id: id, - #viewType: viewType, - #layoutDirection: layoutDirection, - #creationParams: creationParams, - #creationParamsCodec: creationParamsCodec, - #onFocus: onFocus, - }, ), ), - returnValueForMissingStub: _FakeSurfaceAndroidViewController_6( + returnValueForMissingStub: _FakeMediaPlayer_5( this, Invocation.method( - #initSurfaceAndroidView, + #pigeon_copy, [], - { - #id: id, - #viewType: viewType, - #layoutDirection: layoutDirection, - #creationParams: creationParams, - #creationParamsCodec: creationParamsCodec, - #onFocus: onFocus, - }, ), ), - ) as _i4.SurfaceAndroidViewController); + ) as _i2.MediaPlayer); } /// A class which mocks [VideoAdPlayer]. @@ -658,25 +621,25 @@ class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { ) as _i2.PigeonInstanceManager); @override - _i5.Future setVolume(int? value) => (super.noSuchMethod( + _i6.Future setVolume(int? value) => (super.noSuchMethod( Invocation.method( #setVolume, [value], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future setAdProgress(_i2.VideoProgressUpdate? progress) => + _i6.Future setAdProgress(_i2.VideoProgressUpdate? progress) => (super.noSuchMethod( Invocation.method( #setAdProgress, [progress], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override _i2.VideoAdPlayer pigeon_copy() => (super.noSuchMethod( @@ -684,14 +647,14 @@ class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { #pigeon_copy, [], ), - returnValue: _FakeVideoAdPlayer_7( + returnValue: _FakeVideoAdPlayer_6( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeVideoAdPlayer_7( + returnValueForMissingStub: _FakeVideoAdPlayer_6( this, Invocation.method( #pigeon_copy, @@ -701,6 +664,164 @@ class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { ) as _i2.VideoAdPlayer); } +/// A class which mocks [VideoAdPlayerCallback]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoAdPlayerCallback extends _i1.Mock + implements _i2.VideoAdPlayerCallback { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i6.Future onAdProgress( + _i2.AdMediaInfo? adMediaInfo, + _i2.VideoProgressUpdate? videoProgressUpdate, + ) => + (super.noSuchMethod( + Invocation.method( + #onAdProgress, + [ + adMediaInfo, + videoProgressUpdate, + ], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onBuffering(_i2.AdMediaInfo? adMediaInfo) => + (super.noSuchMethod( + Invocation.method( + #onBuffering, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onContentComplete() => (super.noSuchMethod( + Invocation.method( + #onContentComplete, + [], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onEnded(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onEnded, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onError(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onError, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onLoaded(_i2.AdMediaInfo? adMediaInfo) => + (super.noSuchMethod( + Invocation.method( + #onLoaded, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onPause(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onPause, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onPlay(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onPlay, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onResume(_i2.AdMediaInfo? adMediaInfo) => + (super.noSuchMethod( + Invocation.method( + #onResume, + [adMediaInfo], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future onVolumeChanged( + _i2.AdMediaInfo? adMediaInfo, + int? percentage, + ) => + (super.noSuchMethod( + Invocation.method( + #onVolumeChanged, + [ + adMediaInfo, + percentage, + ], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i2.VideoAdPlayerCallback pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoAdPlayerCallback_7( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoAdPlayerCallback_7( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoAdPlayerCallback); +} + /// A class which mocks [VideoView]. /// /// See the documentation for Mockito's code generation for more information. @@ -746,24 +867,24 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { ) as _i2.PigeonInstanceManager); @override - _i5.Future setVideoUri(String? uri) => (super.noSuchMethod( + _i6.Future setVideoUri(String? uri) => (super.noSuchMethod( Invocation.method( #setVideoUri, [uri], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future getCurrentPosition() => (super.noSuchMethod( + _i6.Future getCurrentPosition() => (super.noSuchMethod( Invocation.method( #getCurrentPosition, [], ), - returnValue: _i5.Future.value(0), - returnValueForMissingStub: _i5.Future.value(0), - ) as _i5.Future); + returnValue: _i6.Future.value(0), + returnValueForMissingStub: _i6.Future.value(0), + ) as _i6.Future); @override _i2.VideoView pigeon_copy() => (super.noSuchMethod( @@ -787,3 +908,307 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { ), ) as _i2.VideoView); } + +/// A class which mocks [SurfaceAndroidViewController]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockSurfaceAndroidViewController extends _i1.Mock + implements _i4.SurfaceAndroidViewController { + @override + bool get requiresViewComposition => (super.noSuchMethod( + Invocation.getter(#requiresViewComposition), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + int get viewId => (super.noSuchMethod( + Invocation.getter(#viewId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + bool get awaitingCreation => (super.noSuchMethod( + Invocation.getter(#awaitingCreation), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + _i4.PointTransformer get pointTransformer => (super.noSuchMethod( + Invocation.getter(#pointTransformer), + returnValue: (_i3.Offset position) => _FakeOffset_9( + this, + Invocation.getter(#pointTransformer), + ), + returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_9( + this, + Invocation.getter(#pointTransformer), + ), + ) as _i4.PointTransformer); + + @override + set pointTransformer(_i4.PointTransformer? transformer) => super.noSuchMethod( + Invocation.setter( + #pointTransformer, + transformer, + ), + returnValueForMissingStub: null, + ); + + @override + bool get isCreated => (super.noSuchMethod( + Invocation.getter(#isCreated), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + List<_i4.PlatformViewCreatedCallback> get createdCallbacks => + (super.noSuchMethod( + Invocation.getter(#createdCallbacks), + returnValue: <_i4.PlatformViewCreatedCallback>[], + returnValueForMissingStub: <_i4.PlatformViewCreatedCallback>[], + ) as List<_i4.PlatformViewCreatedCallback>); + + @override + _i6.Future setOffset(_i3.Offset? off) => (super.noSuchMethod( + Invocation.method( + #setOffset, + [off], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future create({ + _i3.Size? size, + _i3.Offset? position, + }) => + (super.noSuchMethod( + Invocation.method( + #create, + [], + { + #size: size, + #position: position, + }, + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future<_i3.Size> setSize(_i3.Size? size) => (super.noSuchMethod( + Invocation.method( + #setSize, + [size], + ), + returnValue: _i6.Future<_i3.Size>.value(_FakeSize_10( + this, + Invocation.method( + #setSize, + [size], + ), + )), + returnValueForMissingStub: _i6.Future<_i3.Size>.value(_FakeSize_10( + this, + Invocation.method( + #setSize, + [size], + ), + )), + ) as _i6.Future<_i3.Size>); + + @override + _i6.Future sendMotionEvent(_i4.AndroidMotionEvent? event) => + (super.noSuchMethod( + Invocation.method( + #sendMotionEvent, + [event], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + void addOnPlatformViewCreatedListener( + _i4.PlatformViewCreatedCallback? listener) => + super.noSuchMethod( + Invocation.method( + #addOnPlatformViewCreatedListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + void removeOnPlatformViewCreatedListener( + _i4.PlatformViewCreatedCallback? listener) => + super.noSuchMethod( + Invocation.method( + #removeOnPlatformViewCreatedListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + _i6.Future setLayoutDirection(_i3.TextDirection? layoutDirection) => + (super.noSuchMethod( + Invocation.method( + #setLayoutDirection, + [layoutDirection], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future dispatchPointerEvent(_i4.PointerEvent? event) => + (super.noSuchMethod( + Invocation.method( + #dispatchPointerEvent, + [event], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future clearFocus() => (super.noSuchMethod( + Invocation.method( + #clearFocus, + [], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); + + @override + _i6.Future dispose() => (super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); +} + +/// A class which mocks [PlatformViewsServiceProxy]. +/// +/// See the documentation for Mockito's code generation for more information. +// ignore: must_be_immutable +class MockPlatformViewsServiceProxy extends _i1.Mock + implements _i7.PlatformViewsServiceProxy { + @override + _i4.ExpensiveAndroidViewController initExpensiveAndroidView({ + required int? id, + required String? viewType, + required _i3.TextDirection? layoutDirection, + dynamic creationParams, + _i4.MessageCodec? creationParamsCodec, + _i3.VoidCallback? onFocus, + }) => + (super.noSuchMethod( + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + returnValue: _FakeExpensiveAndroidViewController_11( + this, + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + returnValueForMissingStub: _FakeExpensiveAndroidViewController_11( + this, + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + ) as _i4.ExpensiveAndroidViewController); + + @override + _i4.SurfaceAndroidViewController initSurfaceAndroidView({ + required int? id, + required String? viewType, + required _i3.TextDirection? layoutDirection, + dynamic creationParams, + _i4.MessageCodec? creationParamsCodec, + _i3.VoidCallback? onFocus, + }) => + (super.noSuchMethod( + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + returnValue: _FakeSurfaceAndroidViewController_12( + this, + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + returnValueForMissingStub: _FakeSurfaceAndroidViewController_12( + this, + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + ) as _i4.SurfaceAndroidViewController); +} From e2fb27e547d7708a9824bf0dca9e78509957dc30 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 18:28:55 -0400 Subject: [PATCH 42/76] on prepared test --- .../android/android_ad_display_container.dart | 11 +- .../android/ad_display_container_test.dart | 113 +++++++++++++++++- .../ad_display_container_test.mocks.dart | 92 ++++++++++---- 3 files changed, 186 insertions(+), 30 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 96b4da54e7b..65c9a1fbee8 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -203,10 +203,10 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { removeCallback: (_, ima.VideoAdPlayerCallback callback) { weakThis.target?._videoAdPlayerCallbacks.remove(callback); }, - loadAd: (_, ima.AdMediaInfo adMediaInfo, ima.AdPodInfo adPodInfo) { + loadAd: (_, ima.AdMediaInfo adMediaInfo, __) { weakThis.target?._loadedAdMediaInfo = adMediaInfo; }, - pauseAd: (_, ima.AdMediaInfo adMediaInfo) async { + pauseAd: (_, __) async { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { await container._mediaPlayer!.pause(); @@ -219,7 +219,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { weakThis.target?._videoView.setVideoUri(adMediaInfo.url); }, release: (_) {}, - stopAd: (_, ima.AdMediaInfo adMediaInfo) { + stopAd: (_, __) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { container._stopAdTracking(); @@ -239,7 +239,7 @@ final class AndroidAdsLoaderCreationParams required super.container, required super.onAdsLoaded, required super.onAdsLoadError, - InteractiveMediaAdsProxy? proxy, + @visibleForTesting InteractiveMediaAdsProxy? proxy, }) : _proxy = proxy ?? const InteractiveMediaAdsProxy(), super(); @@ -349,9 +349,10 @@ final class AndroidAdsLoader extends PlatformAdsLoader { /// Android implementation of [PlatformAdsManager]. class AndroidAdsManager extends PlatformAdsManager { /// Constructs an [AndroidAdsManager]. + @visibleForTesting AndroidAdsManager( ima.AdsManager manager, { - InteractiveMediaAdsProxy? proxy, + @visibleForTesting InteractiveMediaAdsProxy? proxy, }) : _manager = manager, _proxy = proxy ?? const InteractiveMediaAdsProxy(); diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.dart index c513490c25e..3a8a4871182 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.dart @@ -23,6 +23,7 @@ import 'ad_display_container_test.mocks.dart'; MockSpec(), MockSpec(), MockSpec(), + MockSpec(), MockSpec(), MockSpec(), MockSpec(), @@ -106,10 +107,12 @@ void main() { builder: (BuildContext context) => container.build(context), )); - (verify(mockAndroidViewController + final void Function(int) onPlatformCreatedCallback = verify( + mockAndroidViewController .addOnPlatformViewCreatedListener(captureAny)) - .captured[0] as void Function(int)) - .call(platformViewId); + .captured[0] as void Function(int); + + onPlatformCreatedCallback(platformViewId); await tester.pumpAndSettle(); }); @@ -180,7 +183,6 @@ void main() { ); final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); - loadAdCallback(MockVideoAdPlayer(), mockAdMediaInfo, MockAdPodInfo()); final MockVideoAdPlayerCallback mockPlayerCallback = @@ -262,7 +264,6 @@ void main() { ); final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); - loadAdCallback(MockVideoAdPlayer(), mockAdMediaInfo, MockAdPodInfo()); final MockVideoAdPlayerCallback mockPlayerCallback = @@ -273,5 +274,107 @@ void main() { verify(mockPlayerCallback.onError(mockAdMediaInfo)); }); + + test('play ad once when it is prepared', () async { + late final void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAdCallback; + + late final void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallbackCallback; + + late final Future Function( + ima.VideoView, + ima.MediaPlayer, + ) onPreparedCallback; + + const int adDuration = 100; + const int adProgress = 10; + + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + dynamic onError, + void Function( + ima.VideoView, + ima.MediaPlayer, + )? onPrepared, + dynamic onCompletion, + }) { + // VideoView.onPrepared returns void, but the implementation uses an + // async callback method. + onPreparedCallback = onPrepared! as Future Function( + ima.VideoView, + ima.MediaPlayer, + ); + final MockVideoView mockVideoView = MockVideoView(); + when(mockVideoView.getCurrentPosition()).thenAnswer( + (_) async => adProgress, + ); + return mockVideoView; + }, + createAdDisplayContainerImaSdkFactory: (_, __) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallback, + required void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) { + loadAdCallback = loadAd; + addCallbackCallback = addCallback; + return MockVideoAdPlayer(); + }, + newVideoProgressUpdate: ({ + required int currentTimeMs, + required int durationMs, + }) { + expect(currentTimeMs, adProgress); + expect(durationMs, adDuration); + return MockVideoProgressUpdate(); + }, + ); + + AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (_) {}, + imaProxy: imaProxy, + ), + ); + + final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); + loadAdCallback(MockVideoAdPlayer(), mockAdMediaInfo, MockAdPodInfo()); + + final MockVideoAdPlayerCallback mockPlayerCallback = + MockVideoAdPlayerCallback(); + addCallbackCallback(MockVideoAdPlayer(), mockPlayerCallback); + + final MockMediaPlayer mockMediaPlayer = MockMediaPlayer(); + when(mockMediaPlayer.getDuration()).thenAnswer((_) async => adDuration); + + await onPreparedCallback(MockVideoView(), mockMediaPlayer); + + verify(mockMediaPlayer.start()); + + // Ad progress is updated with a reoccurring timer, so this waits for + // at least one update. + await Future.delayed(const Duration(milliseconds: 300)); + verify(mockPlayerCallback.onAdProgress(mockAdMediaInfo, any)); + }); }); } diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart index c6eef600005..ef3f12b50b0 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.mocks.dart @@ -110,8 +110,9 @@ class _FakeVideoAdPlayerCallback_7 extends _i1.SmartFake ); } -class _FakeVideoView_8 extends _i1.SmartFake implements _i2.VideoView { - _FakeVideoView_8( +class _FakeVideoProgressUpdate_8 extends _i1.SmartFake + implements _i2.VideoProgressUpdate { + _FakeVideoProgressUpdate_8( Object parent, Invocation parentInvocation, ) : super( @@ -120,8 +121,8 @@ class _FakeVideoView_8 extends _i1.SmartFake implements _i2.VideoView { ); } -class _FakeOffset_9 extends _i1.SmartFake implements _i3.Offset { - _FakeOffset_9( +class _FakeVideoView_9 extends _i1.SmartFake implements _i2.VideoView { + _FakeVideoView_9( Object parent, Invocation parentInvocation, ) : super( @@ -130,8 +131,8 @@ class _FakeOffset_9 extends _i1.SmartFake implements _i3.Offset { ); } -class _FakeSize_10 extends _i1.SmartFake implements _i3.Size { - _FakeSize_10( +class _FakeOffset_10 extends _i1.SmartFake implements _i3.Offset { + _FakeOffset_10( Object parent, Invocation parentInvocation, ) : super( @@ -140,9 +141,19 @@ class _FakeSize_10 extends _i1.SmartFake implements _i3.Size { ); } -class _FakeExpensiveAndroidViewController_11 extends _i1.SmartFake +class _FakeSize_11 extends _i1.SmartFake implements _i3.Size { + _FakeSize_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeExpensiveAndroidViewController_12 extends _i1.SmartFake implements _i4.ExpensiveAndroidViewController { - _FakeExpensiveAndroidViewController_11( + _FakeExpensiveAndroidViewController_12( Object parent, Invocation parentInvocation, ) : super( @@ -151,9 +162,9 @@ class _FakeExpensiveAndroidViewController_11 extends _i1.SmartFake ); } -class _FakeSurfaceAndroidViewController_12 extends _i1.SmartFake +class _FakeSurfaceAndroidViewController_13 extends _i1.SmartFake implements _i4.SurfaceAndroidViewController { - _FakeSurfaceAndroidViewController_12( + _FakeSurfaceAndroidViewController_13( Object parent, Invocation parentInvocation, ) : super( @@ -822,6 +833,47 @@ class MockVideoAdPlayerCallback extends _i1.Mock ) as _i2.VideoAdPlayerCallback); } +/// A class which mocks [VideoProgressUpdate]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoProgressUpdate extends _i1.Mock + implements _i2.VideoProgressUpdate { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.VideoProgressUpdate pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoProgressUpdate_8( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoProgressUpdate_8( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoProgressUpdate); +} + /// A class which mocks [VideoView]. /// /// See the documentation for Mockito's code generation for more information. @@ -892,14 +944,14 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { #pigeon_copy, [], ), - returnValue: _FakeVideoView_8( + returnValue: _FakeVideoView_9( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeVideoView_8( + returnValueForMissingStub: _FakeVideoView_9( this, Invocation.method( #pigeon_copy, @@ -938,11 +990,11 @@ class MockSurfaceAndroidViewController extends _i1.Mock @override _i4.PointTransformer get pointTransformer => (super.noSuchMethod( Invocation.getter(#pointTransformer), - returnValue: (_i3.Offset position) => _FakeOffset_9( + returnValue: (_i3.Offset position) => _FakeOffset_10( this, Invocation.getter(#pointTransformer), ), - returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_9( + returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_10( this, Invocation.getter(#pointTransformer), ), @@ -1006,14 +1058,14 @@ class MockSurfaceAndroidViewController extends _i1.Mock #setSize, [size], ), - returnValue: _i6.Future<_i3.Size>.value(_FakeSize_10( + returnValue: _i6.Future<_i3.Size>.value(_FakeSize_11( this, Invocation.method( #setSize, [size], ), )), - returnValueForMissingStub: _i6.Future<_i3.Size>.value(_FakeSize_10( + returnValueForMissingStub: _i6.Future<_i3.Size>.value(_FakeSize_11( this, Invocation.method( #setSize, @@ -1126,7 +1178,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock #onFocus: onFocus, }, ), - returnValue: _FakeExpensiveAndroidViewController_11( + returnValue: _FakeExpensiveAndroidViewController_12( this, Invocation.method( #initExpensiveAndroidView, @@ -1141,7 +1193,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock }, ), ), - returnValueForMissingStub: _FakeExpensiveAndroidViewController_11( + returnValueForMissingStub: _FakeExpensiveAndroidViewController_12( this, Invocation.method( #initExpensiveAndroidView, @@ -1180,7 +1232,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock #onFocus: onFocus, }, ), - returnValue: _FakeSurfaceAndroidViewController_12( + returnValue: _FakeSurfaceAndroidViewController_13( this, Invocation.method( #initSurfaceAndroidView, @@ -1195,7 +1247,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock }, ), ), - returnValueForMissingStub: _FakeSurfaceAndroidViewController_12( + returnValueForMissingStub: _FakeSurfaceAndroidViewController_13( this, Invocation.method( #initSurfaceAndroidView, From 48fb4de375fa9af4fc18e3c40ed0989e7b9b6266 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 18:48:32 -0400 Subject: [PATCH 43/76] pause ad and play ad tests --- .../android/ad_display_container_test.dart | 146 +++++++++++++++++- 1 file changed, 142 insertions(+), 4 deletions(-) diff --git a/packages/interactive_media_ads/test/android/ad_display_container_test.dart b/packages/interactive_media_ads/test/android/ad_display_container_test.dart index 3a8a4871182..83694918bf3 100644 --- a/packages/interactive_media_ads/test/android/ad_display_container_test.dart +++ b/packages/interactive_media_ads/test/android/ad_display_container_test.dart @@ -299,10 +299,7 @@ void main() { newFrameLayout: () => MockFrameLayout(), newVideoView: ({ dynamic onError, - void Function( - ima.VideoView, - ima.MediaPlayer, - )? onPrepared, + dynamic onPrepared, dynamic onCompletion, }) { // VideoView.onPrepared returns void, but the implementation uses an @@ -376,5 +373,146 @@ void main() { await Future.delayed(const Duration(milliseconds: 300)); verify(mockPlayerCallback.onAdProgress(mockAdMediaInfo, any)); }); + + test('pause ad', () async { + late final void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAdCallback; + + late final Future Function( + ima.VideoView, + ima.MediaPlayer, + ) onPreparedCallback; + + late final Future Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ) pauseAdCallback; + + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + dynamic onError, + void Function( + ima.VideoView, + ima.MediaPlayer, + )? onPrepared, + dynamic onCompletion, + }) { + // VideoView.onPrepared returns void, but the implementation uses an + // async callback method. + onPreparedCallback = onPrepared! as Future Function( + ima.VideoView, + ima.MediaPlayer, + ); + final MockVideoView mockVideoView = MockVideoView(); + when(mockVideoView.getCurrentPosition()).thenAnswer((_) async => 10); + return mockVideoView; + }, + createAdDisplayContainerImaSdkFactory: (_, __) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required dynamic addCallback, + required void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ima.AdPodInfo, + ) loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) { + loadAdCallback = loadAd; + // VideoAdPlayer.pauseAd returns void, but the implementation uses an + // async callback method. + pauseAdCallback = pauseAd as Future Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ); + return MockVideoAdPlayer(); + }, + newVideoProgressUpdate: ({ + required int currentTimeMs, + required int durationMs, + }) { + return MockVideoProgressUpdate(); + }, + ); + + AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (_) {}, + imaProxy: imaProxy, + ), + ); + + final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); + loadAdCallback(MockVideoAdPlayer(), mockAdMediaInfo, MockAdPodInfo()); + + final MockMediaPlayer mockMediaPlayer = MockMediaPlayer(); + when(mockMediaPlayer.getDuration()).thenAnswer((_) async => 100); + + await onPreparedCallback(MockVideoView(), mockMediaPlayer); + + await pauseAdCallback(MockVideoAdPlayer(), mockAdMediaInfo); + + verify(mockMediaPlayer.pause()); + }); + + test('play ad', () async { + late final void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ) playAdCallback; + + final MockVideoView mockVideoView = MockVideoView(); + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + dynamic onError, + dynamic onPrepared, + dynamic onCompletion, + }) { + return mockVideoView; + }, + createAdDisplayContainerImaSdkFactory: (_, __) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required dynamic addCallback, + required dynamic loadAd, + required dynamic pauseAd, + required void Function( + ima.VideoAdPlayer, + ima.AdMediaInfo, + ) playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) { + playAdCallback = playAd; + return MockVideoAdPlayer(); + }, + ); + + AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (_) {}, + imaProxy: imaProxy, + ), + ); + + const String videoUrl = 'url'; + final ima.AdMediaInfo mockAdMediaInfo = MockAdMediaInfo(); + when(mockAdMediaInfo.url).thenReturn(videoUrl); + playAdCallback(MockVideoAdPlayer(), mockAdMediaInfo); + + verify(mockVideoView.setVideoUri(videoUrl)); + }); }); } From 0bbba9a65d0a60597788313f7077bd471603b2b1 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 21:55:17 -0400 Subject: [PATCH 44/76] assert and tests --- .../ProxyApiRegistrar.kt | 2 + .../android/android_ad_display_container.dart | 9 +- .../test/android/ads_loader_test.dart | 146 +++ .../test/android/ads_loader_test.mocks.dart | 958 ++++++++++++++++++ 4 files changed, 1113 insertions(+), 2 deletions(-) create mode 100644 packages/interactive_media_ads/test/android/ads_loader_test.dart create mode 100644 packages/interactive_media_ads/test/android/ads_loader_test.mocks.dart 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 37c920b8564..a31d2791730 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 @@ -12,6 +12,8 @@ import io.flutter.plugin.common.BinaryMessenger open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) : PigeonProxyApiRegistrar(binaryMessenger) { + // Added to be overriden for tests. The test implementation calls `callback` immediately, instead + // of waiting for the main thread to run it. internal open fun runOnMainThread(callback: Runnable) { Handler(Looper.getMainLooper()).post { callback.run() } } diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 65c9a1fbee8..4e670bb784a 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -75,7 +75,7 @@ final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { // Handles ad playback callbacks from the IMA SDK. late final ima.VideoAdPlayer _videoAdPlayer; - late final ima.AdDisplayContainer _adDisplayContainer; + ima.AdDisplayContainer? _adDisplayContainer; // Currently loaded ad. ima.AdMediaInfo? _loadedAdMediaInfo; @@ -265,6 +265,11 @@ final class AndroidAdsLoader extends PlatformAdsLoader { /// Constructs an [AndroidAdsLoader]. AndroidAdsLoader(super.params) : assert(params.container is AndroidAdDisplayContainer), + assert( + (params.container as AndroidAdDisplayContainer)._adDisplayContainer != + null, + 'Ensure the AdDisplayContainer has been added to the Widget tree before creating an AdsLoader.', + ), super.implementation() { _adsLoaderFuture = _createAdsLoader(); } @@ -309,7 +314,7 @@ final class AndroidAdsLoader extends PlatformAdsLoader { .instanceImaSdkFactory() .createAdsLoader( settings, - (params.container as AndroidAdDisplayContainer)._adDisplayContainer, + (params.container as AndroidAdDisplayContainer)._adDisplayContainer!, ); _addListeners(WeakReference(this), adsLoader); diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.dart b/packages/interactive_media_ads/test/android/ads_loader_test.dart new file mode 100644 index 00000000000..dd18be131af --- /dev/null +++ b/packages/interactive_media_ads/test/android/ads_loader_test.dart @@ -0,0 +1,146 @@ +import 'dart:async'; + +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as ima; +import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart'; +import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart'; +import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'ads_loader_test.mocks.dart'; + +@GenerateNiceMocks(>[ + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), +]) +void main() { + group('AndroidAdsLoader', () { + testWidgets('instantiate AndroidAdsLoader', (WidgetTester tester) async { + final AndroidAdDisplayContainer container = + await _pumpAdDisplayContainer(tester); + + AndroidAdsLoader( + AndroidAdsLoaderCreationParams( + container: container, + onAdsLoaded: (PlatformOnAdsLoadedData data) {}, + onAdsLoadError: (AdsLoadErrorData data) {}, + ), + ); + }); + + testWidgets('contentComplete', (WidgetTester tester) async { + final MockVideoAdPlayerCallback mockAdPlayerCallback = + MockVideoAdPlayerCallback(); + final AndroidAdDisplayContainer container = await _pumpAdDisplayContainer( + tester, + mockAdPlayerCallback: mockAdPlayerCallback); + + final AndroidAdsLoader loader = AndroidAdsLoader( + AndroidAdsLoaderCreationParams( + container: container, + onAdsLoaded: (PlatformOnAdsLoadedData data) {}, + onAdsLoadError: (AdsLoadErrorData data) {}, + ), + ); + + await loader.contentComplete(); + verify(mockAdPlayerCallback.onContentComplete()); + }); + }); +} + +Future _pumpAdDisplayContainer( + WidgetTester tester, { + MockVideoAdPlayerCallback? mockAdPlayerCallback, +}) async { + final InteractiveMediaAdsProxy imaProxy = InteractiveMediaAdsProxy( + newFrameLayout: () => MockFrameLayout(), + newVideoView: ({ + required dynamic onError, + dynamic onPrepared, + dynamic onCompletion, + }) => + MockVideoView(), + createAdDisplayContainerImaSdkFactory: ( + _, + __, + ) async { + return MockAdDisplayContainer(); + }, + newVideoAdPlayer: ({ + required void Function( + ima.VideoAdPlayer, + ima.VideoAdPlayerCallback, + ) addCallback, + required dynamic loadAd, + required dynamic pauseAd, + required dynamic playAd, + required dynamic release, + required dynamic removeCallback, + required dynamic stopAd, + }) { + if (mockAdPlayerCallback != null) { + addCallback(MockVideoAdPlayer(), mockAdPlayerCallback); + } + return MockVideoAdPlayer(); + }, + ); + + final MockPlatformViewsServiceProxy mockPlatformViewsProxy = + MockPlatformViewsServiceProxy(); + final MockSurfaceAndroidViewController mockAndroidViewController = + MockSurfaceAndroidViewController(); + + late final int platformViewId; + when( + mockPlatformViewsProxy.initSurfaceAndroidView( + id: anyNamed('id'), + viewType: anyNamed('viewType'), + layoutDirection: anyNamed('layoutDirection'), + creationParams: anyNamed('creationParams'), + creationParamsCodec: anyNamed('creationParamsCodec'), + onFocus: anyNamed('onFocus'), + ), + ).thenAnswer((Invocation invocation) { + platformViewId = invocation.namedArguments[const Symbol('id')] as int; + return mockAndroidViewController; + }); + + final Completer adDisplayContainerCompleter = + Completer(); + + final AndroidAdDisplayContainer container = AndroidAdDisplayContainer( + AndroidAdDisplayContainerCreationParams( + onContainerAdded: (PlatformAdDisplayContainer container) { + adDisplayContainerCompleter.complete( + container as AndroidAdDisplayContainer, + ); + }, + platformViewsProxy: mockPlatformViewsProxy, + imaProxy: imaProxy, + ), + ); + + await tester.pumpWidget(Builder( + builder: (BuildContext context) => container.build(context), + )); + + final void Function(int) onPlatformCreatedCallback = verify( + mockAndroidViewController + .addOnPlatformViewCreatedListener(captureAny)) + .captured[0] as void Function(int); + + onPlatformCreatedCallback(platformViewId); + + return adDisplayContainerCompleter.future; +} 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 new file mode 100644 index 00000000000..7484889bd49 --- /dev/null +++ b/packages/interactive_media_ads/test/android/ads_loader_test.mocks.dart @@ -0,0 +1,958 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in interactive_media_ads/test/android/ads_loader_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; +import 'dart:ui' as _i3; + +import 'package:flutter/services.dart' as _i4; +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as _i2; +import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart' + as _i6; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePigeonInstanceManager_0 extends _i1.SmartFake + implements _i2.PigeonInstanceManager { + _FakePigeonInstanceManager_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdDisplayContainer_1 extends _i1.SmartFake + implements _i2.AdDisplayContainer { + _FakeAdDisplayContainer_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFrameLayout_2 extends _i1.SmartFake implements _i2.FrameLayout { + _FakeFrameLayout_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoAdPlayer_3 extends _i1.SmartFake implements _i2.VideoAdPlayer { + _FakeVideoAdPlayer_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoAdPlayerCallback_4 extends _i1.SmartFake + implements _i2.VideoAdPlayerCallback { + _FakeVideoAdPlayerCallback_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoView_5 extends _i1.SmartFake implements _i2.VideoView { + _FakeVideoView_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeOffset_6 extends _i1.SmartFake implements _i3.Offset { + _FakeOffset_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSize_7 extends _i1.SmartFake implements _i3.Size { + _FakeSize_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeExpensiveAndroidViewController_8 extends _i1.SmartFake + implements _i4.ExpensiveAndroidViewController { + _FakeExpensiveAndroidViewController_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeSurfaceAndroidViewController_9 extends _i1.SmartFake + implements _i4.SurfaceAndroidViewController { + _FakeSurfaceAndroidViewController_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [AdDisplayContainer]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdDisplayContainer extends _i1.Mock + implements _i2.AdDisplayContainer { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdDisplayContainer pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdDisplayContainer_1( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdDisplayContainer_1( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdDisplayContainer); +} + +/// A class which mocks [FrameLayout]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.FrameLayout pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeFrameLayout_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeFrameLayout_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.FrameLayout); + + @override + _i5.Future addView(_i2.View? view) => (super.noSuchMethod( + Invocation.method( + #addView, + [view], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [VideoAdPlayer]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { + @override + void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + ) get addCallback => (super.noSuchMethod( + Invocation.getter(#addCallback), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + _i2.AdPodInfo, + ) get loadAd => (super.noSuchMethod( + Invocation.getter(#loadAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + _i2.AdPodInfo adPodInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + _i2.AdPodInfo adPodInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + _i2.AdPodInfo, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + ) get pauseAd => (super.noSuchMethod( + Invocation.getter(#pauseAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + ) get playAd => (super.noSuchMethod( + Invocation.getter(#playAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + )); + + @override + void Function(_i2.VideoAdPlayer) get release => (super.noSuchMethod( + Invocation.getter(#release), + returnValue: (_i2.VideoAdPlayer pigeon_instance) {}, + returnValueForMissingStub: (_i2.VideoAdPlayer pigeon_instance) {}, + ) as void Function(_i2.VideoAdPlayer)); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + ) get removeCallback => (super.noSuchMethod( + Invocation.getter(#removeCallback), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.VideoAdPlayerCallback callback, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.VideoAdPlayerCallback, + )); + + @override + void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + ) get stopAd => (super.noSuchMethod( + Invocation.getter(#stopAd), + returnValue: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + returnValueForMissingStub: ( + _i2.VideoAdPlayer pigeon_instance, + _i2.AdMediaInfo adMediaInfo, + ) {}, + ) as void Function( + _i2.VideoAdPlayer, + _i2.AdMediaInfo, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future setVolume(int? value) => (super.noSuchMethod( + Invocation.method( + #setVolume, + [value], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setAdProgress(_i2.VideoProgressUpdate? progress) => + (super.noSuchMethod( + Invocation.method( + #setAdProgress, + [progress], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i2.VideoAdPlayer pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoAdPlayer_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoAdPlayer_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoAdPlayer); +} + +/// A class which mocks [VideoAdPlayerCallback]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoAdPlayerCallback extends _i1.Mock + implements _i2.VideoAdPlayerCallback { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future onAdProgress( + _i2.AdMediaInfo? adMediaInfo, + _i2.VideoProgressUpdate? videoProgressUpdate, + ) => + (super.noSuchMethod( + Invocation.method( + #onAdProgress, + [ + adMediaInfo, + videoProgressUpdate, + ], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onBuffering(_i2.AdMediaInfo? adMediaInfo) => + (super.noSuchMethod( + Invocation.method( + #onBuffering, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onContentComplete() => (super.noSuchMethod( + Invocation.method( + #onContentComplete, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onEnded(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onEnded, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onError(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onError, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onLoaded(_i2.AdMediaInfo? adMediaInfo) => + (super.noSuchMethod( + Invocation.method( + #onLoaded, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onPause(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onPause, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onPlay(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + Invocation.method( + #onPlay, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onResume(_i2.AdMediaInfo? adMediaInfo) => + (super.noSuchMethod( + Invocation.method( + #onResume, + [adMediaInfo], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future onVolumeChanged( + _i2.AdMediaInfo? adMediaInfo, + int? percentage, + ) => + (super.noSuchMethod( + Invocation.method( + #onVolumeChanged, + [ + adMediaInfo, + percentage, + ], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i2.VideoAdPlayerCallback pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoAdPlayerCallback_4( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoAdPlayerCallback_4( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoAdPlayerCallback); +} + +/// A class which mocks [VideoView]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockVideoView extends _i1.Mock implements _i2.VideoView { + @override + void Function( + _i2.VideoView, + _i2.MediaPlayer, + int, + int, + ) get onError => (super.noSuchMethod( + Invocation.getter(#onError), + returnValue: ( + _i2.VideoView pigeon_instance, + _i2.MediaPlayer player, + int what, + int extra, + ) {}, + returnValueForMissingStub: ( + _i2.VideoView pigeon_instance, + _i2.MediaPlayer player, + int what, + int extra, + ) {}, + ) as void Function( + _i2.VideoView, + _i2.MediaPlayer, + int, + int, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future setVideoUri(String? uri) => (super.noSuchMethod( + Invocation.method( + #setVideoUri, + [uri], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future getCurrentPosition() => (super.noSuchMethod( + Invocation.method( + #getCurrentPosition, + [], + ), + returnValue: _i5.Future.value(0), + returnValueForMissingStub: _i5.Future.value(0), + ) as _i5.Future); + + @override + _i2.VideoView pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeVideoView_5( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeVideoView_5( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.VideoView); +} + +/// A class which mocks [SurfaceAndroidViewController]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockSurfaceAndroidViewController extends _i1.Mock + implements _i4.SurfaceAndroidViewController { + @override + bool get requiresViewComposition => (super.noSuchMethod( + Invocation.getter(#requiresViewComposition), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + int get viewId => (super.noSuchMethod( + Invocation.getter(#viewId), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + bool get awaitingCreation => (super.noSuchMethod( + Invocation.getter(#awaitingCreation), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + _i4.PointTransformer get pointTransformer => (super.noSuchMethod( + Invocation.getter(#pointTransformer), + returnValue: (_i3.Offset position) => _FakeOffset_6( + this, + Invocation.getter(#pointTransformer), + ), + returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_6( + this, + Invocation.getter(#pointTransformer), + ), + ) as _i4.PointTransformer); + + @override + set pointTransformer(_i4.PointTransformer? transformer) => super.noSuchMethod( + Invocation.setter( + #pointTransformer, + transformer, + ), + returnValueForMissingStub: null, + ); + + @override + bool get isCreated => (super.noSuchMethod( + Invocation.getter(#isCreated), + returnValue: false, + returnValueForMissingStub: false, + ) as bool); + + @override + List<_i4.PlatformViewCreatedCallback> get createdCallbacks => + (super.noSuchMethod( + Invocation.getter(#createdCallbacks), + returnValue: <_i4.PlatformViewCreatedCallback>[], + returnValueForMissingStub: <_i4.PlatformViewCreatedCallback>[], + ) as List<_i4.PlatformViewCreatedCallback>); + + @override + _i5.Future setOffset(_i3.Offset? off) => (super.noSuchMethod( + Invocation.method( + #setOffset, + [off], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future create({ + _i3.Size? size, + _i3.Offset? position, + }) => + (super.noSuchMethod( + Invocation.method( + #create, + [], + { + #size: size, + #position: position, + }, + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future<_i3.Size> setSize(_i3.Size? size) => (super.noSuchMethod( + Invocation.method( + #setSize, + [size], + ), + returnValue: _i5.Future<_i3.Size>.value(_FakeSize_7( + this, + Invocation.method( + #setSize, + [size], + ), + )), + returnValueForMissingStub: _i5.Future<_i3.Size>.value(_FakeSize_7( + this, + Invocation.method( + #setSize, + [size], + ), + )), + ) as _i5.Future<_i3.Size>); + + @override + _i5.Future sendMotionEvent(_i4.AndroidMotionEvent? event) => + (super.noSuchMethod( + Invocation.method( + #sendMotionEvent, + [event], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + void addOnPlatformViewCreatedListener( + _i4.PlatformViewCreatedCallback? listener) => + super.noSuchMethod( + Invocation.method( + #addOnPlatformViewCreatedListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + void removeOnPlatformViewCreatedListener( + _i4.PlatformViewCreatedCallback? listener) => + super.noSuchMethod( + Invocation.method( + #removeOnPlatformViewCreatedListener, + [listener], + ), + returnValueForMissingStub: null, + ); + + @override + _i5.Future setLayoutDirection(_i3.TextDirection? layoutDirection) => + (super.noSuchMethod( + Invocation.method( + #setLayoutDirection, + [layoutDirection], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future dispatchPointerEvent(_i4.PointerEvent? event) => + (super.noSuchMethod( + Invocation.method( + #dispatchPointerEvent, + [event], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future clearFocus() => (super.noSuchMethod( + Invocation.method( + #clearFocus, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future dispose() => (super.noSuchMethod( + Invocation.method( + #dispose, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [PlatformViewsServiceProxy]. +/// +/// See the documentation for Mockito's code generation for more information. +// ignore: must_be_immutable +class MockPlatformViewsServiceProxy extends _i1.Mock + implements _i6.PlatformViewsServiceProxy { + @override + _i4.ExpensiveAndroidViewController initExpensiveAndroidView({ + required int? id, + required String? viewType, + required _i3.TextDirection? layoutDirection, + dynamic creationParams, + _i4.MessageCodec? creationParamsCodec, + _i3.VoidCallback? onFocus, + }) => + (super.noSuchMethod( + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + returnValue: _FakeExpensiveAndroidViewController_8( + this, + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + returnValueForMissingStub: _FakeExpensiveAndroidViewController_8( + this, + Invocation.method( + #initExpensiveAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + ) as _i4.ExpensiveAndroidViewController); + + @override + _i4.SurfaceAndroidViewController initSurfaceAndroidView({ + required int? id, + required String? viewType, + required _i3.TextDirection? layoutDirection, + dynamic creationParams, + _i4.MessageCodec? creationParamsCodec, + _i3.VoidCallback? onFocus, + }) => + (super.noSuchMethod( + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + returnValue: _FakeSurfaceAndroidViewController_9( + this, + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + returnValueForMissingStub: _FakeSurfaceAndroidViewController_9( + this, + Invocation.method( + #initSurfaceAndroidView, + [], + { + #id: id, + #viewType: viewType, + #layoutDirection: layoutDirection, + #creationParams: creationParams, + #creationParamsCodec: creationParamsCodec, + #onFocus: onFocus, + }, + ), + ), + ) as _i4.SurfaceAndroidViewController); +} From 1ce77c10659148e9d4c1d6b9c08831787291ada3 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 22:40:14 -0400 Subject: [PATCH 45/76] request ads and onAdsLoaded test --- .../android/android_ad_display_container.dart | 23 +- .../test/android/ads_loader_test.dart | 106 +++ .../test/android/ads_loader_test.mocks.dart | 816 +++++++++++++++++- 3 files changed, 897 insertions(+), 48 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 4e670bb784a..74e1696fa87 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -301,21 +301,21 @@ final class AndroidAdsLoader extends PlatformAdsLoader { final ima.AdsLoader adsLoader = await _adsLoaderFuture; final ima.AdsRequest androidRequest = await _sdkFactory.createAdsRequest(); - unawaited(androidRequest.setAdTagUrl(request.adTagUrl)); - await adsLoader.requestAds(androidRequest); + await Future.wait(>[ + androidRequest.setAdTagUrl(request.adTagUrl), + adsLoader.requestAds(androidRequest), + ]); } Future _createAdsLoader() async { final ima.ImaSdkSettings settings = await _sdkFactory.createImaSdkSettings(); - final ima.AdsLoader adsLoader = await _androidParams._proxy - .instanceImaSdkFactory() - .createAdsLoader( - settings, - (params.container as AndroidAdDisplayContainer)._adDisplayContainer!, - ); + final ima.AdsLoader adsLoader = await _sdkFactory.createAdsLoader( + settings, + (params.container as AndroidAdDisplayContainer)._adDisplayContainer!, + ); _addListeners(WeakReference(this), adsLoader); @@ -331,7 +331,12 @@ final class AndroidAdsLoader extends PlatformAdsLoader { adsLoader.addAdsLoadedListener(proxy.newAdsLoadedListener( onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { weakThis.target?.params.onAdsLoaded( - PlatformOnAdsLoadedData(manager: AndroidAdsManager(event.manager)), + PlatformOnAdsLoadedData( + manager: AndroidAdsManager( + event.manager, + proxy: weakThis.target?._androidParams._proxy, + ), + ), ); }, )); diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.dart b/packages/interactive_media_ads/test/android/ads_loader_test.dart index dd18be131af..bdc1be4c063 100644 --- a/packages/interactive_media_ads/test/android/ads_loader_test.dart +++ b/packages/interactive_media_ads/test/android/ads_loader_test.dart @@ -16,7 +16,16 @@ import 'ads_loader_test.mocks.dart'; @GenerateNiceMocks(>[ MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), MockSpec(), + MockSpec(), + MockSpec(), MockSpec(), MockSpec(), MockSpec(), @@ -56,6 +65,103 @@ void main() { await loader.contentComplete(); verify(mockAdPlayerCallback.onContentComplete()); }); + + testWidgets('requestAds', (WidgetTester tester) async { + final AndroidAdDisplayContainer container = + await _pumpAdDisplayContainer(tester); + + final MockImaSdkFactory mockSdkFactory = MockImaSdkFactory(); + when(mockSdkFactory.createImaSdkSettings()).thenAnswer((_) async { + return MockImaSdkSettings(); + }); + + final MockAdsLoader mockAdsLoader = MockAdsLoader(); + when(mockSdkFactory.createAdsLoader(any, any)).thenAnswer((_) async { + return mockAdsLoader; + }); + + final MockAdsRequest mockAdsRequest = MockAdsRequest(); + when(mockSdkFactory.createAdsRequest()).thenAnswer((_) async { + return mockAdsRequest; + }); + + final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy( + instanceImaSdkFactory: () => mockSdkFactory, + ); + + final AndroidAdsLoader adsLoader = AndroidAdsLoader( + AndroidAdsLoaderCreationParams( + container: container, + onAdsLoaded: (PlatformOnAdsLoadedData data) {}, + onAdsLoadError: (AdsLoadErrorData data) {}, + proxy: proxy, + ), + ); + + await adsLoader.requestAds(AdsRequest(adTagUrl: 'url')); + + verifyInOrder(>[ + mockAdsRequest.setAdTagUrl('url'), + mockAdsLoader.requestAds(mockAdsRequest), + ]); + }); + + testWidgets('onAdsLoaded', (WidgetTester tester) async { + final AndroidAdDisplayContainer container = + await _pumpAdDisplayContainer(tester); + + final MockImaSdkFactory mockSdkFactory = MockImaSdkFactory(); + when(mockSdkFactory.createImaSdkSettings()).thenAnswer((_) async { + return MockImaSdkSettings(); + }); + + final MockAdsLoader mockAdsLoader = MockAdsLoader(); + final Completer addEventListenerCompleter = Completer(); + when(mockAdsLoader.addAdsLoadedListener(any)).thenAnswer((_) async { + addEventListenerCompleter.complete(); + }); + + when(mockSdkFactory.createAdsLoader(any, any)).thenAnswer((_) async { + return mockAdsLoader; + }); + + late final void Function( + ima.AdsLoadedListener, + ima.AdsManagerLoadedEvent, + ) onAdsManagerLoadedCallback; + + final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy( + instanceImaSdkFactory: () => mockSdkFactory, + newAdsLoadedListener: ({ + required void Function( + ima.AdsLoadedListener, + ima.AdsManagerLoadedEvent, + ) onAdsManagerLoaded, + }) { + onAdsManagerLoadedCallback = onAdsManagerLoaded; + return MockAdsLoadedListener(); + }, + newAdErrorListener: ({required dynamic onAdError}) { + return MockAdErrorListener(); + }, + ); + + AndroidAdsLoader( + AndroidAdsLoaderCreationParams( + container: container, + onAdsLoaded: expectAsync1((_) {}), + onAdsLoadError: (AdsLoadErrorData data) {}, + proxy: proxy, + ), + ); + + final MockAdsManagerLoadedEvent mockLoadedEvent = MockAdsManagerLoadedEvent(); + when(mockLoadedEvent.manager).thenReturn(MockAdsManager()); + + await addEventListenerCompleter.future; + + onAdsManagerLoadedCallback(MockAdsLoadedListener(), mockLoadedEvent); + }); }); } 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 7484889bd49..fec70b2d872 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 @@ -48,8 +48,8 @@ class _FakeAdDisplayContainer_1 extends _i1.SmartFake ); } -class _FakeFrameLayout_2 extends _i1.SmartFake implements _i2.FrameLayout { - _FakeFrameLayout_2( +class _FakeAdError_2 extends _i1.SmartFake implements _i2.AdError { + _FakeAdError_2( Object parent, Invocation parentInvocation, ) : super( @@ -58,8 +58,8 @@ class _FakeFrameLayout_2 extends _i1.SmartFake implements _i2.FrameLayout { ); } -class _FakeVideoAdPlayer_3 extends _i1.SmartFake implements _i2.VideoAdPlayer { - _FakeVideoAdPlayer_3( +class _FakeAdErrorEvent_3 extends _i1.SmartFake implements _i2.AdErrorEvent { + _FakeAdErrorEvent_3( Object parent, Invocation parentInvocation, ) : super( @@ -68,9 +68,113 @@ class _FakeVideoAdPlayer_3 extends _i1.SmartFake implements _i2.VideoAdPlayer { ); } -class _FakeVideoAdPlayerCallback_4 extends _i1.SmartFake +class _FakeAdErrorListener_4 extends _i1.SmartFake + implements _i2.AdErrorListener { + _FakeAdErrorListener_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdsLoadedListener_5 extends _i1.SmartFake + implements _i2.AdsLoadedListener { + _FakeAdsLoadedListener_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdsManager_6 extends _i1.SmartFake implements _i2.AdsManager { + _FakeAdsManager_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdsManagerLoadedEvent_7 extends _i1.SmartFake + implements _i2.AdsManagerLoadedEvent { + _FakeAdsManagerLoadedEvent_7( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdsLoader_8 extends _i1.SmartFake implements _i2.AdsLoader { + _FakeAdsLoader_8( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdsRequest_9 extends _i1.SmartFake implements _i2.AdsRequest { + _FakeAdsRequest_9( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeFrameLayout_10 extends _i1.SmartFake implements _i2.FrameLayout { + _FakeFrameLayout_10( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeImaSdkSettings_11 extends _i1.SmartFake + implements _i2.ImaSdkSettings { + _FakeImaSdkSettings_11( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeImaSdkFactory_12 extends _i1.SmartFake implements _i2.ImaSdkFactory { + _FakeImaSdkFactory_12( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoAdPlayer_13 extends _i1.SmartFake implements _i2.VideoAdPlayer { + _FakeVideoAdPlayer_13( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeVideoAdPlayerCallback_14 extends _i1.SmartFake implements _i2.VideoAdPlayerCallback { - _FakeVideoAdPlayerCallback_4( + _FakeVideoAdPlayerCallback_14( Object parent, Invocation parentInvocation, ) : super( @@ -79,8 +183,8 @@ class _FakeVideoAdPlayerCallback_4 extends _i1.SmartFake ); } -class _FakeVideoView_5 extends _i1.SmartFake implements _i2.VideoView { - _FakeVideoView_5( +class _FakeVideoView_15 extends _i1.SmartFake implements _i2.VideoView { + _FakeVideoView_15( Object parent, Invocation parentInvocation, ) : super( @@ -89,8 +193,8 @@ class _FakeVideoView_5 extends _i1.SmartFake implements _i2.VideoView { ); } -class _FakeOffset_6 extends _i1.SmartFake implements _i3.Offset { - _FakeOffset_6( +class _FakeOffset_16 extends _i1.SmartFake implements _i3.Offset { + _FakeOffset_16( Object parent, Invocation parentInvocation, ) : super( @@ -99,8 +203,8 @@ class _FakeOffset_6 extends _i1.SmartFake implements _i3.Offset { ); } -class _FakeSize_7 extends _i1.SmartFake implements _i3.Size { - _FakeSize_7( +class _FakeSize_17 extends _i1.SmartFake implements _i3.Size { + _FakeSize_17( Object parent, Invocation parentInvocation, ) : super( @@ -109,9 +213,9 @@ class _FakeSize_7 extends _i1.SmartFake implements _i3.Size { ); } -class _FakeExpensiveAndroidViewController_8 extends _i1.SmartFake +class _FakeExpensiveAndroidViewController_18 extends _i1.SmartFake implements _i4.ExpensiveAndroidViewController { - _FakeExpensiveAndroidViewController_8( + _FakeExpensiveAndroidViewController_18( Object parent, Invocation parentInvocation, ) : super( @@ -120,9 +224,9 @@ class _FakeExpensiveAndroidViewController_8 extends _i1.SmartFake ); } -class _FakeSurfaceAndroidViewController_9 extends _i1.SmartFake +class _FakeSurfaceAndroidViewController_19 extends _i1.SmartFake implements _i4.SurfaceAndroidViewController { - _FakeSurfaceAndroidViewController_9( + _FakeSurfaceAndroidViewController_19( Object parent, Invocation parentInvocation, ) : super( @@ -172,10 +276,23 @@ class MockAdDisplayContainer extends _i1.Mock ) as _i2.AdDisplayContainer); } -/// A class which mocks [FrameLayout]. +/// A class which mocks [AdErrorEvent]. /// /// See the documentation for Mockito's code generation for more information. -class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { +class MockAdErrorEvent extends _i1.Mock implements _i2.AdErrorEvent { + @override + _i2.AdError get error => (super.noSuchMethod( + Invocation.getter(#error), + returnValue: _FakeAdError_2( + this, + Invocation.getter(#error), + ), + returnValueForMissingStub: _FakeAdError_2( + this, + Invocation.getter(#error), + ), + ) as _i2.AdError); + @override _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( Invocation.getter(#pigeon_instanceManager), @@ -190,36 +307,657 @@ class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { ) as _i2.PigeonInstanceManager); @override - _i2.FrameLayout pigeon_copy() => (super.noSuchMethod( + _i2.AdErrorEvent pigeon_copy() => (super.noSuchMethod( Invocation.method( #pigeon_copy, [], ), - returnValue: _FakeFrameLayout_2( + returnValue: _FakeAdErrorEvent_3( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeFrameLayout_2( + returnValueForMissingStub: _FakeAdErrorEvent_3( this, Invocation.method( #pigeon_copy, [], ), ), - ) as _i2.FrameLayout); + ) as _i2.AdErrorEvent); +} +/// A class which mocks [AdErrorListener]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdErrorListener extends _i1.Mock implements _i2.AdErrorListener { @override - _i5.Future addView(_i2.View? view) => (super.noSuchMethod( + void Function( + _i2.AdErrorListener, + _i2.AdErrorEvent, + ) get onAdError => (super.noSuchMethod( + Invocation.getter(#onAdError), + returnValue: ( + _i2.AdErrorListener pigeon_instance, + _i2.AdErrorEvent event, + ) {}, + returnValueForMissingStub: ( + _i2.AdErrorListener pigeon_instance, + _i2.AdErrorEvent event, + ) {}, + ) as void Function( + _i2.AdErrorListener, + _i2.AdErrorEvent, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdErrorListener pigeon_copy() => (super.noSuchMethod( Invocation.method( - #addView, - [view], + #pigeon_copy, + [], + ), + returnValue: _FakeAdErrorListener_4( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdErrorListener_4( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdErrorListener); +} + +/// A class which mocks [AdsLoadedListener]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdsLoadedListener extends _i1.Mock implements _i2.AdsLoadedListener { + @override + void Function( + _i2.AdsLoadedListener, + _i2.AdsManagerLoadedEvent, + ) get onAdsManagerLoaded => (super.noSuchMethod( + Invocation.getter(#onAdsManagerLoaded), + returnValue: ( + _i2.AdsLoadedListener pigeon_instance, + _i2.AdsManagerLoadedEvent event, + ) {}, + returnValueForMissingStub: ( + _i2.AdsLoadedListener pigeon_instance, + _i2.AdsManagerLoadedEvent event, + ) {}, + ) as void Function( + _i2.AdsLoadedListener, + _i2.AdsManagerLoadedEvent, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdsLoadedListener pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdsLoadedListener_5( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdsLoadedListener_5( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdsLoadedListener); +} + +/// A class which mocks [AdsManager]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdsManager extends _i1.Mock implements _i2.AdsManager { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future discardAdBreak() => (super.noSuchMethod( + Invocation.method( + #discardAdBreak, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future pause() => (super.noSuchMethod( + Invocation.method( + #pause, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future start() => (super.noSuchMethod( + Invocation.method( + #start, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i2.AdsManager pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdsManager_6( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdsManager_6( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdsManager); + + @override + _i5.Future addAdErrorListener(_i2.AdErrorListener? errorListener) => + (super.noSuchMethod( + Invocation.method( + #addAdErrorListener, + [errorListener], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future addAdEventListener(_i2.AdEventListener? adEventListener) => + (super.noSuchMethod( + Invocation.method( + #addAdEventListener, + [adEventListener], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future destroy() => (super.noSuchMethod( + Invocation.method( + #destroy, + [], ), returnValue: _i5.Future.value(), returnValueForMissingStub: _i5.Future.value(), ) as _i5.Future); + + @override + _i5.Future init() => (super.noSuchMethod( + Invocation.method( + #init, + [], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [AdsManagerLoadedEvent]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdsManagerLoadedEvent extends _i1.Mock + implements _i2.AdsManagerLoadedEvent { + @override + _i2.AdsManager get manager => (super.noSuchMethod( + Invocation.getter(#manager), + returnValue: _FakeAdsManager_6( + this, + Invocation.getter(#manager), + ), + returnValueForMissingStub: _FakeAdsManager_6( + this, + Invocation.getter(#manager), + ), + ) as _i2.AdsManager); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdsManagerLoadedEvent pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdsManagerLoadedEvent_7( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdsManagerLoadedEvent_7( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdsManagerLoadedEvent); +} + +/// A class which mocks [AdsLoader]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdsLoader extends _i1.Mock implements _i2.AdsLoader { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future addAdErrorListener(_i2.AdErrorListener? listener) => + (super.noSuchMethod( + Invocation.method( + #addAdErrorListener, + [listener], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future addAdsLoadedListener(_i2.AdsLoadedListener? listener) => + (super.noSuchMethod( + Invocation.method( + #addAdsLoadedListener, + [listener], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future requestAds(_i2.AdsRequest? request) => (super.noSuchMethod( + Invocation.method( + #requestAds, + [request], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i2.AdsLoader pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdsLoader_8( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdsLoader_8( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdsLoader); +} + +/// A class which mocks [AdsRequest]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdsRequest extends _i1.Mock implements _i2.AdsRequest { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future setAdTagUrl(String? adTagUrl) => (super.noSuchMethod( + Invocation.method( + #setAdTagUrl, + [adTagUrl], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i5.Future setContentProgressProvider( + _i2.ContentProgressProvider? provider) => + (super.noSuchMethod( + Invocation.method( + #setContentProgressProvider, + [provider], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); + + @override + _i2.AdsRequest pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdsRequest_9( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdsRequest_9( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdsRequest); +} + +/// A class which mocks [FrameLayout]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.FrameLayout pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeFrameLayout_10( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeFrameLayout_10( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.FrameLayout); + + @override + _i5.Future addView(_i2.View? view) => (super.noSuchMethod( + Invocation.method( + #addView, + [view], + ), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) as _i5.Future); +} + +/// A class which mocks [ImaSdkFactory]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i5.Future<_i2.ImaSdkSettings> createImaSdkSettings() => (super.noSuchMethod( + Invocation.method( + #createImaSdkSettings, + [], + ), + returnValue: + _i5.Future<_i2.ImaSdkSettings>.value(_FakeImaSdkSettings_11( + this, + Invocation.method( + #createImaSdkSettings, + [], + ), + )), + returnValueForMissingStub: + _i5.Future<_i2.ImaSdkSettings>.value(_FakeImaSdkSettings_11( + this, + Invocation.method( + #createImaSdkSettings, + [], + ), + )), + ) as _i5.Future<_i2.ImaSdkSettings>); + + @override + _i5.Future<_i2.AdsLoader> createAdsLoader( + _i2.ImaSdkSettings? settings, + _i2.AdDisplayContainer? container, + ) => + (super.noSuchMethod( + Invocation.method( + #createAdsLoader, + [ + settings, + container, + ], + ), + returnValue: _i5.Future<_i2.AdsLoader>.value(_FakeAdsLoader_8( + this, + Invocation.method( + #createAdsLoader, + [ + settings, + container, + ], + ), + )), + returnValueForMissingStub: + _i5.Future<_i2.AdsLoader>.value(_FakeAdsLoader_8( + this, + Invocation.method( + #createAdsLoader, + [ + settings, + container, + ], + ), + )), + ) as _i5.Future<_i2.AdsLoader>); + + @override + _i5.Future<_i2.AdsRequest> createAdsRequest() => (super.noSuchMethod( + Invocation.method( + #createAdsRequest, + [], + ), + returnValue: _i5.Future<_i2.AdsRequest>.value(_FakeAdsRequest_9( + this, + Invocation.method( + #createAdsRequest, + [], + ), + )), + returnValueForMissingStub: + _i5.Future<_i2.AdsRequest>.value(_FakeAdsRequest_9( + this, + Invocation.method( + #createAdsRequest, + [], + ), + )), + ) as _i5.Future<_i2.AdsRequest>); + + @override + _i2.ImaSdkFactory pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeImaSdkFactory_12( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeImaSdkFactory_12( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.ImaSdkFactory); +} + +/// A class which mocks [ImaSdkSettings]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockImaSdkSettings extends _i1.Mock implements _i2.ImaSdkSettings { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.ImaSdkSettings pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeImaSdkSettings_11( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeImaSdkSettings_11( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.ImaSdkSettings); } /// A class which mocks [VideoAdPlayer]. @@ -391,14 +1129,14 @@ class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { #pigeon_copy, [], ), - returnValue: _FakeVideoAdPlayer_3( + returnValue: _FakeVideoAdPlayer_13( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeVideoAdPlayer_3( + returnValueForMissingStub: _FakeVideoAdPlayer_13( this, Invocation.method( #pigeon_copy, @@ -549,14 +1287,14 @@ class MockVideoAdPlayerCallback extends _i1.Mock #pigeon_copy, [], ), - returnValue: _FakeVideoAdPlayerCallback_4( + returnValue: _FakeVideoAdPlayerCallback_14( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeVideoAdPlayerCallback_4( + returnValueForMissingStub: _FakeVideoAdPlayerCallback_14( this, Invocation.method( #pigeon_copy, @@ -636,14 +1374,14 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { #pigeon_copy, [], ), - returnValue: _FakeVideoView_5( + returnValue: _FakeVideoView_15( this, Invocation.method( #pigeon_copy, [], ), ), - returnValueForMissingStub: _FakeVideoView_5( + returnValueForMissingStub: _FakeVideoView_15( this, Invocation.method( #pigeon_copy, @@ -682,11 +1420,11 @@ class MockSurfaceAndroidViewController extends _i1.Mock @override _i4.PointTransformer get pointTransformer => (super.noSuchMethod( Invocation.getter(#pointTransformer), - returnValue: (_i3.Offset position) => _FakeOffset_6( + returnValue: (_i3.Offset position) => _FakeOffset_16( this, Invocation.getter(#pointTransformer), ), - returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_6( + returnValueForMissingStub: (_i3.Offset position) => _FakeOffset_16( this, Invocation.getter(#pointTransformer), ), @@ -750,14 +1488,14 @@ class MockSurfaceAndroidViewController extends _i1.Mock #setSize, [size], ), - returnValue: _i5.Future<_i3.Size>.value(_FakeSize_7( + returnValue: _i5.Future<_i3.Size>.value(_FakeSize_17( this, Invocation.method( #setSize, [size], ), )), - returnValueForMissingStub: _i5.Future<_i3.Size>.value(_FakeSize_7( + returnValueForMissingStub: _i5.Future<_i3.Size>.value(_FakeSize_17( this, Invocation.method( #setSize, @@ -870,7 +1608,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock #onFocus: onFocus, }, ), - returnValue: _FakeExpensiveAndroidViewController_8( + returnValue: _FakeExpensiveAndroidViewController_18( this, Invocation.method( #initExpensiveAndroidView, @@ -885,7 +1623,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock }, ), ), - returnValueForMissingStub: _FakeExpensiveAndroidViewController_8( + returnValueForMissingStub: _FakeExpensiveAndroidViewController_18( this, Invocation.method( #initExpensiveAndroidView, @@ -924,7 +1662,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock #onFocus: onFocus, }, ), - returnValue: _FakeSurfaceAndroidViewController_9( + returnValue: _FakeSurfaceAndroidViewController_19( this, Invocation.method( #initSurfaceAndroidView, @@ -939,7 +1677,7 @@ class MockPlatformViewsServiceProxy extends _i1.Mock }, ), ), - returnValueForMissingStub: _FakeSurfaceAndroidViewController_9( + returnValueForMissingStub: _FakeSurfaceAndroidViewController_19( this, Invocation.method( #initSurfaceAndroidView, From c7a320ea83b38ebfae8d786af7c4b7068b2817b9 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 22:49:33 -0400 Subject: [PATCH 46/76] finish tests --- .../test/android/ads_loader_test.dart | 67 ++- .../test/android/ads_loader_test.mocks.dart | 385 +++++++++++------- 2 files changed, 295 insertions(+), 157 deletions(-) diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.dart b/packages/interactive_media_ads/test/android/ads_loader_test.dart index bdc1be4c063..8060f662268 100644 --- a/packages/interactive_media_ads/test/android/ads_loader_test.dart +++ b/packages/interactive_media_ads/test/android/ads_loader_test.dart @@ -16,6 +16,7 @@ import 'ads_loader_test.mocks.dart'; @GenerateNiceMocks(>[ MockSpec(), + MockSpec(), MockSpec(), MockSpec(), MockSpec(), @@ -150,18 +151,80 @@ void main() { AndroidAdsLoaderCreationParams( container: container, onAdsLoaded: expectAsync1((_) {}), - onAdsLoadError: (AdsLoadErrorData data) {}, + onAdsLoadError: (_) {}, proxy: proxy, ), ); - final MockAdsManagerLoadedEvent mockLoadedEvent = MockAdsManagerLoadedEvent(); + final MockAdsManagerLoadedEvent mockLoadedEvent = + MockAdsManagerLoadedEvent(); when(mockLoadedEvent.manager).thenReturn(MockAdsManager()); await addEventListenerCompleter.future; onAdsManagerLoadedCallback(MockAdsLoadedListener(), mockLoadedEvent); }); + + testWidgets('onAdError', (WidgetTester tester) async { + final AndroidAdDisplayContainer container = + await _pumpAdDisplayContainer(tester); + + final MockImaSdkFactory mockSdkFactory = MockImaSdkFactory(); + when(mockSdkFactory.createImaSdkSettings()).thenAnswer((_) async { + return MockImaSdkSettings(); + }); + + final MockAdsLoader mockAdsLoader = MockAdsLoader(); + final Completer addErrorListenerCompleter = Completer(); + when(mockAdsLoader.addAdErrorListener(any)).thenAnswer((_) async { + addErrorListenerCompleter.complete(); + }); + + when(mockSdkFactory.createAdsLoader(any, any)).thenAnswer((_) async { + return mockAdsLoader; + }); + + late final void Function( + ima.AdErrorListener, + ima.AdErrorEvent, + ) onAdErrorCallback; + + final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy( + instanceImaSdkFactory: () => mockSdkFactory, + newAdsLoadedListener: ({required dynamic onAdsManagerLoaded}) { + return MockAdsLoadedListener(); + }, + newAdErrorListener: ({ + required void Function( + ima.AdErrorListener, + ima.AdErrorEvent, + ) onAdError, + }) { + onAdErrorCallback = onAdError; + return MockAdErrorListener(); + }, + ); + + AndroidAdsLoader( + AndroidAdsLoaderCreationParams( + container: container, + onAdsLoaded: (_) {}, + onAdsLoadError: expectAsync1((_) {}), + proxy: proxy, + ), + ); + + final MockAdErrorEvent mockErrorEvent = MockAdErrorEvent(); + final MockAdError error = MockAdError(); + when(error.errorType).thenReturn(ima.AdErrorType.load); + when(error.errorCode).thenReturn(ima.AdErrorCode.adsRequestNetworkError); + when(error.message).thenReturn('error message'); + when(mockErrorEvent.error).thenReturn(error); + + await addErrorListenerCompleter.future; + + onAdErrorCallback(MockAdErrorListener(), mockErrorEvent); + }); }); } 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 fec70b2d872..bdcfc1f4d54 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 @@ -3,15 +3,16 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i5; +import 'dart:async' as _i6; import 'dart:ui' as _i3; import 'package:flutter/services.dart' as _i4; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as _i2; import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart' - as _i6; + as _i7; import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i5; // ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values @@ -276,6 +277,80 @@ class MockAdDisplayContainer extends _i1.Mock ) as _i2.AdDisplayContainer); } +/// A class which mocks [AdError]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdError extends _i1.Mock implements _i2.AdError { + @override + _i2.AdErrorCode get errorCode => (super.noSuchMethod( + Invocation.getter(#errorCode), + returnValue: _i2.AdErrorCode.adsPlayerWasNotProvided, + returnValueForMissingStub: _i2.AdErrorCode.adsPlayerWasNotProvided, + ) as _i2.AdErrorCode); + + @override + int get errorCodeNumber => (super.noSuchMethod( + Invocation.getter(#errorCodeNumber), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + _i2.AdErrorType get errorType => (super.noSuchMethod( + Invocation.getter(#errorType), + returnValue: _i2.AdErrorType.load, + returnValueForMissingStub: _i2.AdErrorType.load, + ) as _i2.AdErrorType); + + @override + String get message => (super.noSuchMethod( + Invocation.getter(#message), + returnValue: _i5.dummyValue( + this, + Invocation.getter(#message), + ), + returnValueForMissingStub: _i5.dummyValue( + this, + Invocation.getter(#message), + ), + ) as String); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdError pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdError_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdError_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdError); +} + /// A class which mocks [AdErrorEvent]. /// /// See the documentation for Mockito's code generation for more information. @@ -465,34 +540,34 @@ class MockAdsManager extends _i1.Mock implements _i2.AdsManager { ) as _i2.PigeonInstanceManager); @override - _i5.Future discardAdBreak() => (super.noSuchMethod( + _i6.Future discardAdBreak() => (super.noSuchMethod( Invocation.method( #discardAdBreak, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future pause() => (super.noSuchMethod( + _i6.Future pause() => (super.noSuchMethod( Invocation.method( #pause, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future start() => (super.noSuchMethod( + _i6.Future start() => (super.noSuchMethod( Invocation.method( #start, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override _i2.AdsManager pigeon_copy() => (super.noSuchMethod( @@ -517,46 +592,46 @@ class MockAdsManager extends _i1.Mock implements _i2.AdsManager { ) as _i2.AdsManager); @override - _i5.Future addAdErrorListener(_i2.AdErrorListener? errorListener) => + _i6.Future addAdErrorListener(_i2.AdErrorListener? errorListener) => (super.noSuchMethod( Invocation.method( #addAdErrorListener, [errorListener], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future addAdEventListener(_i2.AdEventListener? adEventListener) => + _i6.Future addAdEventListener(_i2.AdEventListener? adEventListener) => (super.noSuchMethod( Invocation.method( #addAdEventListener, [adEventListener], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future destroy() => (super.noSuchMethod( + _i6.Future destroy() => (super.noSuchMethod( Invocation.method( #destroy, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future init() => (super.noSuchMethod( + _i6.Future init() => (super.noSuchMethod( Invocation.method( #init, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); } /// A class which mocks [AdsManagerLoadedEvent]. @@ -631,36 +706,36 @@ class MockAdsLoader extends _i1.Mock implements _i2.AdsLoader { ) as _i2.PigeonInstanceManager); @override - _i5.Future addAdErrorListener(_i2.AdErrorListener? listener) => + _i6.Future addAdErrorListener(_i2.AdErrorListener? listener) => (super.noSuchMethod( Invocation.method( #addAdErrorListener, [listener], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future addAdsLoadedListener(_i2.AdsLoadedListener? listener) => + _i6.Future addAdsLoadedListener(_i2.AdsLoadedListener? listener) => (super.noSuchMethod( Invocation.method( #addAdsLoadedListener, [listener], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future requestAds(_i2.AdsRequest? request) => (super.noSuchMethod( + _i6.Future requestAds(_i2.AdsRequest? request) => (super.noSuchMethod( Invocation.method( #requestAds, [request], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override _i2.AdsLoader pigeon_copy() => (super.noSuchMethod( @@ -703,26 +778,26 @@ class MockAdsRequest extends _i1.Mock implements _i2.AdsRequest { ) as _i2.PigeonInstanceManager); @override - _i5.Future setAdTagUrl(String? adTagUrl) => (super.noSuchMethod( + _i6.Future setAdTagUrl(String? adTagUrl) => (super.noSuchMethod( Invocation.method( #setAdTagUrl, [adTagUrl], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future setContentProgressProvider( + _i6.Future setContentProgressProvider( _i2.ContentProgressProvider? provider) => (super.noSuchMethod( Invocation.method( #setContentProgressProvider, [provider], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override _i2.AdsRequest pigeon_copy() => (super.noSuchMethod( @@ -787,14 +862,14 @@ class MockFrameLayout extends _i1.Mock implements _i2.FrameLayout { ) as _i2.FrameLayout); @override - _i5.Future addView(_i2.View? view) => (super.noSuchMethod( + _i6.Future addView(_i2.View? view) => (super.noSuchMethod( Invocation.method( #addView, [view], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); } /// A class which mocks [ImaSdkFactory]. @@ -815,13 +890,13 @@ class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { ) as _i2.PigeonInstanceManager); @override - _i5.Future<_i2.ImaSdkSettings> createImaSdkSettings() => (super.noSuchMethod( + _i6.Future<_i2.ImaSdkSettings> createImaSdkSettings() => (super.noSuchMethod( Invocation.method( #createImaSdkSettings, [], ), returnValue: - _i5.Future<_i2.ImaSdkSettings>.value(_FakeImaSdkSettings_11( + _i6.Future<_i2.ImaSdkSettings>.value(_FakeImaSdkSettings_11( this, Invocation.method( #createImaSdkSettings, @@ -829,17 +904,17 @@ class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { ), )), returnValueForMissingStub: - _i5.Future<_i2.ImaSdkSettings>.value(_FakeImaSdkSettings_11( + _i6.Future<_i2.ImaSdkSettings>.value(_FakeImaSdkSettings_11( this, Invocation.method( #createImaSdkSettings, [], ), )), - ) as _i5.Future<_i2.ImaSdkSettings>); + ) as _i6.Future<_i2.ImaSdkSettings>); @override - _i5.Future<_i2.AdsLoader> createAdsLoader( + _i6.Future<_i2.AdsLoader> createAdsLoader( _i2.ImaSdkSettings? settings, _i2.AdDisplayContainer? container, ) => @@ -851,7 +926,7 @@ class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { container, ], ), - returnValue: _i5.Future<_i2.AdsLoader>.value(_FakeAdsLoader_8( + returnValue: _i6.Future<_i2.AdsLoader>.value(_FakeAdsLoader_8( this, Invocation.method( #createAdsLoader, @@ -862,7 +937,7 @@ class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { ), )), returnValueForMissingStub: - _i5.Future<_i2.AdsLoader>.value(_FakeAdsLoader_8( + _i6.Future<_i2.AdsLoader>.value(_FakeAdsLoader_8( this, Invocation.method( #createAdsLoader, @@ -872,15 +947,15 @@ class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { ], ), )), - ) as _i5.Future<_i2.AdsLoader>); + ) as _i6.Future<_i2.AdsLoader>); @override - _i5.Future<_i2.AdsRequest> createAdsRequest() => (super.noSuchMethod( + _i6.Future<_i2.AdsRequest> createAdsRequest() => (super.noSuchMethod( Invocation.method( #createAdsRequest, [], ), - returnValue: _i5.Future<_i2.AdsRequest>.value(_FakeAdsRequest_9( + returnValue: _i6.Future<_i2.AdsRequest>.value(_FakeAdsRequest_9( this, Invocation.method( #createAdsRequest, @@ -888,14 +963,14 @@ class MockImaSdkFactory extends _i1.Mock implements _i2.ImaSdkFactory { ), )), returnValueForMissingStub: - _i5.Future<_i2.AdsRequest>.value(_FakeAdsRequest_9( + _i6.Future<_i2.AdsRequest>.value(_FakeAdsRequest_9( this, Invocation.method( #createAdsRequest, [], ), )), - ) as _i5.Future<_i2.AdsRequest>); + ) as _i6.Future<_i2.AdsRequest>); @override _i2.ImaSdkFactory pigeon_copy() => (super.noSuchMethod( @@ -1103,25 +1178,25 @@ class MockVideoAdPlayer extends _i1.Mock implements _i2.VideoAdPlayer { ) as _i2.PigeonInstanceManager); @override - _i5.Future setVolume(int? value) => (super.noSuchMethod( + _i6.Future setVolume(int? value) => (super.noSuchMethod( Invocation.method( #setVolume, [value], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future setAdProgress(_i2.VideoProgressUpdate? progress) => + _i6.Future setAdProgress(_i2.VideoProgressUpdate? progress) => (super.noSuchMethod( Invocation.method( #setAdProgress, [progress], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override _i2.VideoAdPlayer pigeon_copy() => (super.noSuchMethod( @@ -1165,7 +1240,7 @@ class MockVideoAdPlayerCallback extends _i1.Mock ) as _i2.PigeonInstanceManager); @override - _i5.Future onAdProgress( + _i6.Future onAdProgress( _i2.AdMediaInfo? adMediaInfo, _i2.VideoProgressUpdate? videoProgressUpdate, ) => @@ -1177,95 +1252,95 @@ class MockVideoAdPlayerCallback extends _i1.Mock videoProgressUpdate, ], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onBuffering(_i2.AdMediaInfo? adMediaInfo) => + _i6.Future onBuffering(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onBuffering, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onContentComplete() => (super.noSuchMethod( + _i6.Future onContentComplete() => (super.noSuchMethod( Invocation.method( #onContentComplete, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onEnded(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + _i6.Future onEnded(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onEnded, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onError(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + _i6.Future onError(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onError, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onLoaded(_i2.AdMediaInfo? adMediaInfo) => + _i6.Future onLoaded(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onLoaded, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onPause(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + _i6.Future onPause(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onPause, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onPlay(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( + _i6.Future onPlay(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onPlay, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onResume(_i2.AdMediaInfo? adMediaInfo) => + _i6.Future onResume(_i2.AdMediaInfo? adMediaInfo) => (super.noSuchMethod( Invocation.method( #onResume, [adMediaInfo], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future onVolumeChanged( + _i6.Future onVolumeChanged( _i2.AdMediaInfo? adMediaInfo, int? percentage, ) => @@ -1277,9 +1352,9 @@ class MockVideoAdPlayerCallback extends _i1.Mock percentage, ], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override _i2.VideoAdPlayerCallback pigeon_copy() => (super.noSuchMethod( @@ -1349,24 +1424,24 @@ class MockVideoView extends _i1.Mock implements _i2.VideoView { ) as _i2.PigeonInstanceManager); @override - _i5.Future setVideoUri(String? uri) => (super.noSuchMethod( + _i6.Future setVideoUri(String? uri) => (super.noSuchMethod( Invocation.method( #setVideoUri, [uri], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future getCurrentPosition() => (super.noSuchMethod( + _i6.Future getCurrentPosition() => (super.noSuchMethod( Invocation.method( #getCurrentPosition, [], ), - returnValue: _i5.Future.value(0), - returnValueForMissingStub: _i5.Future.value(0), - ) as _i5.Future); + returnValue: _i6.Future.value(0), + returnValueForMissingStub: _i6.Future.value(0), + ) as _i6.Future); @override _i2.VideoView pigeon_copy() => (super.noSuchMethod( @@ -1455,17 +1530,17 @@ class MockSurfaceAndroidViewController extends _i1.Mock ) as List<_i4.PlatformViewCreatedCallback>); @override - _i5.Future setOffset(_i3.Offset? off) => (super.noSuchMethod( + _i6.Future setOffset(_i3.Offset? off) => (super.noSuchMethod( Invocation.method( #setOffset, [off], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future create({ + _i6.Future create({ _i3.Size? size, _i3.Offset? position, }) => @@ -1478,42 +1553,42 @@ class MockSurfaceAndroidViewController extends _i1.Mock #position: position, }, ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future<_i3.Size> setSize(_i3.Size? size) => (super.noSuchMethod( + _i6.Future<_i3.Size> setSize(_i3.Size? size) => (super.noSuchMethod( Invocation.method( #setSize, [size], ), - returnValue: _i5.Future<_i3.Size>.value(_FakeSize_17( + returnValue: _i6.Future<_i3.Size>.value(_FakeSize_17( this, Invocation.method( #setSize, [size], ), )), - returnValueForMissingStub: _i5.Future<_i3.Size>.value(_FakeSize_17( + returnValueForMissingStub: _i6.Future<_i3.Size>.value(_FakeSize_17( this, Invocation.method( #setSize, [size], ), )), - ) as _i5.Future<_i3.Size>); + ) as _i6.Future<_i3.Size>); @override - _i5.Future sendMotionEvent(_i4.AndroidMotionEvent? event) => + _i6.Future sendMotionEvent(_i4.AndroidMotionEvent? event) => (super.noSuchMethod( Invocation.method( #sendMotionEvent, [event], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override void addOnPlatformViewCreatedListener( @@ -1538,46 +1613,46 @@ class MockSurfaceAndroidViewController extends _i1.Mock ); @override - _i5.Future setLayoutDirection(_i3.TextDirection? layoutDirection) => + _i6.Future setLayoutDirection(_i3.TextDirection? layoutDirection) => (super.noSuchMethod( Invocation.method( #setLayoutDirection, [layoutDirection], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future dispatchPointerEvent(_i4.PointerEvent? event) => + _i6.Future dispatchPointerEvent(_i4.PointerEvent? event) => (super.noSuchMethod( Invocation.method( #dispatchPointerEvent, [event], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future clearFocus() => (super.noSuchMethod( + _i6.Future clearFocus() => (super.noSuchMethod( Invocation.method( #clearFocus, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); @override - _i5.Future dispose() => (super.noSuchMethod( + _i6.Future dispose() => (super.noSuchMethod( Invocation.method( #dispose, [], ), - returnValue: _i5.Future.value(), - returnValueForMissingStub: _i5.Future.value(), - ) as _i5.Future); + returnValue: _i6.Future.value(), + returnValueForMissingStub: _i6.Future.value(), + ) as _i6.Future); } /// A class which mocks [PlatformViewsServiceProxy]. @@ -1585,7 +1660,7 @@ class MockSurfaceAndroidViewController extends _i1.Mock /// See the documentation for Mockito's code generation for more information. // ignore: must_be_immutable class MockPlatformViewsServiceProxy extends _i1.Mock - implements _i6.PlatformViewsServiceProxy { + implements _i7.PlatformViewsServiceProxy { @override _i4.ExpensiveAndroidViewController initExpensiveAndroidView({ required int? id, From a558a5429c1e8ed0d2ad9ef712d485d857f8501b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 23:09:30 -0400 Subject: [PATCH 47/76] finish basic tests --- .../test/android/ads_manager_tests.dart | 71 +++ .../test/android/ads_manager_tests.mocks.dart | 501 ++++++++++++++++++ 2 files changed, 572 insertions(+) create mode 100644 packages/interactive_media_ads/test/android/ads_manager_tests.dart create mode 100644 packages/interactive_media_ads/test/android/ads_manager_tests.mocks.dart diff --git a/packages/interactive_media_ads/test/android/ads_manager_tests.dart b/packages/interactive_media_ads/test/android/ads_manager_tests.dart new file mode 100644 index 00000000000..db3c8b68e69 --- /dev/null +++ b/packages/interactive_media_ads/test/android/ads_manager_tests.dart @@ -0,0 +1,71 @@ +import 'dart:async'; + +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as ima; +import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart'; +import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart'; +import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'ads_manager_tests.mocks.dart'; + +@GenerateNiceMocks(>[ + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), + MockSpec(), +]) +void main() { + group('AndroidAdsManager', () { + test('destroy', () { + final MockAdsManager mockAdsManager = MockAdsManager(); + final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager); + adsManager.destroy(); + + verify(mockAdsManager.destroy()); + }); + + test('init', () { + final MockAdsManager mockAdsManager = MockAdsManager(); + final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager); + adsManager.init(AdsManagerInitParams()); + + verify(mockAdsManager.init()); + }); + + test('start', () { + final MockAdsManager mockAdsManager = MockAdsManager(); + final AndroidAdsManager adsManager = AndroidAdsManager(mockAdsManager); + adsManager.start(AdsManagerStartParams()); + + verify(mockAdsManager.start()); + }); + + test('on add aiowejpfoij', () { + final MockAdsManager mockAdsManager = MockAdsManager(); + final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy( + newAdEventListener: ({required dynamic onAdEvent}) { + return MockAdEventListener(); + }, + newAdErrorListener: ({required dynamic onAdError}) { + return MockAdErrorListener(); + }, + ); + + final AndroidAdsManager adsManager = AndroidAdsManager( + mockAdsManager, + proxy: proxy, + ); + adsManager.destroy(); + + verify(mockAdsManager.destroy()); + }); + }); +} diff --git a/packages/interactive_media_ads/test/android/ads_manager_tests.mocks.dart b/packages/interactive_media_ads/test/android/ads_manager_tests.mocks.dart new file mode 100644 index 00000000000..f86c6778845 --- /dev/null +++ b/packages/interactive_media_ads/test/android/ads_manager_tests.mocks.dart @@ -0,0 +1,501 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in interactive_media_ads/test/android/ads_manager_tests.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i4; + +import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' + as _i2; +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i3; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePigeonInstanceManager_0 extends _i1.SmartFake + implements _i2.PigeonInstanceManager { + _FakePigeonInstanceManager_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdError_1 extends _i1.SmartFake implements _i2.AdError { + _FakeAdError_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdErrorEvent_2 extends _i1.SmartFake implements _i2.AdErrorEvent { + _FakeAdErrorEvent_2( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdErrorListener_3 extends _i1.SmartFake + implements _i2.AdErrorListener { + _FakeAdErrorListener_3( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdEvent_4 extends _i1.SmartFake implements _i2.AdEvent { + _FakeAdEvent_4( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdEventListener_5 extends _i1.SmartFake + implements _i2.AdEventListener { + _FakeAdEventListener_5( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +class _FakeAdsManager_6 extends _i1.SmartFake implements _i2.AdsManager { + _FakeAdsManager_6( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} + +/// A class which mocks [AdError]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdError extends _i1.Mock implements _i2.AdError { + @override + _i2.AdErrorCode get errorCode => (super.noSuchMethod( + Invocation.getter(#errorCode), + returnValue: _i2.AdErrorCode.adsPlayerWasNotProvided, + returnValueForMissingStub: _i2.AdErrorCode.adsPlayerWasNotProvided, + ) as _i2.AdErrorCode); + + @override + int get errorCodeNumber => (super.noSuchMethod( + Invocation.getter(#errorCodeNumber), + returnValue: 0, + returnValueForMissingStub: 0, + ) as int); + + @override + _i2.AdErrorType get errorType => (super.noSuchMethod( + Invocation.getter(#errorType), + returnValue: _i2.AdErrorType.load, + returnValueForMissingStub: _i2.AdErrorType.load, + ) as _i2.AdErrorType); + + @override + String get message => (super.noSuchMethod( + Invocation.getter(#message), + returnValue: _i3.dummyValue( + this, + Invocation.getter(#message), + ), + returnValueForMissingStub: _i3.dummyValue( + this, + Invocation.getter(#message), + ), + ) as String); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdError pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdError_1( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdError_1( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdError); +} + +/// A class which mocks [AdErrorEvent]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdErrorEvent extends _i1.Mock implements _i2.AdErrorEvent { + @override + _i2.AdError get error => (super.noSuchMethod( + Invocation.getter(#error), + returnValue: _FakeAdError_1( + this, + Invocation.getter(#error), + ), + returnValueForMissingStub: _FakeAdError_1( + this, + Invocation.getter(#error), + ), + ) as _i2.AdError); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdErrorEvent pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdErrorEvent_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdErrorEvent_2( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdErrorEvent); +} + +/// A class which mocks [AdErrorListener]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdErrorListener extends _i1.Mock implements _i2.AdErrorListener { + @override + void Function( + _i2.AdErrorListener, + _i2.AdErrorEvent, + ) get onAdError => (super.noSuchMethod( + Invocation.getter(#onAdError), + returnValue: ( + _i2.AdErrorListener pigeon_instance, + _i2.AdErrorEvent event, + ) {}, + returnValueForMissingStub: ( + _i2.AdErrorListener pigeon_instance, + _i2.AdErrorEvent event, + ) {}, + ) as void Function( + _i2.AdErrorListener, + _i2.AdErrorEvent, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdErrorListener pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdErrorListener_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdErrorListener_3( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdErrorListener); +} + +/// A class which mocks [AdEvent]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdEvent extends _i1.Mock implements _i2.AdEvent { + @override + _i2.AdEventType get type => (super.noSuchMethod( + Invocation.getter(#type), + returnValue: _i2.AdEventType.adBreakEnded, + returnValueForMissingStub: _i2.AdEventType.adBreakEnded, + ) as _i2.AdEventType); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdEvent pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdEvent_4( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdEvent_4( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdEvent); +} + +/// A class which mocks [AdEventListener]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdEventListener extends _i1.Mock implements _i2.AdEventListener { + @override + void Function( + _i2.AdEventListener, + _i2.AdEvent, + ) get onAdEvent => (super.noSuchMethod( + Invocation.getter(#onAdEvent), + returnValue: ( + _i2.AdEventListener pigeon_instance, + _i2.AdEvent event, + ) {}, + returnValueForMissingStub: ( + _i2.AdEventListener pigeon_instance, + _i2.AdEvent event, + ) {}, + ) as void Function( + _i2.AdEventListener, + _i2.AdEvent, + )); + + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i2.AdEventListener pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdEventListener_5( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdEventListener_5( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdEventListener); +} + +/// A class which mocks [AdsManager]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdsManager extends _i1.Mock implements _i2.AdsManager { + @override + _i2.PigeonInstanceManager get pigeon_instanceManager => (super.noSuchMethod( + Invocation.getter(#pigeon_instanceManager), + returnValue: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + returnValueForMissingStub: _FakePigeonInstanceManager_0( + this, + Invocation.getter(#pigeon_instanceManager), + ), + ) as _i2.PigeonInstanceManager); + + @override + _i4.Future discardAdBreak() => (super.noSuchMethod( + Invocation.method( + #discardAdBreak, + [], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + + @override + _i4.Future pause() => (super.noSuchMethod( + Invocation.method( + #pause, + [], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + + @override + _i4.Future start() => (super.noSuchMethod( + Invocation.method( + #start, + [], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + + @override + _i2.AdsManager pigeon_copy() => (super.noSuchMethod( + Invocation.method( + #pigeon_copy, + [], + ), + returnValue: _FakeAdsManager_6( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + returnValueForMissingStub: _FakeAdsManager_6( + this, + Invocation.method( + #pigeon_copy, + [], + ), + ), + ) as _i2.AdsManager); + + @override + _i4.Future addAdErrorListener(_i2.AdErrorListener? errorListener) => + (super.noSuchMethod( + Invocation.method( + #addAdErrorListener, + [errorListener], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + + @override + _i4.Future addAdEventListener(_i2.AdEventListener? adEventListener) => + (super.noSuchMethod( + Invocation.method( + #addAdEventListener, + [adEventListener], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + + @override + _i4.Future destroy() => (super.noSuchMethod( + Invocation.method( + #destroy, + [], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); + + @override + _i4.Future init() => (super.noSuchMethod( + Invocation.method( + #init, + [], + ), + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); +} From 1c3a2c2feaa663a37c5a8758bdef237e1b0e18ba Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 23:23:52 -0400 Subject: [PATCH 48/76] finish all tests --- .../test/android/ads_loader_test.dart | 14 ++-- .../test/android/ads_manager_tests.dart | 80 +++++++++++++++++-- 2 files changed, 81 insertions(+), 13 deletions(-) diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.dart b/packages/interactive_media_ads/test/android/ads_loader_test.dart index 8060f662268..86b633af0eb 100644 --- a/packages/interactive_media_ads/test/android/ads_loader_test.dart +++ b/packages/interactive_media_ads/test/android/ads_loader_test.dart @@ -1,3 +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. + import 'dart:async'; import 'package:flutter/services.dart'; @@ -215,11 +219,11 @@ void main() { ); final MockAdErrorEvent mockErrorEvent = MockAdErrorEvent(); - final MockAdError error = MockAdError(); - when(error.errorType).thenReturn(ima.AdErrorType.load); - when(error.errorCode).thenReturn(ima.AdErrorCode.adsRequestNetworkError); - when(error.message).thenReturn('error message'); - when(mockErrorEvent.error).thenReturn(error); + final MockAdError mockError = MockAdError(); + when(mockError.errorType).thenReturn(ima.AdErrorType.load); + when(mockError.errorCode).thenReturn(ima.AdErrorCode.adsRequestNetworkError); + when(mockError.message).thenReturn('error message'); + when(mockErrorEvent.error).thenReturn(mockError); await addErrorListenerCompleter.future; diff --git a/packages/interactive_media_ads/test/android/ads_manager_tests.dart b/packages/interactive_media_ads/test/android/ads_manager_tests.dart index db3c8b68e69..47d65d5b6ad 100644 --- a/packages/interactive_media_ads/test/android/ads_manager_tests.dart +++ b/packages/interactive_media_ads/test/android/ads_manager_tests.dart @@ -1,13 +1,12 @@ -import 'dart:async'; +// 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. -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as ima; import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart'; -import 'package:interactive_media_ads/src/android/platform_views_service_proxy.dart'; import 'package:interactive_media_ads/src/platform_interface/platform_interface.dart'; import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; @@ -48,10 +47,22 @@ void main() { verify(mockAdsManager.start()); }); - test('on add aiowejpfoij', () { + test('onAdEvent', () async { final MockAdsManager mockAdsManager = MockAdsManager(); + + late final void Function( + ima.AdEventListener, + ima.AdEvent, + ) onAdEventCallback; + final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy( - newAdEventListener: ({required dynamic onAdEvent}) { + newAdEventListener: ({ + required void Function( + ima.AdEventListener, + ima.AdEvent, + ) onAdEvent, + }) { + onAdEventCallback = onAdEvent; return MockAdEventListener(); }, newAdErrorListener: ({required dynamic onAdError}) { @@ -63,9 +74,62 @@ void main() { mockAdsManager, proxy: proxy, ); - adsManager.destroy(); + await adsManager.setAdsManagerDelegate( + AndroidAdsManagerDelegate( + PlatformAdsManagerDelegateCreationParams( + onAdEvent: expectAsync1((_) {}), + ), + ), + ); - verify(mockAdsManager.destroy()); + final MockAdEvent mockAdEvent = MockAdEvent(); + when(mockAdEvent.type).thenReturn(ima.AdEventType.allAdsCompleted); + onAdEventCallback(MockAdEventListener(), mockAdEvent); + }); + + test('onAdErrorEvent', () async { + final MockAdsManager mockAdsManager = MockAdsManager(); + + late final void Function( + ima.AdErrorListener, + ima.AdErrorEvent, + ) onAdErrorCallback; + + final InteractiveMediaAdsProxy proxy = InteractiveMediaAdsProxy( + newAdEventListener: ({required dynamic onAdEvent}) { + return MockAdEventListener(); + }, + newAdErrorListener: ({ + required void Function( + ima.AdErrorListener, + ima.AdErrorEvent, + ) onAdError, + }) { + onAdErrorCallback = onAdError; + return MockAdErrorListener(); + }, + ); + + final AndroidAdsManager adsManager = AndroidAdsManager( + mockAdsManager, + proxy: proxy, + ); + await adsManager.setAdsManagerDelegate( + AndroidAdsManagerDelegate( + PlatformAdsManagerDelegateCreationParams( + onAdErrorEvent: expectAsync1((_) {}), + ), + ), + ); + + final MockAdErrorEvent mockErrorEvent = MockAdErrorEvent(); + final MockAdError mockError = MockAdError(); + when(mockError.errorType).thenReturn(ima.AdErrorType.load); + when(mockError.errorCode) + .thenReturn(ima.AdErrorCode.adsRequestNetworkError); + when(mockError.message).thenReturn('error message'); + when(mockErrorEvent.error).thenReturn(mockError); + onAdErrorCallback(MockAdErrorListener(), mockErrorEvent); }); }); } From 428ecec540d94c40421dab0cbc04b28160ef8692 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 19 May 2024 23:26:17 -0400 Subject: [PATCH 49/76] formatting --- .../lib/src/android/android_view_widget.dart | 3 +-- .../test/android/ads_loader_test.dart | 8 +++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart index 31c0d41e49a..a4c0b662e98 100644 --- a/packages/interactive_media_ads/lib/src/android/android_view_widget.dart +++ b/packages/interactive_media_ads/lib/src/android/android_view_widget.dart @@ -27,8 +27,7 @@ class AndroidViewWidget extends StatelessWidget { this.displayWithHybridComposition = false, ima.PigeonInstanceManager? instanceManager, this.platformViewsServiceProxy = const PlatformViewsServiceProxy(), - }) : instanceManager = instanceManager ?? - ima.PigeonInstanceManager.instance; + }) : instanceManager = instanceManager ?? ima.PigeonInstanceManager.instance; /// The reference to the Android native view that should be shown. final ima.View view; diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.dart b/packages/interactive_media_ads/test/android/ads_loader_test.dart index 86b633af0eb..6e2621381df 100644 --- a/packages/interactive_media_ads/test/android/ads_loader_test.dart +++ b/packages/interactive_media_ads/test/android/ads_loader_test.dart @@ -56,8 +56,9 @@ void main() { final MockVideoAdPlayerCallback mockAdPlayerCallback = MockVideoAdPlayerCallback(); final AndroidAdDisplayContainer container = await _pumpAdDisplayContainer( - tester, - mockAdPlayerCallback: mockAdPlayerCallback); + tester, + mockAdPlayerCallback: mockAdPlayerCallback, + ); final AndroidAdsLoader loader = AndroidAdsLoader( AndroidAdsLoaderCreationParams( @@ -221,7 +222,8 @@ void main() { final MockAdErrorEvent mockErrorEvent = MockAdErrorEvent(); final MockAdError mockError = MockAdError(); when(mockError.errorType).thenReturn(ima.AdErrorType.load); - when(mockError.errorCode).thenReturn(ima.AdErrorCode.adsRequestNetworkError); + when(mockError.errorCode) + .thenReturn(ima.AdErrorCode.adsRequestNetworkError); when(mockError.message).thenReturn('error message'); when(mockErrorEvent.error).thenReturn(mockError); From 5311d853073290421d4945917a44ddc60ca1ee48 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 11:09:25 -0400 Subject: [PATCH 50/76] version bump and license --- packages/interactive_media_ads/CHANGELOG.md | 2 +- .../pigeons/interactive_media_ads_android.dart | 8 ++++---- packages/interactive_media_ads/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 352b72083fe..b7f3023af67 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 0.0.2 * Adds Android implementation. 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 29e48e6d033..9124e7bf9dd 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.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. -// +// 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. + // // ignore_for_file: avoid_unused_constructor_parameters // // import 'package:pigeon/pigeon.dart'; diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index b4d67719397..edb4201570f 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.0.1 +version: 0.0.2 environment: sdk: ^3.2.3 From ba23b1d4629b9c44e1105dc0a5ea7ddb01f7a96c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 11:11:51 -0400 Subject: [PATCH 51/76] lower kotlin version --- packages/interactive_media_ads/android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/android/build.gradle b/packages/interactive_media_ads/android/build.gradle index 05c12b785ce..eea5194c4a4 100644 --- a/packages/interactive_media_ads/android/build.gradle +++ b/packages/interactive_media_ads/android/build.gradle @@ -2,7 +2,7 @@ group 'dev.flutter.packages.interactive_media_ads' version '1.0-SNAPSHOT' buildscript { - ext.kotlin_version = '1.8.0' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() From 52a2c493e737ec5d351c4e6e34b143e98c18dcf8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 11:52:02 -0400 Subject: [PATCH 52/76] try fix lint --- .../GeneratedInteractiveMediaAdsLibrary.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index 3aa2566d913..9cae02e35da 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt @@ -285,7 +285,7 @@ class PigeonInstanceManager(private val finalizationListener: PigeonFinalization private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { companion object { /** The codec used by PigeonInstanceManagerApi. */ - private val codec: MessageCodec by lazy { StandardMessageCodec() } + val codec: MessageCodec by lazy { StandardMessageCodec() } /** * Sets up an instance of `PigeonInstanceManagerApi` to handle messages from the From f32e74ff6d16edb678317b670c220a4d69a81a2c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 12:27:17 -0400 Subject: [PATCH 53/76] update generated kotlin --- .../GeneratedInteractiveMediaAdsLibrary.kt | 54 +++++++++---------- .../src/android/interactive_media_ads.g.dart | 2 +- packages/interactive_media_ads/pubspec.yaml | 2 +- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt index 9cae02e35da..c5edc8dfc35 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.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 (v18.1.0), do not edit directly. +// Autogenerated from Pigeon (v19.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon @file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") @@ -842,7 +842,7 @@ enum class AdEventType(val raw: Int) { * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiBaseDisplayContainer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -880,7 +880,7 @@ abstract class PigeonApiBaseDisplayContainer(val pigeonRegistrar: PigeonProxyApi * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdDisplayContainer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -925,7 +925,7 @@ abstract class PigeonApiAdDisplayContainer(val pigeonRegistrar: PigeonProxyApiRe * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdsLoader(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Registers a listener for errors that occur during the ads request. */ abstract fun addAdErrorListener( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsLoader, @@ -1061,7 +1061,7 @@ abstract class PigeonApiAdsLoader(val pigeonRegistrar: PigeonProxyApiRegistrar) * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdsManagerLoadedEvent(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** * The ads manager that will control playback of the loaded ads, or null when using dynamic ad * insertion. @@ -1108,7 +1108,7 @@ abstract class PigeonApiAdsManagerLoadedEvent(val pigeonRegistrar: PigeonProxyAp * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdErrorEvent(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The AdError that caused this event. */ abstract fun error( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdErrorEvent @@ -1151,7 +1151,7 @@ abstract class PigeonApiAdErrorEvent(val pigeonRegistrar: PigeonProxyApiRegistra * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdError(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The error's code. */ abstract fun errorCode( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdError @@ -1217,7 +1217,7 @@ abstract class PigeonApiAdError(val pigeonRegistrar: PigeonProxyApiRegistrar) { * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsRequest. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdsRequest(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Sets the URL from which ads will be requested. */ abstract fun setAdTagUrl( pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsRequest, @@ -1325,7 +1325,7 @@ abstract class PigeonApiAdsRequest(val pigeonRegistrar: PigeonProxyApiRegistrar) * https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiContentProgressProvider(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -1363,7 +1363,7 @@ abstract class PigeonApiContentProgressProvider(val pigeonRegistrar: PigeonProxy * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdsManager(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Discards current ad break and resumes content. */ abstract fun discardAdBreak(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdsManager) @@ -1487,7 +1487,7 @@ abstract class PigeonApiAdsManager(val pigeonRegistrar: PigeonProxyApiRegistrar) * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiBaseManager(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** * Registers a listener for errors that occur during the ad or stream initialization and playback. */ @@ -1647,7 +1647,7 @@ abstract class PigeonApiBaseManager(val pigeonRegistrar: PigeonProxyApiRegistrar * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdEvent(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** The type of event that occurred. */ abstract fun type(pigeon_instance: com.google.ads.interactivemedia.v3.api.AdEvent): AdEventType @@ -1688,7 +1688,7 @@ abstract class PigeonApiAdEvent(val pigeonRegistrar: PigeonProxyApiRegistrar) { * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiImaSdkFactory(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun instance(): com.google.ads.interactivemedia.v3.api.ImaSdkFactory abstract fun createAdDisplayContainer( @@ -1872,7 +1872,7 @@ abstract class PigeonApiImaSdkFactory(val pigeonRegistrar: PigeonProxyApiRegistr * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiImaSdkSettings(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -1909,7 +1909,7 @@ abstract class PigeonApiImaSdkSettings(val pigeonRegistrar: PigeonProxyApiRegist * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiVideoProgressUpdate(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor( currentTimeMs: Long, durationMs: Long @@ -2017,7 +2017,7 @@ abstract class PigeonApiVideoProgressUpdate(val pigeonRegistrar: PigeonProxyApiR * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdMediaInfo(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun url( pigeon_instance: com.google.ads.interactivemedia.v3.api.player.AdMediaInfo ): String @@ -2059,7 +2059,7 @@ abstract class PigeonApiAdMediaInfo(val pigeonRegistrar: PigeonProxyApiRegistrar * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdPodInfo(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** * The position of the ad within the pod. * @@ -2145,7 +2145,7 @@ abstract class PigeonApiAdPodInfo(val pigeonRegistrar: PigeonProxyApiRegistrar) * See https://developer.android.com/reference/android/widget/FrameLayout. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiFrameLayout(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor(): android.widget.FrameLayout companion object { @@ -2221,7 +2221,7 @@ abstract class PigeonApiFrameLayout(val pigeonRegistrar: PigeonProxyApiRegistrar * See https://developer.android.com/reference/android/view/ViewGroup. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiViewGroup(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun addView(pigeon_instance: android.view.ViewGroup, view: android.view.View) companion object { @@ -2296,7 +2296,7 @@ abstract class PigeonApiViewGroup(val pigeonRegistrar: PigeonProxyApiRegistrar) * See https://developer.android.com/reference/android/widget/VideoView. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiVideoView(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor(): android.widget.VideoView /** Sets the URI of the video. */ @@ -2484,7 +2484,7 @@ abstract class PigeonApiVideoView(val pigeonRegistrar: PigeonProxyApiRegistrar) * See https://developer.android.com/reference/android/view/View. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiView(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { @@ -2517,7 +2517,7 @@ abstract class PigeonApiView(val pigeonRegistrar: PigeonProxyApiRegistrar) { * See https://developer.android.com/reference/android/media/MediaPlayer. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiMediaPlayer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Gets the duration of the file. */ abstract fun getDuration(pigeon_instance: android.media.MediaPlayer): Long @@ -2689,7 +2689,7 @@ abstract class PigeonApiMediaPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiVideoAdPlayerCallback(open val pigeonRegistrar: PigeonProxyApiRegistrar) { /** Fire this callback periodically as ad playback occurs. */ abstract fun onAdProgress( pigeon_instance: @@ -3091,7 +3091,7 @@ abstract class PigeonApiVideoAdPlayerCallback(val pigeonRegistrar: PigeonProxyAp * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiVideoAdPlayer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer @@ -3377,7 +3377,7 @@ abstract class PigeonApiVideoAdPlayer(val pigeonRegistrar: PigeonProxyApiRegistr * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdsLoadedListener(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener @@ -3458,7 +3458,7 @@ abstract class PigeonApiAdsLoadedListener(val pigeonRegistrar: PigeonProxyApiReg * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdErrorListener(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener @@ -3538,7 +3538,7 @@ abstract class PigeonApiAdErrorListener(val pigeonRegistrar: PigeonProxyApiRegis * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdEventListener(val pigeonRegistrar: PigeonProxyApiRegistrar) { +abstract class PigeonApiAdEventListener(open val pigeonRegistrar: PigeonProxyApiRegistrar) { abstract fun pigeon_defaultConstructor(): com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener 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 e5af10c18d2..920e0339904 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 (v18.1.0), do not edit directly. +// Autogenerated from Pigeon (v19.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon // ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index edb4201570f..dd01b6420ec 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -30,7 +30,7 @@ dev_dependencies: # pigeon: # git: # url: git@github.com:bparrishMines/packages.git -# ref: pigeon_helper +# ref: pigeon_kotlin_split # path: packages/pigeon topics: From 75957f2167647f6607aec47dfdb02a50451d5594 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 12:34:59 -0400 Subject: [PATCH 54/76] override pigeonRegistrar type --- .../AdDisplayContainerProxyApi.kt | 2 +- .../AdErrorEventProxyApi.kt | 2 +- .../AdErrorListenerProxyApi.kt | 4 +-- .../interactive_media_ads/AdErrorProxyApi.kt | 2 +- .../AdEventListenerProxyApi.kt | 4 +-- .../interactive_media_ads/AdEventProxyApi.kt | 2 +- .../AdMediaInfoProxyApi.kt | 2 +- .../AdPodInfoProxyApi.kt | 2 +- .../AdsLoadedListenerProxyApi.kt | 6 ++-- .../AdsLoaderProxyApi.kt | 2 +- .../AdsManagerLoadedEventProxyApi.kt | 2 +- .../AdsManagerProxyApi.kt | 2 +- .../AdsRequestProxyApi.kt | 2 +- .../BaseDisplayContainerProxyApi.kt | 4 +-- .../BaseManagerProxyApi.kt | 2 +- .../ContentProgressProviderProxyApi.kt | 4 +-- .../FrameLayoutProxyApi.kt | 4 +-- .../ImaSdkFactoryProxyApi.kt | 5 ++-- .../ImaSdkSettingsProxyApi.kt | 4 +-- .../MediaPlayerProxyApi.kt | 2 +- .../VideoAdPlayerCallbackProxyApi.kt | 2 +- .../VideoAdPlayerProxyApi.kt | 28 ++++++------------- .../VideoProgressUpdateProxyApi.kt | 2 +- .../VideoViewProxyApi.kt | 4 +-- .../ViewGroupProxyApi.kt | 2 +- .../interactive_media_ads/ViewProxyApi.kt | 3 +- 26 files changed, 43 insertions(+), 57 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt index 8c7384ad080..aabf5012511 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt @@ -4,5 +4,5 @@ package dev.flutter.packages.interactive_media_ads -class AdDisplayContainerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdDisplayContainerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdDisplayContainer(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt index 1b204ec4dab..ae4446c8061 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt @@ -7,7 +7,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError import com.google.ads.interactivemedia.v3.api.AdErrorEvent -class AdErrorEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdErrorEventProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdErrorEvent(pigeonRegistrar) { override fun error(pigeon_instance: AdErrorEvent): AdError { return pigeon_instance.error diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt index d8f7710f87f..b16f7016160 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -6,12 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdErrorEvent -class AdErrorListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdErrorListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdErrorListener(pigeonRegistrar) { internal class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : AdErrorEvent.AdErrorListener { override fun onAdError(event: AdErrorEvent) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.onAdError(this, event) {} } + api.pigeonRegistrar.runOnMainThread { api.onAdError(this, event) {} } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt index ce1ac57a154..2c9a560f3b3 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError -class AdErrorProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdErrorProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdError(pigeonRegistrar) { override fun errorCode(pigeon_instance: AdError): AdErrorCode { return when (pigeon_instance.errorCode) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt index ab297dd0240..5a51b57a4df 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -6,11 +6,11 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdEvent -class AdEventListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdEventListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdEventListener(pigeonRegistrar) { internal class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { override fun onAdEvent(event: AdEvent) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.onAdEvent(this, event) {} } + api.pigeonRegistrar.runOnMainThread { api.onAdEvent(this, event) {} } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt index 4e27ad5b53b..30fca204086 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdEvent -class AdEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdEventProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdEvent(pigeonRegistrar) { override fun type(pigeon_instance: AdEvent): AdEventType { return when (pigeon_instance.type) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt index cc9a8ee92fa..c9483f360ad 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo -class AdMediaInfoProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdMediaInfoProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdMediaInfo(pigeonRegistrar) { override fun url(pigeon_instance: AdMediaInfo): String { return pigeon_instance.url diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt index 53b9fa3ab43..94c8614522a 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdPodInfo -class AdPodInfoProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdPodInfoProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdPodInfo(pigeonRegistrar) { override fun adPosition(pigeon_instance: AdPodInfo): Long { return pigeon_instance.adPosition.toLong() diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt index afed975f822..2b7d5d12cfb 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt @@ -7,14 +7,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent -class AdsLoadedListenerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdsLoadedListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsLoadedListener(pigeonRegistrar) { internal class AdsLoadedListenerImpl(val api: AdsLoadedListenerProxyApi) : AdsLoader.AdsLoadedListener { override fun onAdsManagerLoaded(event: AdsManagerLoadedEvent) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.onAdsManagerLoaded(this, event) {} - } + api.pigeonRegistrar.runOnMainThread { api.onAdsManagerLoaded(this, event) {} } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt index 7284b6982e9..c38275a4706 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt @@ -8,7 +8,7 @@ import com.google.ads.interactivemedia.v3.api.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsRequest -class AdsLoaderProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdsLoaderProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsLoader(pigeonRegistrar) { override fun addAdErrorListener( pigeon_instance: AdsLoader, diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt index 9ada354d0e3..9d245fae5b9 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt @@ -7,7 +7,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsManager import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent -class AdsManagerLoadedEventProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdsManagerLoadedEventProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsManagerLoadedEvent(pigeonRegistrar) { override fun manager(pigeon_instance: AdsManagerLoadedEvent): AdsManager { return pigeon_instance.adsManager diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt index ad5a5a99f7c..78c7b97e9b8 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsManager -class AdsManagerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdsManagerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsManager(pigeonRegistrar) { override fun discardAdBreak(pigeon_instance: AdsManager) { pigeon_instance.discardAdBreak() 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 ae8891957f0..1babfc97537 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 @@ -7,7 +7,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 -class AdsRequestProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsRequest(pigeonRegistrar) { override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { pigeon_instance.adTagUrl = adTagUrl diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt index 719cc795121..3be0dd5cf94 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt @@ -4,5 +4,5 @@ package dev.flutter.packages.interactive_media_ads -class BaseDisplayContainerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiBaseDisplayContainer(pigeonRegistrar) {} +class BaseDisplayContainerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiBaseDisplayContainer(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt index 7c6bf49d951..cb1af35d48b 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt @@ -8,7 +8,7 @@ import com.google.ads.interactivemedia.v3.api.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdEvent import com.google.ads.interactivemedia.v3.api.BaseManager -class BaseManagerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class BaseManagerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiBaseManager(pigeonRegistrar) { override fun addAdErrorListener( pigeon_instance: BaseManager, diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt index d111f9c0023..3ba22508394 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt @@ -4,5 +4,5 @@ package dev.flutter.packages.interactive_media_ads -class ContentProgressProviderProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiContentProgressProvider(pigeonRegistrar) {} +class ContentProgressProviderProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiContentProgressProvider(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt index ad037a15c20..21d81804076 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt @@ -6,9 +6,9 @@ package dev.flutter.packages.interactive_media_ads import android.widget.FrameLayout -class FrameLayoutProxyApi(pigeonRegistrar: ProxyApiRegistrar) : +class FrameLayoutProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiFrameLayout(pigeonRegistrar) { override fun pigeon_defaultConstructor(): FrameLayout { - return FrameLayout((pigeonRegistrar as ProxyApiRegistrar).context) + return FrameLayout(pigeonRegistrar.context) } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt index fae90bfc460..970ba4675e6 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt @@ -12,7 +12,7 @@ import com.google.ads.interactivemedia.v3.api.ImaSdkFactory import com.google.ads.interactivemedia.v3.api.ImaSdkSettings import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer -class ImaSdkFactoryProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class ImaSdkFactoryProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiImaSdkFactory(pigeonRegistrar) { override fun instance(): ImaSdkFactory { return ImaSdkFactory.getInstance() @@ -34,8 +34,7 @@ class ImaSdkFactoryProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : settings: ImaSdkSettings, container: AdDisplayContainer ): AdsLoader { - return pigeon_instance.createAdsLoader( - (pigeonRegistrar as ProxyApiRegistrar).context, settings, container) + return pigeon_instance.createAdsLoader(pigeonRegistrar.context, settings, container) } override fun createAdsRequest(pigeon_instance: ImaSdkFactory): AdsRequest { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt index 9a8e6386c77..6890e2b0bbc 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt @@ -4,5 +4,5 @@ package dev.flutter.packages.interactive_media_ads -class ImaSdkSettingsProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : - PigeonApiImaSdkSettings(pigeonRegistrar) {} +class ImaSdkSettingsProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiImaSdkSettings(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt index c09090c9e0c..0b0b6186c94 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import android.media.MediaPlayer -class MediaPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class MediaPlayerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiMediaPlayer(pigeonRegistrar) { override fun getDuration(pigeon_instance: MediaPlayer): Long { return pigeon_instance.duration.toLong() diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt index ef0c1ce2752..d6274c9bba7 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt @@ -8,7 +8,7 @@ import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate -class VideoAdPlayerCallbackProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class VideoAdPlayerCallbackProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoAdPlayerCallback(pigeonRegistrar) { override fun onAdProgress( pigeon_instance: VideoAdPlayer.VideoAdPlayerCallback, diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index 0c79dca75a1..1e17aa2ac84 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -9,7 +9,7 @@ import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate -class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class VideoAdPlayerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoAdPlayer(pigeonRegistrar) { override fun pigeon_defaultConstructor(): VideoAdPlayer { return VideoAdPlayerImpl(this) @@ -29,43 +29,31 @@ class VideoAdPlayerProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : } override fun addCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.addCallback(this, callbackArg = callback) {} - } + api.pigeonRegistrar.runOnMainThread { api.addCallback(this, callbackArg = callback) {} } } override fun loadAd(adMediaInfo: AdMediaInfo, adPodInfo: AdPodInfo) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.loadAd(this, adMediaInfo, adPodInfo) {} - } + api.pigeonRegistrar.runOnMainThread { api.loadAd(this, adMediaInfo, adPodInfo) {} } } override fun pauseAd(adMediaInfo: AdMediaInfo) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.pauseAd(this, adMediaInfo) {} - } + api.pigeonRegistrar.runOnMainThread { api.pauseAd(this, adMediaInfo) {} } } override fun playAd(adMediaInfo: AdMediaInfo) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.playAd(this, adMediaInfo) {} - } + api.pigeonRegistrar.runOnMainThread { api.playAd(this, adMediaInfo) {} } } override fun release() { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { api.release(this) {} } + api.pigeonRegistrar.runOnMainThread { api.release(this) {} } } override fun removeCallback(callback: VideoAdPlayer.VideoAdPlayerCallback) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.removeCallback(this, callbackArg = callback) {} - } + api.pigeonRegistrar.runOnMainThread { api.removeCallback(this, callbackArg = callback) {} } } override fun stopAd(adMediaInfo: AdMediaInfo) { - (api.pigeonRegistrar as ProxyApiRegistrar).runOnMainThread { - api.stopAd(this, adMediaInfo) {} - } + api.pigeonRegistrar.runOnMainThread { api.stopAd(this, adMediaInfo) {} } } } diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt index dbe7672053e..6d76b0e9391 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt @@ -6,7 +6,7 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate -class VideoProgressUpdateProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class VideoProgressUpdateProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoProgressUpdate(pigeonRegistrar) { override fun pigeon_defaultConstructor( currentTimeMs: Long, diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index 0381149f370..50d364d31da 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -8,11 +8,11 @@ import android.media.MediaPlayer import android.net.Uri import android.widget.VideoView -class VideoViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class VideoViewProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoView(pigeonRegistrar) { override fun pigeon_defaultConstructor(): VideoView { - val instance = VideoView((pigeonRegistrar as ProxyApiRegistrar).context) + val instance = VideoView(pigeonRegistrar.context) instance.setOnPreparedListener { player: MediaPlayer -> onPrepared(instance, player) {} } instance.setOnErrorListener { player: MediaPlayer, what: Int, extra: Int -> onError(instance, player, what.toLong(), extra.toLong()) {} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt index 8597e32ea80..54d39fd0201 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt @@ -7,7 +7,7 @@ package dev.flutter.packages.interactive_media_ads import android.view.View import android.view.ViewGroup -class ViewGroupProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : +class ViewGroupProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiViewGroup(pigeonRegistrar) { override fun addView(pigeon_instance: ViewGroup, view: View) { pigeon_instance.addView(view) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt index 4e3425378ee..dc5fb80724e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt @@ -4,4 +4,5 @@ package dev.flutter.packages.interactive_media_ads -class ViewProxyApi(pigeonRegistrar: PigeonProxyApiRegistrar) : PigeonApiView(pigeonRegistrar) {} +class ViewProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiView(pigeonRegistrar) From 6743d69ec10f6d4132ec2e6e207cc19febab615a Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 12:48:51 -0400 Subject: [PATCH 55/76] make platform classes base to be mockable --- .../lib/src/android/android_ad_display_container.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 74e1696fa87..57ed11b647c 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -46,7 +46,7 @@ final class AndroidAdDisplayContainerCreationParams } /// Android implementation of [PlatformAdDisplayContainer]. -final class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { +base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { /// Constructs an [AndroidAdDisplayContainer]. AndroidAdDisplayContainer(super.params) : super.implementation() { final WeakReference weakThis = @@ -261,7 +261,7 @@ final class AndroidAdsLoaderCreationParams } /// Android implementation of [PlatformAdsLoader]. -final class AndroidAdsLoader extends PlatformAdsLoader { +base class AndroidAdsLoader extends PlatformAdsLoader { /// Constructs an [AndroidAdsLoader]. AndroidAdsLoader(super.params) : assert(params.container is AndroidAdDisplayContainer), @@ -362,7 +362,7 @@ class AndroidAdsManager extends PlatformAdsManager { @visibleForTesting AndroidAdsManager( ima.AdsManager manager, { - @visibleForTesting InteractiveMediaAdsProxy? proxy, + InteractiveMediaAdsProxy? proxy, }) : _manager = manager, _proxy = proxy ?? const InteractiveMediaAdsProxy(); From 3edc221c6f38a06ab07ca23e9be9225baf167e3d Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 13:09:18 -0400 Subject: [PATCH 56/76] separate some logic --- .../lib/interactive_media_ads.dart | 17 +- .../android/android_ad_display_container.dart | 159 +----------------- .../lib/src/android/android_ads_manager.dart | 85 ++++++++++ .../android/enum_converter_extensions.dart | 84 +++++++++ 4 files changed, 183 insertions(+), 162 deletions(-) create mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_manager.dart create mode 100644 packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart diff --git a/packages/interactive_media_ads/lib/interactive_media_ads.dart b/packages/interactive_media_ads/lib/interactive_media_ads.dart index 1c09ca5c9ef..b9e2aee98a3 100644 --- a/packages/interactive_media_ads/lib/interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/interactive_media_ads.dart @@ -5,8 +5,15 @@ export 'src/ad_display_container.dart'; export 'src/ads_loader.dart'; export 'src/ads_manager_delegate.dart'; -export 'src/android/android_interactive_media_ads.dart'; -export 'src/platform_interface/ad_error.dart'; -export 'src/platform_interface/ad_event.dart'; -export 'src/platform_interface/ads_request.dart'; -export 'src/platform_interface/platform_ads_loader.dart' show AdsLoadErrorData; +export 'src/android/android_interactive_media_ads.dart' + show AndroidInteractiveMediaAds; +export 'src/platform_interface/platform_interface.dart' + show + AdError, + AdErrorCode, + AdErrorEvent, + AdErrorType, + AdEvent, + AdEventType, + AdsLoadErrorData, + AdsRequest; diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 57ed11b647c..140b0968263 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -7,7 +7,9 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; import '../platform_interface/platform_interface.dart'; +import 'android_ads_manager.dart'; import 'android_view_widget.dart'; +import 'enum_converter_extensions.dart'; import 'interactive_media_ads.g.dart' as ima; import 'interactive_media_ads_proxy.dart'; import 'platform_views_service_proxy.dart'; @@ -356,165 +358,8 @@ base class AndroidAdsLoader extends PlatformAdsLoader { } } -/// Android implementation of [PlatformAdsManager]. -class AndroidAdsManager extends PlatformAdsManager { - /// Constructs an [AndroidAdsManager]. - @visibleForTesting - AndroidAdsManager( - ima.AdsManager manager, { - InteractiveMediaAdsProxy? proxy, - }) : _manager = manager, - _proxy = proxy ?? const InteractiveMediaAdsProxy(); - - final ima.AdsManager _manager; - final InteractiveMediaAdsProxy _proxy; - - PlatformAdsManagerDelegate? _managerDelegate; - - @override - Future destroy() { - return _manager.destroy(); - } - - @override - Future init(AdsManagerInitParams params) { - return _manager.init(); - } - - @override - Future setAdsManagerDelegate( - PlatformAdsManagerDelegate delegate, - ) async { - _managerDelegate = delegate; - _addListeners(WeakReference(this)); - } - - @override - Future start(AdsManagerStartParams params) { - return _manager.start(); - } - - static void _addListeners(WeakReference weakThis) { - final InteractiveMediaAdsProxy proxy = weakThis.target!._proxy; - weakThis.target?._manager.addAdEventListener( - proxy.newAdEventListener( - onAdEvent: (_, ima.AdEvent event) { - late final AdEventType eventType; - - switch (event.type) { - case ima.AdEventType.allAdsCompleted: - eventType = AdEventType.allAdsCompleted; - case ima.AdEventType.completed: - eventType = AdEventType.complete; - case ima.AdEventType.contentPauseRequested: - eventType = AdEventType.contentPauseRequested; - case ima.AdEventType.contentResumeRequested: - eventType = AdEventType.contentResumeRequested; - case ima.AdEventType.loaded: - eventType = AdEventType.loaded; - case ima.AdEventType.clicked: - eventType = AdEventType.clicked; - case ima.AdEventType.unknown: - case ima.AdEventType.adBreakReady: - case ima.AdEventType.adBreakEnded: - case ima.AdEventType.adBreakFetchError: - case ima.AdEventType.adBreakStarted: - case ima.AdEventType.adBuffering: - case ima.AdEventType.adPeriodEnded: - case ima.AdEventType.adPeriodStarted: - case ima.AdEventType.adProgress: - case ima.AdEventType.cuepointsChanged: - case ima.AdEventType.firstQuartile: - case ima.AdEventType.iconFallbackImageClosed: - case ima.AdEventType.iconTapped: - case ima.AdEventType.log: - case ima.AdEventType.midpoint: - case ima.AdEventType.paused: - case ima.AdEventType.resumed: - case ima.AdEventType.skippableStateChanged: - case ima.AdEventType.skipped: - case ima.AdEventType.started: - case ima.AdEventType.tapped: - case ima.AdEventType.thirdQuartile: - return; - } - weakThis.target?._managerDelegate?.params.onAdEvent - ?.call(AdEvent(type: eventType)); - }, - ), - ); - weakThis.target?._manager.addAdErrorListener( - proxy.newAdErrorListener( - onAdError: (_, ima.AdErrorEvent event) { - weakThis.target?._managerDelegate?.params.onAdErrorEvent?.call( - AdErrorEvent( - error: AdError( - type: event.error.errorType.asInterfaceErrorType(), - code: event.error.errorCode.asInterfaceErrorCode(), - message: event.error.message, - ), - ), - ); - weakThis.target?._manager.discardAdBreak(); - }, - ), - ); - } -} - /// Android implementation of [PlatformAdsManagerDelegate]. final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { /// Constructs an [AndroidAdsManagerDelegate]. AndroidAdsManagerDelegate(super.params) : super.implementation(); } - -extension on ima.AdErrorType { - AdErrorType asInterfaceErrorType() { - return switch (this) { - ima.AdErrorType.load => AdErrorType.loading, - ima.AdErrorType.play => AdErrorType.playing, - ima.AdErrorType.unknown => AdErrorType.unknown, - }; - } -} - -extension on ima.AdErrorCode { - AdErrorCode asInterfaceErrorCode() { - return switch (this) { - ima.AdErrorCode.adsPlayerWasNotProvided => - AdErrorCode.adsPlayerNotProvided, - ima.AdErrorCode.adsRequestNetworkError => - AdErrorCode.adsRequestNetworkError, - ima.AdErrorCode.companionAdLoadingFailed => - AdErrorCode.companionAdLoadingFailed, - ima.AdErrorCode.failedToRequestAds => AdErrorCode.failedToRequestAds, - ima.AdErrorCode.internalError => AdErrorCode.internalError, - ima.AdErrorCode.invalidArguments => AdErrorCode.invalidArguments, - ima.AdErrorCode.overlayAdLoadingFailed => - AdErrorCode.overlayAdLoadingFailed, - ima.AdErrorCode.overlayAdPlayingFailed => - AdErrorCode.overlayAdPlayingFailed, - ima.AdErrorCode.playlistNoContentTracking => - AdErrorCode.playlistNoContentTracking, - ima.AdErrorCode.unexpectedAdsLoadedEvent => - AdErrorCode.unexpectedAdsLoadedEvent, - ima.AdErrorCode.unknownAdResponse => AdErrorCode.unknownAdResponse, - ima.AdErrorCode.unknownError => AdErrorCode.unknownError, - ima.AdErrorCode.vastAssetNotFound => AdErrorCode.vastAssetNotFound, - ima.AdErrorCode.vastEmptyResponse => AdErrorCode.vastEmptyResponse, - ima.AdErrorCode.vastLinearAssetMismatch => - AdErrorCode.vastLinearAssetMismatch, - ima.AdErrorCode.vastLoadTimeout => AdErrorCode.vastLoadTimeout, - ima.AdErrorCode.vastMalformedResponse => - AdErrorCode.vastMalformedResponse, - ima.AdErrorCode.vastMediaLoadTimeout => AdErrorCode.vastMediaLoadTimeout, - ima.AdErrorCode.vastNonlinearAssetMismatch => - AdErrorCode.vastNonlinearAssetMismatch, - ima.AdErrorCode.vastNoAdsAfterWrapper => - AdErrorCode.vastNoAdsAfterWrapper, - ima.AdErrorCode.vastTooManyRedirects => AdErrorCode.vastTooManyRedirects, - ima.AdErrorCode.vastTraffickingError => AdErrorCode.vastTraffickingError, - ima.AdErrorCode.videoPlayError => AdErrorCode.videoPlayError, - }; - } -} diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart new file mode 100644 index 00000000000..2b282cebaf5 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart @@ -0,0 +1,85 @@ +// 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. + +import 'dart:async'; + +import 'package:flutter/widgets.dart'; + +import '../platform_interface/platform_interface.dart'; +import 'enum_converter_extensions.dart'; +import 'interactive_media_ads.g.dart' as ima; +import 'interactive_media_ads_proxy.dart'; + +/// Android implementation of [PlatformAdsManager]. +class AndroidAdsManager extends PlatformAdsManager { + /// Constructs an [AndroidAdsManager]. + @protected + AndroidAdsManager( + ima.AdsManager manager, { + InteractiveMediaAdsProxy? proxy, + }) : _manager = manager, + _proxy = proxy ?? const InteractiveMediaAdsProxy(); + + final ima.AdsManager _manager; + final InteractiveMediaAdsProxy _proxy; + + PlatformAdsManagerDelegate? _managerDelegate; + + @override + Future destroy() { + return _manager.destroy(); + } + + @override + Future init(AdsManagerInitParams params) { + return _manager.init(); + } + + @override + Future setAdsManagerDelegate( + PlatformAdsManagerDelegate delegate, + ) async { + _managerDelegate = delegate; + _addListeners(WeakReference(this)); + } + + @override + Future start(AdsManagerStartParams params) { + return _manager.start(); + } + + static void _addListeners(WeakReference weakThis) { + final InteractiveMediaAdsProxy proxy = weakThis.target!._proxy; + weakThis.target?._manager.addAdEventListener( + proxy.newAdEventListener( + onAdEvent: (_, ima.AdEvent event) { + late final AdEventType? eventType = + event.type.asInterfaceAdEventType(); + if (eventType == null) { + return; + } + + weakThis.target?._managerDelegate?.params.onAdEvent + ?.call(AdEvent(type: eventType)); + }, + ), + ); + weakThis.target?._manager.addAdErrorListener( + proxy.newAdErrorListener( + onAdError: (_, ima.AdErrorEvent event) { + weakThis.target?._managerDelegate?.params.onAdErrorEvent?.call( + AdErrorEvent( + error: AdError( + type: event.error.errorType.asInterfaceErrorType(), + code: event.error.errorCode.asInterfaceErrorCode(), + message: event.error.message, + ), + ), + ); + weakThis.target?._manager.discardAdBreak(); + }, + ), + ); + } +} diff --git a/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart b/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart new file mode 100644 index 00000000000..b3e020b6a00 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart @@ -0,0 +1,84 @@ +// 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. + +import '../platform_interface/platform_interface.dart'; +import 'interactive_media_ads.g.dart' as ima; + +/// Adds a method to convert native AdErrorType to platform interface +/// AdErrorType. +extension NativeAdErrorTypeConverter on ima.AdErrorType { + /// Converts [ima.AdErrorType] to [AdErrorType]. + AdErrorType asInterfaceErrorType() { + return switch (this) { + ima.AdErrorType.load => AdErrorType.loading, + ima.AdErrorType.play => AdErrorType.playing, + ima.AdErrorType.unknown => AdErrorType.unknown, + }; + } +} + +/// Adds a method to convert native AdEventType to platform interface +/// AdEventType. +extension NativeAdEventTypeConverter on ima.AdEventType { + /// Attempts to convert an [ima.AdEventType] to [AdEventType]. + /// + /// Returns null is the type is not supported by the platform interface. + AdEventType? asInterfaceAdEventType() { + return switch (this) { + ima.AdEventType.allAdsCompleted => AdEventType.allAdsCompleted, + ima.AdEventType.completed => AdEventType.complete, + ima.AdEventType.contentPauseRequested => + AdEventType.contentPauseRequested, + ima.AdEventType.contentResumeRequested => + AdEventType.contentResumeRequested, + ima.AdEventType.loaded => AdEventType.loaded, + ima.AdEventType.clicked => AdEventType.clicked, + _ => null, + }; + } +} + +/// Adds a method to convert native AdErrorCode to platform interface +/// AdErrorCode. +extension NativeAdErrorCodeConverter on ima.AdErrorCode { + /// Converts [ima.AdErrorCode] to [AdErrorCode]. + AdErrorCode asInterfaceErrorCode() { + return switch (this) { + ima.AdErrorCode.adsPlayerWasNotProvided => + AdErrorCode.adsPlayerNotProvided, + ima.AdErrorCode.adsRequestNetworkError => + AdErrorCode.adsRequestNetworkError, + ima.AdErrorCode.companionAdLoadingFailed => + AdErrorCode.companionAdLoadingFailed, + ima.AdErrorCode.failedToRequestAds => AdErrorCode.failedToRequestAds, + ima.AdErrorCode.internalError => AdErrorCode.internalError, + ima.AdErrorCode.invalidArguments => AdErrorCode.invalidArguments, + ima.AdErrorCode.overlayAdLoadingFailed => + AdErrorCode.overlayAdLoadingFailed, + ima.AdErrorCode.overlayAdPlayingFailed => + AdErrorCode.overlayAdPlayingFailed, + ima.AdErrorCode.playlistNoContentTracking => + AdErrorCode.playlistNoContentTracking, + ima.AdErrorCode.unexpectedAdsLoadedEvent => + AdErrorCode.unexpectedAdsLoadedEvent, + ima.AdErrorCode.unknownAdResponse => AdErrorCode.unknownAdResponse, + ima.AdErrorCode.unknownError => AdErrorCode.unknownError, + ima.AdErrorCode.vastAssetNotFound => AdErrorCode.vastAssetNotFound, + ima.AdErrorCode.vastEmptyResponse => AdErrorCode.vastEmptyResponse, + ima.AdErrorCode.vastLinearAssetMismatch => + AdErrorCode.vastLinearAssetMismatch, + ima.AdErrorCode.vastLoadTimeout => AdErrorCode.vastLoadTimeout, + ima.AdErrorCode.vastMalformedResponse => + AdErrorCode.vastMalformedResponse, + ima.AdErrorCode.vastMediaLoadTimeout => AdErrorCode.vastMediaLoadTimeout, + ima.AdErrorCode.vastNonlinearAssetMismatch => + AdErrorCode.vastNonlinearAssetMismatch, + ima.AdErrorCode.vastNoAdsAfterWrapper => + AdErrorCode.vastNoAdsAfterWrapper, + ima.AdErrorCode.vastTooManyRedirects => AdErrorCode.vastTooManyRedirects, + ima.AdErrorCode.vastTraffickingError => AdErrorCode.vastTraffickingError, + ima.AdErrorCode.videoPlayError => AdErrorCode.videoPlayError, + }; + } +} From 3893efe5a658ecc84a128aa426e5b9ba09ade284 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 13:21:50 -0400 Subject: [PATCH 57/76] separate class implementations --- .../android/android_ad_display_container.dart | 155 ++---------------- .../lib/src/android/android_ads_loader.dart | 139 ++++++++++++++++ .../lib/src/android/android_ads_manager.dart | 4 +- .../android/android_ads_manager_delegate.dart | 11 ++ .../android_interactive_media_ads.dart | 2 + .../android/interactive_media_ads_proxy.dart | 33 ++-- packages/interactive_media_ads/pubspec.yaml | 1 + .../test/android/ads_loader_test.dart | 1 + .../test/android/ads_manager_tests.dart | 3 +- 9 files changed, 189 insertions(+), 160 deletions(-) create mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_loader.dart create mode 100644 packages/interactive_media_ads/lib/src/android/android_ads_manager_delegate.dart diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 140b0968263..0205fa18c7b 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -5,11 +5,10 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; +import 'package:meta/meta.dart'; import '../platform_interface/platform_interface.dart'; -import 'android_ads_manager.dart'; import 'android_view_widget.dart'; -import 'enum_converter_extensions.dart'; import 'interactive_media_ads.g.dart' as ima; import 'interactive_media_ads_proxy.dart'; import 'platform_views_service_proxy.dart'; @@ -70,14 +69,17 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { late final ima.VideoView _videoView; ima.MediaPlayer? _mediaPlayer; - // Callbacks that must be called to update to the state of ad playback. - final Set _videoAdPlayerCallbacks = + /// Callbacks that must be called to update to the state of ad playback. + @internal + final Set videoAdPlayerCallbacks = {}; // Handles ad playback callbacks from the IMA SDK. late final ima.VideoAdPlayer _videoAdPlayer; - ima.AdDisplayContainer? _adDisplayContainer; + /// The native Android AdDisplayContainer. + @internal + ima.AdDisplayContainer? adDisplayContainer; // Currently loaded ad. ima.AdMediaInfo? _loadedAdMediaInfo; @@ -104,7 +106,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { view: _frameLayout, platformViewsServiceProxy: _androidParams._platformViewsProxy, onPlatformViewCreated: () async { - _adDisplayContainer = await _androidParams._imaProxy + adDisplayContainer = await _androidParams._imaProxy .createAdDisplayContainerImaSdkFactory( _frameLayout, _videoAdPlayer, @@ -134,7 +136,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { await Future.wait( >[ _videoAdPlayer.setAdProgress(currentProgress), - ..._videoAdPlayerCallbacks.map( + ...videoAdPlayerCallbacks.map( (ima.VideoAdPlayerCallback callback) async { await callback.onAdProgress( _loadedAdMediaInfo!, @@ -164,7 +166,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { if (container != null) { weakThis.target?._resetPlayer(); for (final ima.VideoAdPlayerCallback callback - in container._videoAdPlayerCallbacks) { + in container.videoAdPlayerCallbacks) { callback.onEnded(container._loadedAdMediaInfo!); } } @@ -187,7 +189,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { if (container != null) { container._resetPlayer(); for (final ima.VideoAdPlayerCallback callback - in container._videoAdPlayerCallbacks) { + in container.videoAdPlayerCallbacks) { callback.onError(container._loadedAdMediaInfo!); } } @@ -200,10 +202,10 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ) { return weakThis.target!._androidParams._imaProxy.newVideoAdPlayer( addCallback: (_, ima.VideoAdPlayerCallback callback) { - weakThis.target?._videoAdPlayerCallbacks.add(callback); + weakThis.target?.videoAdPlayerCallbacks.add(callback); }, removeCallback: (_, ima.VideoAdPlayerCallback callback) { - weakThis.target?._videoAdPlayerCallbacks.remove(callback); + weakThis.target?.videoAdPlayerCallbacks.remove(callback); }, loadAd: (_, ima.AdMediaInfo adMediaInfo, __) { weakThis.target?._loadedAdMediaInfo = adMediaInfo; @@ -232,134 +234,3 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ); } } - -/// Android implementation of [PlatformAdsLoaderCreationParams]. -final class AndroidAdsLoaderCreationParams - extends PlatformAdsLoaderCreationParams { - /// Constructs a [AndroidAdsLoaderCreationParams]. - const AndroidAdsLoaderCreationParams({ - required super.container, - required super.onAdsLoaded, - required super.onAdsLoadError, - @visibleForTesting InteractiveMediaAdsProxy? proxy, - }) : _proxy = proxy ?? const InteractiveMediaAdsProxy(), - super(); - - /// Creates a [AndroidAdsLoaderCreationParams] from an instance of - /// [PlatformAdsLoaderCreationParams]. - factory AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( - PlatformAdsLoaderCreationParams params, { - @visibleForTesting InteractiveMediaAdsProxy? proxy, - }) { - return AndroidAdsLoaderCreationParams( - container: params.container, - onAdsLoaded: params.onAdsLoaded, - onAdsLoadError: params.onAdsLoadError, - proxy: proxy, - ); - } - - final InteractiveMediaAdsProxy _proxy; -} - -/// Android implementation of [PlatformAdsLoader]. -base class AndroidAdsLoader extends PlatformAdsLoader { - /// Constructs an [AndroidAdsLoader]. - AndroidAdsLoader(super.params) - : assert(params.container is AndroidAdDisplayContainer), - assert( - (params.container as AndroidAdDisplayContainer)._adDisplayContainer != - null, - 'Ensure the AdDisplayContainer has been added to the Widget tree before creating an AdsLoader.', - ), - super.implementation() { - _adsLoaderFuture = _createAdsLoader(); - } - - late final ima.ImaSdkFactory _sdkFactory = - _androidParams._proxy.instanceImaSdkFactory(); - late Future _adsLoaderFuture; - - late final AndroidAdsLoaderCreationParams _androidParams = - params is AndroidAdsLoaderCreationParams - ? params as AndroidAdsLoaderCreationParams - : AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( - params, - ); - - @override - Future contentComplete() async { - final Set callbacks = - (params.container as AndroidAdDisplayContainer)._videoAdPlayerCallbacks; - await Future.wait( - callbacks.map( - (ima.VideoAdPlayerCallback callback) => callback.onContentComplete(), - ), - ); - } - - @override - Future requestAds(AdsRequest request) async { - final ima.AdsLoader adsLoader = await _adsLoaderFuture; - - final ima.AdsRequest androidRequest = await _sdkFactory.createAdsRequest(); - - await Future.wait(>[ - androidRequest.setAdTagUrl(request.adTagUrl), - adsLoader.requestAds(androidRequest), - ]); - } - - Future _createAdsLoader() async { - final ima.ImaSdkSettings settings = - await _sdkFactory.createImaSdkSettings(); - - final ima.AdsLoader adsLoader = await _sdkFactory.createAdsLoader( - settings, - (params.container as AndroidAdDisplayContainer)._adDisplayContainer!, - ); - - _addListeners(WeakReference(this), adsLoader); - - return adsLoader; - } - - static void _addListeners( - WeakReference weakThis, - ima.AdsLoader adsLoader, - ) { - final InteractiveMediaAdsProxy proxy = - weakThis.target!._androidParams._proxy; - adsLoader.addAdsLoadedListener(proxy.newAdsLoadedListener( - onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { - weakThis.target?.params.onAdsLoaded( - PlatformOnAdsLoadedData( - manager: AndroidAdsManager( - event.manager, - proxy: weakThis.target?._androidParams._proxy, - ), - ), - ); - }, - )); - adsLoader.addAdErrorListener(proxy.newAdErrorListener( - onAdError: (_, ima.AdErrorEvent event) { - weakThis.target?.params.onAdsLoadError( - AdsLoadErrorData( - error: AdError( - type: event.error.errorType.asInterfaceErrorType(), - code: event.error.errorCode.asInterfaceErrorCode(), - message: event.error.message, - ), - ), - ); - }, - )); - } -} - -/// Android implementation of [PlatformAdsManagerDelegate]. -final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { - /// Constructs an [AndroidAdsManagerDelegate]. - AndroidAdsManagerDelegate(super.params) : super.implementation(); -} diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart new file mode 100644 index 00000000000..cd949b26446 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart @@ -0,0 +1,139 @@ +// 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. + +import 'dart:async'; + +import 'package:flutter/widgets.dart'; + +import '../platform_interface/platform_interface.dart'; +import 'android_ad_display_container.dart'; +import 'android_ads_manager.dart'; +import 'enum_converter_extensions.dart'; +import 'interactive_media_ads.g.dart' as ima; +import 'interactive_media_ads_proxy.dart'; + +/// Android implementation of [PlatformAdsLoaderCreationParams]. +final class AndroidAdsLoaderCreationParams + extends PlatformAdsLoaderCreationParams { + /// Constructs a [AndroidAdsLoaderCreationParams]. + const AndroidAdsLoaderCreationParams({ + required super.container, + required super.onAdsLoaded, + required super.onAdsLoadError, + @visibleForTesting InteractiveMediaAdsProxy? proxy, + }) : _proxy = proxy ?? const InteractiveMediaAdsProxy(), + super(); + + /// Creates a [AndroidAdsLoaderCreationParams] from an instance of + /// [PlatformAdsLoaderCreationParams]. + factory AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( + PlatformAdsLoaderCreationParams params, { + @visibleForTesting InteractiveMediaAdsProxy? proxy, + }) { + return AndroidAdsLoaderCreationParams( + container: params.container, + onAdsLoaded: params.onAdsLoaded, + onAdsLoadError: params.onAdsLoadError, + proxy: proxy, + ); + } + + final InteractiveMediaAdsProxy _proxy; +} + +/// Android implementation of [PlatformAdsLoader]. +base class AndroidAdsLoader extends PlatformAdsLoader { + /// Constructs an [AndroidAdsLoader]. + AndroidAdsLoader(super.params) + : assert(params.container is AndroidAdDisplayContainer), + assert( + (params.container as AndroidAdDisplayContainer).adDisplayContainer != + null, + 'Ensure the AdDisplayContainer has been added to the Widget tree before creating an AdsLoader.', + ), + super.implementation() { + _adsLoaderFuture = _createAdsLoader(); + } + + late final ima.ImaSdkFactory _sdkFactory = + _androidParams._proxy.instanceImaSdkFactory(); + late Future _adsLoaderFuture; + + late final AndroidAdsLoaderCreationParams _androidParams = + params is AndroidAdsLoaderCreationParams + ? params as AndroidAdsLoaderCreationParams + : AndroidAdsLoaderCreationParams.fromPlatformAdsLoaderCreationParams( + params, + ); + + @override + Future contentComplete() async { + final Set callbacks = + (params.container as AndroidAdDisplayContainer).videoAdPlayerCallbacks; + await Future.wait( + callbacks.map( + (ima.VideoAdPlayerCallback callback) => callback.onContentComplete(), + ), + ); + } + + @override + Future requestAds(AdsRequest request) async { + final ima.AdsLoader adsLoader = await _adsLoaderFuture; + + final ima.AdsRequest androidRequest = await _sdkFactory.createAdsRequest(); + + await Future.wait(>[ + androidRequest.setAdTagUrl(request.adTagUrl), + adsLoader.requestAds(androidRequest), + ]); + } + + Future _createAdsLoader() async { + final ima.ImaSdkSettings settings = + await _sdkFactory.createImaSdkSettings(); + + final ima.AdsLoader adsLoader = await _sdkFactory.createAdsLoader( + settings, + (params.container as AndroidAdDisplayContainer).adDisplayContainer!, + ); + + _addListeners(WeakReference(this), adsLoader); + + return adsLoader; + } + + static void _addListeners( + WeakReference weakThis, + ima.AdsLoader adsLoader, + ) { + final InteractiveMediaAdsProxy proxy = + weakThis.target!._androidParams._proxy; + adsLoader.addAdsLoadedListener(proxy.newAdsLoadedListener( + onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { + weakThis.target?.params.onAdsLoaded( + PlatformOnAdsLoadedData( + manager: AndroidAdsManager( + event.manager, + proxy: weakThis.target?._androidParams._proxy, + ), + ), + ); + }, + )); + adsLoader.addAdErrorListener(proxy.newAdErrorListener( + onAdError: (_, ima.AdErrorEvent event) { + weakThis.target?.params.onAdsLoadError( + AdsLoadErrorData( + error: AdError( + type: event.error.errorType.asInterfaceErrorType(), + code: event.error.errorCode.asInterfaceErrorCode(), + message: event.error.message, + ), + ), + ); + }, + )); + } +} diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart index 2b282cebaf5..402fa475934 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart @@ -4,7 +4,7 @@ import 'dart:async'; -import 'package:flutter/widgets.dart'; +import 'package:meta/meta.dart'; import '../platform_interface/platform_interface.dart'; import 'enum_converter_extensions.dart'; @@ -14,7 +14,7 @@ import 'interactive_media_ads_proxy.dart'; /// Android implementation of [PlatformAdsManager]. class AndroidAdsManager extends PlatformAdsManager { /// Constructs an [AndroidAdsManager]. - @protected + @internal AndroidAdsManager( ima.AdsManager manager, { InteractiveMediaAdsProxy? proxy, diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager_delegate.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager_delegate.dart new file mode 100644 index 00000000000..24ab7eca926 --- /dev/null +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager_delegate.dart @@ -0,0 +1,11 @@ +// 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. + +import '../platform_interface/platform_interface.dart'; + +/// Android implementation of [PlatformAdsManagerDelegate]. +final class AndroidAdsManagerDelegate extends PlatformAdsManagerDelegate { + /// Constructs an [AndroidAdsManagerDelegate]. + AndroidAdsManagerDelegate(super.params) : super.implementation(); +} diff --git a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart index 0110c051036..2406520d553 100644 --- a/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart +++ b/packages/interactive_media_ads/lib/src/android/android_interactive_media_ads.dart @@ -7,6 +7,8 @@ import '../platform_interface/platform_ad_display_container.dart'; import '../platform_interface/platform_ads_loader.dart'; import '../platform_interface/platform_ads_manager_delegate.dart'; import 'android_ad_display_container.dart'; +import 'android_ads_loader.dart'; +import 'android_ads_manager_delegate.dart'; /// Android implementation of [InteractiveMediaAdsPlatform]. final class AndroidInteractiveMediaAds extends InteractiveMediaAdsPlatform { diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart index 86aa3fdc73b..6c8a0b36b32 100644 --- a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart @@ -88,25 +88,28 @@ class InteractiveMediaAdsProxy { }) newVideoAdPlayer; /// Constructs [AdsLoadedListener]. - final AdsLoadedListener Function( - {required void Function( - AdsLoadedListener, - AdsManagerLoadedEvent, - ) onAdsManagerLoaded}) newAdsLoadedListener; + final AdsLoadedListener Function({ + required void Function( + AdsLoadedListener, + AdsManagerLoadedEvent, + ) onAdsManagerLoaded, + }) newAdsLoadedListener; /// Constructs [AdErrorListener]. - final AdErrorListener Function( - {required void Function( - AdErrorListener, - AdErrorEvent, - ) onAdError}) newAdErrorListener; + final AdErrorListener Function({ + required void Function( + AdErrorListener, + AdErrorEvent, + ) onAdError, + }) newAdErrorListener; /// Constructs [AdEventListener]. - final AdEventListener Function( - {required void Function( - AdEventListener, - AdEvent, - ) onAdEvent}) newAdEventListener; + final AdEventListener Function({ + required void Function( + AdEventListener, + AdEvent, + ) onAdEvent, + }) newAdEventListener; /// Calls to [ImaSdkFactory.createAdDisplayContainer]. final Future Function( diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index dd01b6420ec..bcd6af0689e 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -21,6 +21,7 @@ flutter: dependencies: flutter: sdk: flutter + meta: ^1.14.0 dev_dependencies: build_runner: ^2.1.4 diff --git a/packages/interactive_media_ads/test/android/ads_loader_test.dart b/packages/interactive_media_ads/test/android/ads_loader_test.dart index 6e2621381df..3446c4e899a 100644 --- a/packages/interactive_media_ads/test/android/ads_loader_test.dart +++ b/packages/interactive_media_ads/test/android/ads_loader_test.dart @@ -8,6 +8,7 @@ import 'package:flutter/services.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; +import 'package:interactive_media_ads/src/android/android_ads_loader.dart'; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as ima; import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart'; diff --git a/packages/interactive_media_ads/test/android/ads_manager_tests.dart b/packages/interactive_media_ads/test/android/ads_manager_tests.dart index 47d65d5b6ad..b05811102ca 100644 --- a/packages/interactive_media_ads/test/android/ads_manager_tests.dart +++ b/packages/interactive_media_ads/test/android/ads_manager_tests.dart @@ -3,7 +3,8 @@ // found in the LICENSE file. import 'package:flutter_test/flutter_test.dart'; -import 'package:interactive_media_ads/src/android/android_ad_display_container.dart'; +import 'package:interactive_media_ads/src/android/android_ads_manager.dart'; +import 'package:interactive_media_ads/src/android/android_ads_manager_delegate.dart'; import 'package:interactive_media_ads/src/android/interactive_media_ads.g.dart' as ima; import 'package:interactive_media_ads/src/android/interactive_media_ads_proxy.dart'; From a30c9fc4b553568de97555dd8019739d1e6c34a0 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 13:45:05 -0400 Subject: [PATCH 58/76] doc improvements --- .../android/android_ad_display_container.dart | 16 +++---- .../lib/src/android/android_ads_loader.dart | 47 ++++++++++--------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 0205fa18c7b..c4942d3fbbf 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -69,7 +69,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { late final ima.VideoView _videoView; ima.MediaPlayer? _mediaPlayer; - /// Callbacks that must be called to update to the state of ad playback. + /// Callbacks that update the state of ad playback. @internal final Set videoAdPlayerCallbacks = {}; @@ -84,13 +84,14 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { // Currently loaded ad. ima.AdMediaInfo? _loadedAdMediaInfo; - // The saved ad position, used to resumed ad playback following an ad + // The saved ad position, used to resume ad playback following an ad // click-through. int _savedAdPosition = 0; - // Timer used to periodically update the IMA SDK the progress of the currently - // playing ad. + // Timer used to periodically update the IMA SDK of the progress of the + // currently playing ad. Timer? _adProgressTimer; + int? _adDuration; late final AndroidAdDisplayContainerCreationParams _androidParams = @@ -122,8 +123,8 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _adDuration = null; } - // Starts periodically updating the IMA SDK the current progress of the - // currently playing ad. + // Starts periodically updating the IMA SDK the progress of the currently + // playing ad. void _startAdTracking() { _adProgressTimer = Timer.periodic( const Duration(milliseconds: _progressPollingMs), @@ -150,8 +151,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ); } - // Stops periodically updating the IMA SDK the current progress of the - // currently playing ad. + // Stops updating the IMA SDK the progress of the currently playing ad. void _stopAdTracking() { _adProgressTimer?.cancel(); _adProgressTimer = null; diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart index cd949b26446..2b172754af0 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart @@ -110,30 +110,31 @@ base class AndroidAdsLoader extends PlatformAdsLoader { ) { final InteractiveMediaAdsProxy proxy = weakThis.target!._androidParams._proxy; - adsLoader.addAdsLoadedListener(proxy.newAdsLoadedListener( - onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { - weakThis.target?.params.onAdsLoaded( - PlatformOnAdsLoadedData( - manager: AndroidAdsManager( - event.manager, - proxy: weakThis.target?._androidParams._proxy, + adsLoader + ..addAdsLoadedListener(proxy.newAdsLoadedListener( + onAdsManagerLoaded: (_, ima.AdsManagerLoadedEvent event) { + weakThis.target?.params.onAdsLoaded( + PlatformOnAdsLoadedData( + manager: AndroidAdsManager( + event.manager, + proxy: weakThis.target?._androidParams._proxy, + ), ), - ), - ); - }, - )); - adsLoader.addAdErrorListener(proxy.newAdErrorListener( - onAdError: (_, ima.AdErrorEvent event) { - weakThis.target?.params.onAdsLoadError( - AdsLoadErrorData( - error: AdError( - type: event.error.errorType.asInterfaceErrorType(), - code: event.error.errorCode.asInterfaceErrorCode(), - message: event.error.message, + ); + }, + )) + ..addAdErrorListener(proxy.newAdErrorListener( + onAdError: (_, ima.AdErrorEvent event) { + weakThis.target?.params.onAdsLoadError( + AdsLoadErrorData( + error: AdError( + type: event.error.errorType.asInterfaceErrorType(), + code: event.error.errorCode.asInterfaceErrorCode(), + message: event.error.message, + ), ), - ), - ); - }, - )); + ); + }, + )); } } From 8fa430b0b2b751eee5357f1b588ba84bc8731b9c Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 13:51:44 -0400 Subject: [PATCH 59/76] lower meta version to 1.12.0 --- packages/interactive_media_ads/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index bcd6af0689e..6fd1af74343 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -21,7 +21,7 @@ flutter: dependencies: flutter: sdk: flutter - meta: ^1.14.0 + meta: ^1.12.0 dev_dependencies: build_runner: ^2.1.4 From 220e2f00351145992be5fc1cab55944a4ae28ff5 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 20 May 2024 14:02:24 -0400 Subject: [PATCH 60/76] move meta to 1.10.0 --- packages/interactive_media_ads/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 6fd1af74343..cfa07c385b4 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -21,7 +21,7 @@ flutter: dependencies: flutter: sdk: flutter - meta: ^1.12.0 + meta: ^1.10.0 dev_dependencies: build_runner: ^2.1.4 From f55805fa491f7989ee79bd775586af681d7cb597 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 21 May 2024 14:31:20 -0400 Subject: [PATCH 61/76] only null ad duration on stop and error --- .../lib/src/android/android_ad_display_container.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index c4942d3fbbf..6f723e25822 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -120,7 +120,6 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { void _resetPlayer() { _mediaPlayer = null; _savedAdPosition = 0; - _adDuration = null; } // Starts periodically updating the IMA SDK the progress of the currently @@ -192,6 +191,8 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { in container.videoAdPlayerCallbacks) { callback.onError(container._loadedAdMediaInfo!); } + container._loadedAdMediaInfo = null; + container._adDuration = null; } }, ); @@ -229,6 +230,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { container._stopAdTracking(); container._resetPlayer(); container._loadedAdMediaInfo = null; + container._adDuration = null; } }, ); From 284098a68e82e86d7f346d2d25b34340a969266e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 21 May 2024 14:56:42 -0400 Subject: [PATCH 62/76] stop any ad tracking before starting a new one --- .../src/android/android_ad_display_container.dart | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index 6f723e25822..f5292e3ceaf 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -124,7 +124,9 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { // Starts periodically updating the IMA SDK the progress of the currently // playing ad. - void _startAdTracking() { + void _startAdProgressTracking() { + // Stop any previous ad tracking. + _stopAdProgressTracking(); _adProgressTimer = Timer.periodic( const Duration(milliseconds: _progressPollingMs), (Timer timer) async { @@ -151,7 +153,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { } // Stops updating the IMA SDK the progress of the currently playing ad. - void _stopAdTracking() { + void _stopAdProgressTracking() { _adProgressTimer?.cancel(); _adProgressTimer = null; } @@ -181,7 +183,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { } await player.start(); - container?._startAdTracking(); + container?._startAdProgressTracking(); }, onError: (_, __, ___, ____) { final AndroidAdDisplayContainer? container = weakThis.target; @@ -217,7 +219,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { await container._mediaPlayer!.pause(); container._savedAdPosition = await container._videoView.getCurrentPosition(); - container._stopAdTracking(); + container._stopAdProgressTracking(); } }, playAd: (_, ima.AdMediaInfo adMediaInfo) { @@ -227,7 +229,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { stopAd: (_, __) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - container._stopAdTracking(); + container._stopAdProgressTracking(); container._resetPlayer(); container._loadedAdMediaInfo = null; container._adDuration = null; From 891f4d4e42cdfa05b3969dfb84decb57e1eab44e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Tue, 21 May 2024 20:19:26 -0400 Subject: [PATCH 63/76] stop ad progress tracking on video completion --- .../lib/src/android/android_ad_display_container.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index f5292e3ceaf..f6cf2ee6b26 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -165,7 +165,8 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { onCompletion: (_, __) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - weakThis.target?._resetPlayer(); + container._resetPlayer(); + container._stopAdProgressTracking(); for (final ima.VideoAdPlayerCallback callback in container.videoAdPlayerCallbacks) { callback.onEnded(container._loadedAdMediaInfo!); From 9ada3ef93c2531560c2ce69675e740734f3756a7 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 30 May 2024 12:37:44 -0400 Subject: [PATCH 64/76] change generated kotlin library name --- ...activeMediaAdsLibrary.kt => InteractiveMediaAdsLibrary.g.kt} | 0 .../pigeons/interactive_media_ads_android.dart | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/{GeneratedInteractiveMediaAdsLibrary.kt => InteractiveMediaAdsLibrary.g.kt} (100%) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt similarity index 100% rename from packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt rename to packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt 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 9124e7bf9dd..e9b108ed0ec 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -11,7 +11,7 @@ // copyrightHeader: 'pigeons/copyright.txt', // dartOut: 'lib/src/android/interactive_media_ads.g.dart', // kotlinOut: -// 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/GeneratedInteractiveMediaAdsLibrary.kt', +// 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt', // kotlinOptions: KotlinOptions( // package: 'dev.flutter.packages.interactive_media_ads', // ), From 84d1ff561115eba3365dcaa7cd2c01565588d9b8 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Thu, 30 May 2024 15:51:42 -0400 Subject: [PATCH 65/76] docs for kotlin classes --- .../interactive_media_ads/AdDisplayContainerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdErrorEventProxyApi.kt | 6 ++++++ .../interactive_media_ads/AdErrorListenerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdErrorProxyApi.kt | 6 ++++++ .../interactive_media_ads/AdEventListenerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdEventProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdMediaInfoProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdPodInfoProxyApi.kt | 6 ++++++ .../interactive_media_ads/AdsLoadedListenerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdsLoaderProxyApi.kt | 6 ++++++ .../interactive_media_ads/AdsManagerLoadedEventProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdsManagerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 6 ++++++ .../interactive_media_ads/BaseDisplayContainerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/BaseManagerProxyApi.kt | 6 ++++++ .../ContentProgressProviderProxyApi.kt | 7 +++++++ .../packages/interactive_media_ads/FrameLayoutProxyApi.kt | 6 ++++++ .../interactive_media_ads/ImaSdkFactoryProxyApi.kt | 6 ++++++ .../interactive_media_ads/ImaSdkSettingsProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/MediaPlayerProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/ProxyApiRegistrar.kt | 4 ++++ .../interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt | 6 ++++++ .../interactive_media_ads/VideoAdPlayerProxyApi.kt | 6 ++++++ .../interactive_media_ads/VideoProgressUpdateProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/VideoViewProxyApi.kt | 6 ++++++ .../packages/interactive_media_ads/ViewGroupProxyApi.kt | 6 ++++++ .../flutter/packages/interactive_media_ads/ViewProxyApi.kt | 6 ++++++ 27 files changed, 161 insertions(+) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt index aabf5012511..225abe61266 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdDisplayContainerProxyApi.kt @@ -4,5 +4,11 @@ package dev.flutter.packages.interactive_media_ads +/** + * ProxyApi implementation for [com.google.ads.interactivemedia.v3.api.AdDisplayContainer]. + * + *

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 AdDisplayContainerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdDisplayContainer(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt index ae4446c8061..63e52492cd8 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorEventProxyApi.kt @@ -7,6 +7,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError import com.google.ads.interactivemedia.v3.api.AdErrorEvent +/** + * ProxyApi implementation for [AdErrorEvent]. + * + *

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 AdErrorEventProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdErrorEvent(pigeonRegistrar) { override fun error(pigeon_instance: AdErrorEvent): AdError { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt index b16f7016160..0fc8ee25333 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorListenerProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdErrorEvent +/** + * ProxyApi implementation for [AdErrorEvent.AdErrorListener]. + * + *

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 AdErrorListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdErrorListener(pigeonRegistrar) { internal class AdErrorListenerImpl(val api: AdErrorListenerProxyApi) : diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt index 2c9a560f3b3..dfaf8289134 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdError +/** + * ProxyApi implementation for [AdError]. + * + *

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 AdErrorProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdError(pigeonRegistrar) { override fun errorCode(pigeon_instance: AdError): AdErrorCode { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt index 5a51b57a4df..9037799d1a8 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventListenerProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdEvent +/** + * ProxyApi implementation for [AdEvent.AdEventListener]. + * + *

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 AdEventListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdEventListener(pigeonRegistrar) { internal class AdEventListenerImpl(val api: AdEventListenerProxyApi) : AdEvent.AdEventListener { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt index 30fca204086..c490a1643c9 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdEventProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdEvent +/** + * ProxyApi implementation for [AdEvent]. + * + *

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 AdEventProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdEvent(pigeonRegistrar) { override fun type(pigeon_instance: AdEvent): AdEventType { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt index c9483f360ad..cb1e03500b1 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdMediaInfoProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo +/** + * ProxyApi implementation for [AdMediaInfo]. + * + *

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 AdMediaInfoProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdMediaInfo(pigeonRegistrar) { override fun url(pigeon_instance: AdMediaInfo): String { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt index 94c8614522a..367d5f5416a 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdPodInfoProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdPodInfo +/** + * ProxyApi implementation for [AdPodInfo]. + * + *

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 AdPodInfoProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdPodInfo(pigeonRegistrar) { override fun adPosition(pigeon_instance: AdPodInfo): Long { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt index 2b7d5d12cfb..2054e84dac3 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoadedListenerProxyApi.kt @@ -7,6 +7,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent +/** + * ProxyApi implementation for [AdsLoader.AdsLoadedListener]. + * + *

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 AdsLoadedListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsLoadedListener(pigeonRegistrar) { internal class AdsLoadedListenerImpl(val api: AdsLoadedListenerProxyApi) : diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt index c38275a4706..5b5d1d7721e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsLoaderProxyApi.kt @@ -8,6 +8,12 @@ import com.google.ads.interactivemedia.v3.api.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdsLoader import com.google.ads.interactivemedia.v3.api.AdsRequest +/** + * ProxyApi implementation for [AdsLoader]. + * + *

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 AdsLoaderProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsLoader(pigeonRegistrar) { override fun addAdErrorListener( diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt index 9d245fae5b9..1374ecde4a1 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerLoadedEventProxyApi.kt @@ -7,6 +7,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsManager import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent +/** + * ProxyApi implementation for [AdsManagerLoadedEvent]. + * + *

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 AdsManagerLoadedEventProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsManagerLoadedEvent(pigeonRegistrar) { override fun manager(pigeon_instance: AdsManagerLoadedEvent): AdsManager { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt index 78c7b97e9b8..022a81417e2 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsManagerProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsManager +/** + * ProxyApi implementation for [AdsManager]. + * + *

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 AdsManagerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsManager(pigeonRegistrar) { override fun discardAdBreak(pigeon_instance: AdsManager) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt index 1babfc97537..eb9555a9b19 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 @@ -7,6 +7,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.AdsRequest import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider +/** + * ProxyApi implementation for [AdsRequest]. + * + *

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 AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsRequest(pigeonRegistrar) { 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/BaseDisplayContainerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt index 3be0dd5cf94..6499138ad9c 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseDisplayContainerProxyApi.kt @@ -4,5 +4,11 @@ package dev.flutter.packages.interactive_media_ads +/** + * ProxyApi implementation for [com.google.ads.interactivemedia.v3.api.BaseDisplayContainer]. + * + *

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 BaseDisplayContainerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiBaseDisplayContainer(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt index cb1af35d48b..92d7558fa7c 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/BaseManagerProxyApi.kt @@ -8,6 +8,12 @@ import com.google.ads.interactivemedia.v3.api.AdErrorEvent import com.google.ads.interactivemedia.v3.api.AdEvent import com.google.ads.interactivemedia.v3.api.BaseManager +/** + * ProxyApi implementation for [BaseManager]. + * + *

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 BaseManagerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiBaseManager(pigeonRegistrar) { override fun addAdErrorListener( diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt index 3ba22508394..0fa1308d138 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt @@ -4,5 +4,12 @@ package dev.flutter.packages.interactive_media_ads +/** + * ProxyApi implementation for + * [com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider]. + * + *

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 ContentProgressProviderProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiContentProgressProvider(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt index 21d81804076..c2d6ee34278 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/FrameLayoutProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import android.widget.FrameLayout +/** + * ProxyApi implementation for [FrameLayout]. + * + *

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 FrameLayoutProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiFrameLayout(pigeonRegistrar) { override fun pigeon_defaultConstructor(): FrameLayout { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt index 970ba4675e6..eaed1baabe2 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkFactoryProxyApi.kt @@ -12,6 +12,12 @@ import com.google.ads.interactivemedia.v3.api.ImaSdkFactory import com.google.ads.interactivemedia.v3.api.ImaSdkSettings import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer +/** + * ProxyApi implementation for [ImaSdkFactory]. + * + *

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 ImaSdkFactoryProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiImaSdkFactory(pigeonRegistrar) { override fun instance(): ImaSdkFactory { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt index 6890e2b0bbc..c95fd1d71e0 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ImaSdkSettingsProxyApi.kt @@ -4,5 +4,11 @@ package dev.flutter.packages.interactive_media_ads +/** + * ProxyApi implementation for [com.google.ads.interactivemedia.v3.api.ImaSdkSettings]. + * + *

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 ImaSdkSettingsProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiImaSdkSettings(pigeonRegistrar) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt index 0b0b6186c94..61915a2bc03 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/MediaPlayerProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import android.media.MediaPlayer +/** + * ProxyApi implementation for [MediaPlayer]. + * + *

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 MediaPlayerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiMediaPlayer(pigeonRegistrar) { override fun getDuration(pigeon_instance: MediaPlayer): Long { 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 a31d2791730..ee15a91c2f3 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 @@ -9,6 +9,10 @@ import android.os.Handler import android.os.Looper import io.flutter.plugin.common.BinaryMessenger +/** + * Implementation of [PigeonProxyApiRegistrar] that provides each ProxyApi implementation and any + * additional resources needed by an implementation. + */ open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Context) : PigeonProxyApiRegistrar(binaryMessenger) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt index d6274c9bba7..dc10cbd7753 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerCallbackProxyApi.kt @@ -8,6 +8,12 @@ import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +/** + * ProxyApi implementation for [VideoAdPlayer.VideoAdPlayerCallback]. + * + *

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 VideoAdPlayerCallbackProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoAdPlayerCallback(pigeonRegistrar) { override fun onAdProgress( diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index 1e17aa2ac84..aaacccba0e5 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -9,6 +9,12 @@ import com.google.ads.interactivemedia.v3.api.player.AdMediaInfo import com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +/** + * ProxyApi implementation for [VideoAdPlayer]. + * + *

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 VideoAdPlayerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoAdPlayer(pigeonRegistrar) { override fun pigeon_defaultConstructor(): VideoAdPlayer { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt index 6d76b0e9391..307bf6ec3f3 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoProgressUpdateProxyApi.kt @@ -6,6 +6,12 @@ package dev.flutter.packages.interactive_media_ads import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate +/** + * ProxyApi implementation for [VideoProgressUpdate]. + * + *

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 VideoProgressUpdateProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoProgressUpdate(pigeonRegistrar) { override fun pigeon_defaultConstructor( diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt index 50d364d31da..983f97e7f77 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoViewProxyApi.kt @@ -8,6 +8,12 @@ import android.media.MediaPlayer import android.net.Uri import android.widget.VideoView +/** + * ProxyApi implementation for [VideoView]. + * + *

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 VideoViewProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiVideoView(pigeonRegistrar) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt index 54d39fd0201..5ba9fa8d58f 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewGroupProxyApi.kt @@ -7,6 +7,12 @@ package dev.flutter.packages.interactive_media_ads import android.view.View import android.view.ViewGroup +/** + * ProxyApi implementation for [ViewGroup]. + * + *

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 ViewGroupProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiViewGroup(pigeonRegistrar) { override fun addView(pigeon_instance: ViewGroup, view: View) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt index dc5fb80724e..59934e88225 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ViewProxyApi.kt @@ -4,5 +4,11 @@ package dev.flutter.packages.interactive_media_ads +/** + * ProxyApi implementation for [android.view.View]. + * + *

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 ViewProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiView(pigeonRegistrar) From b4b2152f99a09da0b4047474b80edf0d6c65ded3 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 31 May 2024 15:51:28 -0400 Subject: [PATCH 66/76] variable docs --- .../interactive_media_ads/VideoAdPlayerProxyApi.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt index aaacccba0e5..5c79153bac7 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/VideoAdPlayerProxyApi.kt @@ -63,10 +63,17 @@ class VideoAdPlayerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : } } + /** + * Sets the internal `volume` variable that is returned in the [VideoAdPlayer.getVolume] callback. + */ override fun setVolume(pigeon_instance: VideoAdPlayer, value: Long) { (pigeon_instance as VideoAdPlayerImpl).savedVolume = value.toInt() } + /** + * Sets the internal `adProgress` variable that is returned in the [VideoAdPlayer.getAdProgress] + * callback. + */ override fun setAdProgress(pigeon_instance: VideoAdPlayer, progress: VideoProgressUpdate) { (pigeon_instance as VideoAdPlayerImpl).savedAdProgress = progress } From 519c68eecdd2352495326fea0a14d1a4a8639ef4 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 31 May 2024 17:56:54 -0400 Subject: [PATCH 67/76] beef up docs and some formatting --- .../android/android_ad_display_container.dart | 56 ++++++++++++--- .../lib/src/android/android_ads_loader.dart | 3 + .../lib/src/android/android_ads_manager.dart | 3 + .../android/interactive_media_ads_proxy.dart | 70 ++++--------------- 4 files changed, 68 insertions(+), 64 deletions(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index f6cf2ee6b26..a033bb30dfb 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -47,6 +47,17 @@ final class AndroidAdDisplayContainerCreationParams } /// Android implementation of [PlatformAdDisplayContainer]. +/// +/// This acts as the video player for the ad. To be a player for an ad from the +/// IMA SDK: +/// 1. The [ima.VideoView] must be in the View hierarchy until all ads have +/// finished. +/// 2. Must respond to callbacks from the [ima.VideoAdPlayer]. +/// 3. Must trigger methods for [ima.VideoAdPlayerCallback]s that provide ad +/// playback information to the IMA SDK. [ima.VideoAdPlayerCallback]s are +/// provided by [ima.VideoAdPlayer.addCallback]. +/// 4. Must create an [ima.AdDisplayContainer] with the `ViewGroup` that +/// contains the `VideoView`. base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { /// Constructs an [AndroidAdDisplayContainer]. AndroidAdDisplayContainer(super.params) : super.implementation() { @@ -58,26 +69,41 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { } // The duration between each update to the IMA SDK of the progress of the - // currently playing ad. + // currently playing ad. This value matches the one used in the Android + // example. + // See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side#6.-create-the-videoadplayeradapter-class static const int _progressPollingMs = 250; - // ViewGroup used to create the `ima.AdDisplayContainer`. + // The `ViewGroup` used to create the native `ima.AdDisplayContainer`. The + // `View` that handles playing an ad is added as a child to this `ViewGroup`. late final ima.FrameLayout _frameLayout = _androidParams._imaProxy.newFrameLayout(); - // Handles ad playback. + // Handles loading and displaying an ad. late final ima.VideoView _videoView; + + // After an ad is loaded in the `VideoView`, this is used to control + // playback. ima.MediaPlayer? _mediaPlayer; - /// Callbacks that update the state of ad playback. + /// Methods that must be triggered to update the IMA SDK of the state of + /// playback of an ad. @internal final Set videoAdPlayerCallbacks = {}; - // Handles ad playback callbacks from the IMA SDK. + // Handles ad playback callbacks from the IMA SDK. For a player to be used for + // ad playback, the callbacks in this class must be implemented. This also + // provides `VideoAdPlayerCallback`s that contain methods that must be + // triggered by the player. late final ima.VideoAdPlayer _videoAdPlayer; /// The native Android AdDisplayContainer. + /// + /// This holds the player for video ads. + /// + /// Created with the `ViewGroup` that contains the `View` that handles playing + /// an ad. @internal ima.AdDisplayContainer? adDisplayContainer; @@ -117,13 +143,19 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ); } - void _resetPlayer() { + // Clears the current `MediaPlayer` and resets any saved position of an ad. + // This should be used when current ad that is loaded in the `VideoView` is + // complete, failed to load/play, or has been stopped. + void _clearMediaPlayer() { _mediaPlayer = null; _savedAdPosition = 0; } // Starts periodically updating the IMA SDK the progress of the currently // playing ad. + // + // Setting a timer to periodically update the IMA SDK is also done in the + // official Android example: https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side#8.-set-up-ad-tracking. void _startAdProgressTracking() { // Stop any previous ad tracking. _stopAdProgressTracking(); @@ -158,6 +190,9 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { _adProgressTimer = null; } + // This value is created in a static method because the callback methods for + // any wrapped classes must not reference the encapsulating object. This is to + // prevent a circular reference that prevents garbage collection. static ima.VideoView _setUpVideoView( WeakReference weakThis, ) { @@ -165,7 +200,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { onCompletion: (_, __) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - container._resetPlayer(); + container._clearMediaPlayer(); container._stopAdProgressTracking(); for (final ima.VideoAdPlayerCallback callback in container.videoAdPlayerCallbacks) { @@ -189,7 +224,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { onError: (_, __, ___, ____) { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { - container._resetPlayer(); + container._clearMediaPlayer(); for (final ima.VideoAdPlayerCallback callback in container.videoAdPlayerCallbacks) { callback.onError(container._loadedAdMediaInfo!); @@ -201,6 +236,9 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { ); } + // This value is created in a static method because the callback methods for + // any wrapped classes must not reference the encapsulating object. This is to + // prevent a circular reference that prevents garbage collection. static ima.VideoAdPlayer _setUpVideoAdPlayer( WeakReference weakThis, ) { @@ -231,7 +269,7 @@ base class AndroidAdDisplayContainer extends PlatformAdDisplayContainer { final AndroidAdDisplayContainer? container = weakThis.target; if (container != null) { container._stopAdProgressTracking(); - container._resetPlayer(); + container._clearMediaPlayer(); container._loadedAdMediaInfo = null; container._adDuration = null; } diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart index 2b172754af0..03fde8d22f2 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_loader.dart @@ -104,6 +104,9 @@ base class AndroidAdsLoader extends PlatformAdsLoader { return adsLoader; } + // This value is created in a static method because the callback methods for + // any wrapped classes must not reference the encapsulating object. This is to + // prevent a circular reference that prevents garbage collection. static void _addListeners( WeakReference weakThis, ima.AdsLoader adsLoader, diff --git a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart index 402fa475934..7bf158ff52a 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ads_manager.dart @@ -49,6 +49,9 @@ class AndroidAdsManager extends PlatformAdsManager { return _manager.start(); } + // This value is created in a static method because the callback methods for + // any wrapped classes must not reference the encapsulating object. This is to + // prevent a circular reference that prevents garbage collection. static void _addListeners(WeakReference weakThis) { final InteractiveMediaAdsProxy proxy = weakThis.target!._proxy; weakThis.target?._manager.addAdEventListener( diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart index 6c8a0b36b32..eff59354136 100644 --- a/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads_proxy.dart @@ -41,81 +41,41 @@ class InteractiveMediaAdsProxy { /// Constructs [VideoView]. final VideoView Function({ - required void Function( - VideoView, - MediaPlayer, - int, - int, - ) onError, - void Function( - VideoView, - MediaPlayer, - )? onPrepared, - void Function( - VideoView, - MediaPlayer, - )? onCompletion, + required void Function(VideoView, MediaPlayer, int, int) onError, + void Function(VideoView, MediaPlayer)? onPrepared, + void Function(VideoView, MediaPlayer)? onCompletion, }) newVideoView; /// Constructs [VideoAdPlayer]. final VideoAdPlayer Function({ - required void Function( - VideoAdPlayer, - VideoAdPlayerCallback, - ) addCallback, - required void Function( - VideoAdPlayer, - AdMediaInfo, - AdPodInfo, - ) loadAd, - required void Function( - VideoAdPlayer, - AdMediaInfo, - ) pauseAd, - required void Function( - VideoAdPlayer, - AdMediaInfo, - ) playAd, + required void Function(VideoAdPlayer, VideoAdPlayerCallback) addCallback, + required void Function(VideoAdPlayer, AdMediaInfo, AdPodInfo) loadAd, + required void Function(VideoAdPlayer, AdMediaInfo) pauseAd, + required void Function(VideoAdPlayer, AdMediaInfo) playAd, required void Function(VideoAdPlayer) release, - required void Function( - VideoAdPlayer, - VideoAdPlayerCallback, - ) removeCallback, - required void Function( - VideoAdPlayer, - AdMediaInfo, - ) stopAd, + required void Function(VideoAdPlayer, VideoAdPlayerCallback) removeCallback, + required void Function(VideoAdPlayer, AdMediaInfo) stopAd, }) newVideoAdPlayer; /// Constructs [AdsLoadedListener]. final AdsLoadedListener Function({ - required void Function( - AdsLoadedListener, - AdsManagerLoadedEvent, - ) onAdsManagerLoaded, + required void Function(AdsLoadedListener, AdsManagerLoadedEvent) + onAdsManagerLoaded, }) newAdsLoadedListener; /// Constructs [AdErrorListener]. final AdErrorListener Function({ - required void Function( - AdErrorListener, - AdErrorEvent, - ) onAdError, + required void Function(AdErrorListener, AdErrorEvent) onAdError, }) newAdErrorListener; /// Constructs [AdEventListener]. final AdEventListener Function({ - required void Function( - AdEventListener, - AdEvent, - ) onAdEvent, + required void Function(AdEventListener, AdEvent) onAdEvent, }) newAdEventListener; /// Calls to [ImaSdkFactory.createAdDisplayContainer]. - final Future Function( - ViewGroup, - VideoAdPlayer, - ) createAdDisplayContainerImaSdkFactory; + final Future Function(ViewGroup, VideoAdPlayer) + createAdDisplayContainerImaSdkFactory; /// Calls to [ImaSdkFactory.instance]. final ImaSdkFactory Function() instanceImaSdkFactory; From 8923d5fd36121b810cfc5bb3799caea1ee3fd04a Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sat, 1 Jun 2024 18:46:33 -0400 Subject: [PATCH 68/76] uncomment pigeon file --- .../interactive_media_ads_android.dart | 1426 ++++++++--------- 1 file changed, 713 insertions(+), 713 deletions(-) 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 e9b108ed0ec..1af6ec946e0 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -2,716 +2,716 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// // ignore_for_file: avoid_unused_constructor_parameters -// -// import 'package:pigeon/pigeon.dart'; -// -// @ConfigurePigeon( -// PigeonOptions( -// copyrightHeader: 'pigeons/copyright.txt', -// dartOut: 'lib/src/android/interactive_media_ads.g.dart', -// kotlinOut: -// 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt', -// kotlinOptions: KotlinOptions( -// package: 'dev.flutter.packages.interactive_media_ads', -// ), -// ), -// ) -// -// /// The types of error that can be encountered. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. -// enum AdErrorCode { -// /// Ads player was not provided. -// adsPlayerWasNotProvided, -// -// /// There was a problem requesting ads from the server. -// adsRequestNetworkError, -// -// /// A companion ad failed to load or render. -// companionAdLoadingFailed, -// -// /// There was a problem requesting ads from the server. -// failedToRequestAds, -// -// /// An error internal to the SDK occurred. -// internalError, -// -// /// Invalid arguments were provided to SDK methods. -// invalidArguments, -// -// /// An overlay ad failed to load. -// overlayAdLoadingFailed, -// -// /// An overlay ad failed to render. -// overlayAdPlayingFailed, -// -// /// Ads list was returned but ContentProgressProvider was not configured. -// playlistNoContentTracking, -// -// /// Ads loader sent ads loaded event when it was not expected. -// unexpectedAdsLoadedEvent, -// -// /// The ad response was not understood and cannot be parsed. -// unknownAdResponse, -// -// /// An unexpected error occurred and the cause is not known. -// unknownError, -// -// /// No assets were found in the VAST ad response. -// vastAssetNotFound, -// -// /// A VAST response containing a single `` tag with no child tags. -// vastEmptyResponse, -// -// /// Assets were found in the VAST ad response for a linear ad, but none of -// /// them matched the video player's capabilities. -// vastLinearAssetMismatch, -// -// /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper -// /// or inline ad load has timed out. -// vastLoadTimeout, -// -// /// The ad response was not recognized as a valid VAST ad. -// vastMalformedResponse, -// -// /// Failed to load media assets from a VAST response. -// vastMediaLoadTimeout, -// -// /// Assets were found in the VAST ad response for a nonlinear ad, but none of -// /// them matched the video player's capabilities. -// vastNonlinearAssetMismatch, -// -// /// No Ads VAST response after one or more wrappers. -// vastNoAdsAfterWrapper, -// -// /// The maximum number of VAST wrapper redirects has been reached. -// vastTooManyRedirects, -// -// /// Trafficking error. -// /// -// /// Video player received an ad type that it was not expecting and/or cannot -// /// display. -// vastTraffickingError, -// -// /// There was an error playing the video ad. -// videoPlayError, -// } -// -// /// Specifies when the error was encountered, during either ad loading or playback. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. -// enum AdErrorType { -// /// Indicates that the error was encountered when the ad was being loaded. -// load, -// -// /// Indicates that the error was encountered after the ad loaded, during ad play. -// play, -// -// /// The error is not recognized by this wrapper. -// unknown, -// } -// -// /// Types of events that can occur during ad playback. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. -// enum AdEventType { -// /// Fired when an ad break in a stream ends. -// adBreakEnded, -// -// /// Fired when an ad break will not play back any ads. -// adBreakFetchError, -// -// /// Fired when an ad break is ready from VMAP or ad rule ads. -// adBreakReady, -// -// /// Fired when an ad break in a stream starts. -// adBreakStarted, -// -// /// Fired when playback stalls while the ad buffers. -// adBuffering, -// -// /// Fired when an ad period in a stream ends. -// adPeriodEnded, -// -// /// Fired when an ad period in a stream starts. -// adPeriodStarted, -// -// /// Fired to inform of ad progress and can be used by publisher to display a -// /// countdown timer. -// adProgress, -// -// /// Fired when the ads manager is done playing all the valid ads in the ads -// /// response, or when the response doesn't return any valid ads. -// allAdsCompleted, -// -// /// Fired when an ad is clicked. -// clicked, -// -// /// Fired when an ad completes playing. -// completed, -// -// /// Fired when content should be paused. -// contentPauseRequested, -// -// /// Fired when content should be resumed. -// contentResumeRequested, -// -// /// Fired when VOD stream cuepoints have changed. -// cuepointsChanged, -// -// /// Fired when the ad playhead crosses first quartile. -// firstQuartile, -// -// /// The user has closed the icon fallback image dialog. -// iconFallbackImageClosed, -// -// /// The user has tapped an ad icon. -// iconTapped, -// -// /// Fired when the VAST response has been received. -// loaded, -// -// /// Fired to enable the SDK to communicate a message to be logged, which is -// /// stored in adData. -// log, -// -// /// Fired when the ad playhead crosses midpoint. -// midpoint, -// -// /// Fired when an ad is paused. -// paused, -// -// /// Fired when an ad is resumed. -// resumed, -// -// /// Fired when an ad changes its skippable state. -// skippableStateChanged, -// -// /// Fired when an ad was skipped. -// skipped, -// -// /// Fired when an ad starts playing. -// started, -// -// /// Fired when a non-clickthrough portion of a video ad is clicked. -// tapped, -// -// /// Fired when the ad playhead crosses third quartile. -// thirdQuartile, -// -// /// The event type is not recognized by this wrapper. -// unknown, -// } -// -// /// A base class for more specialized container interfaces. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', -// ), -// ) -// abstract class BaseDisplayContainer {} -// -// /// A container in which to display the ads. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', -// ), -// ) -// abstract class AdDisplayContainer implements BaseDisplayContainer {} -// -// /// An object which allows publishers to request ads from ad servers or a -// /// dynamic ad insertion stream. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', -// ), -// ) -// abstract class AdsLoader { -// /// Registers a listener for errors that occur during the ads request. -// void addAdErrorListener(AdErrorListener listener); -// -// /// Registers a listener for the ads manager loaded event. -// void addAdsLoadedListener(AdsLoadedListener listener); -// -// /// Requests ads from a server. -// void requestAds(AdsRequest request); -// } -// -// /// An event raised when ads are successfully loaded from the ad server through an AdsLoader. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', -// ), -// ) -// abstract class AdsManagerLoadedEvent { -// /// The ads manager that will control playback of the loaded ads, or null when -// /// using dynamic ad insertion. -// late final AdsManager manager; -// } -// -// /// An event raised when there is an error loading or playing ads. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', -// ), -// ) -// abstract class AdErrorEvent { -// /// The AdError that caused this event. -// late final AdError error; -// } -// -// /// An error that occurred in the SDK. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', -// ), -// ) -// abstract class AdError { -// /// The error's code. -// late final AdErrorCode errorCode; -// -// /// The error code's number. -// late final int errorCodeNumber; -// -// /// The error's type. -// late final AdErrorType errorType; -// -// /// A human-readable summary of the error. -// late final String message; -// } -// -// /// 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. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', -// ), -// ) -// abstract class AdsRequest { -// /// Sets the URL from which ads will be requested. -// void setAdTagUrl(String adTagUrl); -// -// /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks -// /// based on content progress (cue points). -// void setContentProgressProvider(ContentProgressProvider provider); -// } -// -// /// Defines an interface to allow SDK to track progress of the content video. -// /// -// /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', -// ), -// ) -// abstract class ContentProgressProvider {} -// -// /// An object which handles playing ads after they've been received from the -// /// server. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', -// ), -// ) -// abstract class AdsManager extends BaseManager { -// /// Discards current ad break and resumes content. -// void discardAdBreak(); -// -// /// Pauses the current ad. -// void pause(); -// -// /// Starts playing the ads. -// void start(); -// } -// -// /// Base interface for managing ads.. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', -// ), -// ) -// abstract class BaseManager { -// /// Registers a listener for errors that occur during the ad or stream -// /// initialization and playback. -// void addAdErrorListener(AdErrorListener errorListener); -// -// /// Registers a listener for ad events that occur during ad or stream -// /// initialization and playback. -// void addAdEventListener(AdEventListener adEventListener); -// -// /// Stops the ad and all tracking, then releases all assets that were loaded -// /// to play the ad. -// void destroy(); -// -// /// Initializes the ad experience using default rendering settings -// void init(); -// } -// -// /// Event to notify publisher that an event occurred with an Ad. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', -// ), -// ) -// abstract class AdEvent { -// /// The type of event that occurred. -// late final AdEventType type; -// } -// -// /// Factory class for creating SDK objects. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', -// ), -// ) -// abstract class ImaSdkFactory { -// @static -// @attached -// late final ImaSdkFactory instance; -// -// @static -// AdDisplayContainer createAdDisplayContainer( -// ViewGroup container, -// VideoAdPlayer player, -// ); -// -// /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. -// ImaSdkSettings createImaSdkSettings(); -// -// /// Creates an `AdsLoader` for requesting ads using the specified settings -// /// object. -// AdsLoader createAdsLoader( -// ImaSdkSettings settings, -// AdDisplayContainer container, -// ); -// -// /// Creates an AdsRequest object to contain the data used to request ads. -// AdsRequest createAdsRequest(); -// } -// -// /// Defines general SDK settings that are used when creating an `AdsLoader`. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', -// ), -// ) -// abstract class ImaSdkSettings {} -// -// /// Defines an update to the video's progress. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', -// ), -// ) -// abstract class VideoProgressUpdate { -// VideoProgressUpdate(int currentTimeMs, int durationMs); -// -// /// Value to use for cases when progress is not yet defined, such as video -// /// initialization. -// @static -// @attached -// late final VideoProgressUpdate videoTimeNotReady; -// } -// -// /// The minimal information required to play an ad. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', -// ), -// ) -// abstract class AdMediaInfo { -// late final String url; -// } -// -// /// An ad may be part of a pod of ads. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', -// ), -// ) -// abstract class AdPodInfo { -// /// The position of the ad within the pod. -// /// -// /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the -// /// ad is not part of a pod, this will return 1. -// late final int adPosition; -// -// /// The maximum duration of the pod in seconds. -// /// -// /// For unknown duration, -1 is returned. -// late final double maxDuration; -// -// /// Client side and DAI VOD: Returns the index of the ad pod. -// late final int podIndex; -// -// /// The content time offset at which the current ad pod was scheduled. -// /// -// /// For preroll pod, 0 is returned. For midrolls, the scheduled time is -// /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this -// /// ad is not part of a pod, or the pod is not part of an ad playlist. -// late final double timeOffset; -// -// /// The total number of ads contained within this pod, including bumpers. -// late final int totalAds; -// -// /// Returns true if the ad is a bumper ad. -// late final bool isBumper; -// } -// -// /// FrameLayout is designed to block out an area on the screen to display a -// /// single item. -// /// -// /// See https://developer.android.com/reference/android/widget/FrameLayout. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'android.widget.FrameLayout', -// ), -// ) -// abstract class FrameLayout extends ViewGroup { -// FrameLayout(); -// } -// -// /// A special view that can contain other views (called children.) -// /// -// /// See https://developer.android.com/reference/android/view/ViewGroup. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'android.view.ViewGroup', -// ), -// ) -// abstract class ViewGroup extends View { -// void addView(View view); -// } -// -// /// Displays a video file. -// /// -// /// See https://developer.android.com/reference/android/widget/VideoView. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'android.widget.VideoView', -// ), -// ) -// abstract class VideoView extends View { -// VideoView(); -// -// /// Callback to be invoked when the media source is ready for playback. -// late final void Function(MediaPlayer player)? onPrepared; -// -// /// Callback to be invoked when playback of a media source has completed. -// late final void Function(MediaPlayer player)? onCompletion; -// -// /// Callback to be invoked when there has been an error during an asynchronous -// /// operation. -// late final void Function(MediaPlayer player, int what, int extra) onError; -// -// /// Sets the URI of the video. -// void setVideoUri(String uri); -// -// /// The current position of the playing video. -// /// -// /// In milliseconds. -// int getCurrentPosition(); -// } -// -// /// This class represents the basic building block for user interface components. -// /// -// /// See https://developer.android.com/reference/android/view/View. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), -// ) -// abstract class View {} -// -// /// MediaPlayer class can be used to control playback of audio/video files and -// /// streams. -// /// -// /// See https://developer.android.com/reference/android/media/MediaPlayer. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: 'android.media.MediaPlayer', -// ), -// ) -// abstract class MediaPlayer { -// /// Gets the duration of the file. -// int getDuration(); -// -// /// Seeks to specified time position. -// void seekTo(int mSec); -// -// /// Starts or resumes playback. -// void start(); -// -// /// Pauses playback. -// void pause(); -// -// /// Stops playback after playback has been started or paused. -// void stop(); -// } -// -// /// Callbacks that the player must fire. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', -// ), -// ) -// abstract class VideoAdPlayerCallback { -// /// Fire this callback periodically as ad playback occurs. -// void onAdProgress( -// AdMediaInfo adMediaInfo, -// VideoProgressUpdate videoProgressUpdate, -// ); -// -// /// Fire this callback when video playback stalls waiting for data. -// void onBuffering(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when all content has finished playing. -// void onContentComplete(); -// -// /// Fire this callback when the video finishes playing. -// void onEnded(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when the video has encountered an error. -// void onError(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when the video is ready to begin playback. -// void onLoaded(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when the video is paused. -// void onPause(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when the player begins playing a video. -// void onPlay(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when the video is unpaused. -// void onResume(AdMediaInfo adMediaInfo); -// -// /// Fire this callback when the playback volume changes. -// void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); -// } -// -// /// Defines the set of methods that a video player must implement to be used by -// /// the IMA SDK, as well as a set of callbacks that it must fire. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', -// ), -// ) -// abstract class VideoAdPlayer { -// VideoAdPlayer(); -// -// /// Adds a callback. -// late final void Function(VideoAdPlayerCallback callback) addCallback; -// -// /// Loads a video ad hosted at AdMediaInfo. -// late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; -// -// /// Pauses playing the current ad. -// late final void Function(AdMediaInfo adMediaInfo) pauseAd; -// -// /// Starts or resumes playing the video ad referenced by the AdMediaInfo, -// /// provided loadAd has already been called for it. -// late final void Function(AdMediaInfo adMediaInfo) playAd; -// -// /// Cleans up and releases all resources used by the `VideoAdPlayer`. -// late final void Function() release; -// -// /// Removes a callback. -// late final void Function(VideoAdPlayerCallback callback) removeCallback; -// -// /// Stops playing the current ad. -// late final void Function(AdMediaInfo adMediaInfo) stopAd; -// -// /// The volume of the player as a percentage from 0 to 100. -// void setVolume(int value); -// -// /// The `VideoProgressUpdate` describing playback progress of the current -// /// video. -// void setAdProgress(VideoProgressUpdate progress); -// } -// -// /// Listener interface for notification of ad load or stream load completion. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', -// ), -// ) -// abstract class AdsLoadedListener { -// AdsLoadedListener(); -// -// /// Called once the AdsManager or StreamManager has been loaded. -// late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; -// } -// -// /// Interface for classes that will listen to AdErrorEvents. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', -// ), -// ) -// abstract class AdErrorListener { -// AdErrorListener(); -// -// /// Called when an error occurs. -// late final void Function(AdErrorEvent event) onAdError; -// } -// -// /// Listener interface for ad events. -// /// -// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. -// @ProxyApi( -// kotlinOptions: KotlinProxyApiOptions( -// fullClassName: -// 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', -// ), -// ) -// abstract class AdEventListener { -// AdEventListener(); -// -// /// Respond to an occurrence of an AdEvent. -// late final void Function(AdEvent event) onAdEvent; -// } +// ignore_for_file: avoid_unused_constructor_parameters + +import 'package:pigeon/pigeon.dart'; + +@ConfigurePigeon( + PigeonOptions( + copyrightHeader: 'pigeons/copyright.txt', + dartOut: 'lib/src/android/interactive_media_ads.g.dart', + kotlinOut: + 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt', + kotlinOptions: KotlinOptions( + package: 'dev.flutter.packages.interactive_media_ads', + ), + ), +) + +/// The types of error that can be encountered. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. +enum AdErrorCode { + /// Ads player was not provided. + adsPlayerWasNotProvided, + + /// There was a problem requesting ads from the server. + adsRequestNetworkError, + + /// A companion ad failed to load or render. + companionAdLoadingFailed, + + /// There was a problem requesting ads from the server. + failedToRequestAds, + + /// An error internal to the SDK occurred. + internalError, + + /// Invalid arguments were provided to SDK methods. + invalidArguments, + + /// An overlay ad failed to load. + overlayAdLoadingFailed, + + /// An overlay ad failed to render. + overlayAdPlayingFailed, + + /// Ads list was returned but ContentProgressProvider was not configured. + playlistNoContentTracking, + + /// Ads loader sent ads loaded event when it was not expected. + unexpectedAdsLoadedEvent, + + /// The ad response was not understood and cannot be parsed. + unknownAdResponse, + + /// An unexpected error occurred and the cause is not known. + unknownError, + + /// No assets were found in the VAST ad response. + vastAssetNotFound, + + /// A VAST response containing a single `` tag with no child tags. + vastEmptyResponse, + + /// Assets were found in the VAST ad response for a linear ad, but none of + /// them matched the video player's capabilities. + vastLinearAssetMismatch, + + /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper + /// or inline ad load has timed out. + vastLoadTimeout, + + /// The ad response was not recognized as a valid VAST ad. + vastMalformedResponse, + + /// Failed to load media assets from a VAST response. + vastMediaLoadTimeout, + + /// Assets were found in the VAST ad response for a nonlinear ad, but none of + /// them matched the video player's capabilities. + vastNonlinearAssetMismatch, + + /// No Ads VAST response after one or more wrappers. + vastNoAdsAfterWrapper, + + /// The maximum number of VAST wrapper redirects has been reached. + vastTooManyRedirects, + + /// Trafficking error. + /// + /// Video player received an ad type that it was not expecting and/or cannot + /// display. + vastTraffickingError, + + /// There was an error playing the video ad. + videoPlayError, +} + +/// Specifies when the error was encountered, during either ad loading or playback. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. +enum AdErrorType { + /// Indicates that the error was encountered when the ad was being loaded. + load, + + /// Indicates that the error was encountered after the ad loaded, during ad play. + play, + + /// The error is not recognized by this wrapper. + unknown, +} + +/// Types of events that can occur during ad playback. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. +enum AdEventType { + /// Fired when an ad break in a stream ends. + adBreakEnded, + + /// Fired when an ad break will not play back any ads. + adBreakFetchError, + + /// Fired when an ad break is ready from VMAP or ad rule ads. + adBreakReady, + + /// Fired when an ad break in a stream starts. + adBreakStarted, + + /// Fired when playback stalls while the ad buffers. + adBuffering, + + /// Fired when an ad period in a stream ends. + adPeriodEnded, + + /// Fired when an ad period in a stream starts. + adPeriodStarted, + + /// Fired to inform of ad progress and can be used by publisher to display a + /// countdown timer. + adProgress, + + /// Fired when the ads manager is done playing all the valid ads in the ads + /// response, or when the response doesn't return any valid ads. + allAdsCompleted, + + /// Fired when an ad is clicked. + clicked, + + /// Fired when an ad completes playing. + completed, + + /// Fired when content should be paused. + contentPauseRequested, + + /// Fired when content should be resumed. + contentResumeRequested, + + /// Fired when VOD stream cuepoints have changed. + cuepointsChanged, + + /// Fired when the ad playhead crosses first quartile. + firstQuartile, + + /// The user has closed the icon fallback image dialog. + iconFallbackImageClosed, + + /// The user has tapped an ad icon. + iconTapped, + + /// Fired when the VAST response has been received. + loaded, + + /// Fired to enable the SDK to communicate a message to be logged, which is + /// stored in adData. + log, + + /// Fired when the ad playhead crosses midpoint. + midpoint, + + /// Fired when an ad is paused. + paused, + + /// Fired when an ad is resumed. + resumed, + + /// Fired when an ad changes its skippable state. + skippableStateChanged, + + /// Fired when an ad was skipped. + skipped, + + /// Fired when an ad starts playing. + started, + + /// Fired when a non-clickthrough portion of a video ad is clicked. + tapped, + + /// Fired when the ad playhead crosses third quartile. + thirdQuartile, + + /// The event type is not recognized by this wrapper. + unknown, +} + +/// A base class for more specialized container interfaces. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', + ), +) +abstract class BaseDisplayContainer {} + +/// A container in which to display the ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', + ), +) +abstract class AdDisplayContainer implements BaseDisplayContainer {} + +/// An object which allows publishers to request ads from ad servers or a +/// dynamic ad insertion stream. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', + ), +) +abstract class AdsLoader { + /// Registers a listener for errors that occur during the ads request. + void addAdErrorListener(AdErrorListener listener); + + /// Registers a listener for the ads manager loaded event. + void addAdsLoadedListener(AdsLoadedListener listener); + + /// Requests ads from a server. + void requestAds(AdsRequest request); +} + +/// An event raised when ads are successfully loaded from the ad server through an AdsLoader. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', + ), +) +abstract class AdsManagerLoadedEvent { + /// The ads manager that will control playback of the loaded ads, or null when + /// using dynamic ad insertion. + late final AdsManager manager; +} + +/// An event raised when there is an error loading or playing ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', + ), +) +abstract class AdErrorEvent { + /// The AdError that caused this event. + late final AdError error; +} + +/// An error that occurred in the SDK. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', + ), +) +abstract class AdError { + /// The error's code. + late final AdErrorCode errorCode; + + /// The error code's number. + late final int errorCodeNumber; + + /// The error's type. + late final AdErrorType errorType; + + /// A human-readable summary of the error. + late final String message; +} + +/// 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. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', + ), +) +abstract class AdsRequest { + /// Sets the URL from which ads will be requested. + void setAdTagUrl(String adTagUrl); + + /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks + /// based on content progress (cue points). + void setContentProgressProvider(ContentProgressProvider provider); +} + +/// Defines an interface to allow SDK to track progress of the content video. +/// +/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', + ), +) +abstract class ContentProgressProvider {} + +/// An object which handles playing ads after they've been received from the +/// server. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', + ), +) +abstract class AdsManager extends BaseManager { + /// Discards current ad break and resumes content. + void discardAdBreak(); + + /// Pauses the current ad. + void pause(); + + /// Starts playing the ads. + void start(); +} + +/// Base interface for managing ads.. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', + ), +) +abstract class BaseManager { + /// Registers a listener for errors that occur during the ad or stream + /// initialization and playback. + void addAdErrorListener(AdErrorListener errorListener); + + /// Registers a listener for ad events that occur during ad or stream + /// initialization and playback. + void addAdEventListener(AdEventListener adEventListener); + + /// Stops the ad and all tracking, then releases all assets that were loaded + /// to play the ad. + void destroy(); + + /// Initializes the ad experience using default rendering settings + void init(); +} + +/// Event to notify publisher that an event occurred with an Ad. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', + ), +) +abstract class AdEvent { + /// The type of event that occurred. + late final AdEventType type; +} + +/// Factory class for creating SDK objects. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', + ), +) +abstract class ImaSdkFactory { + @static + @attached + late final ImaSdkFactory instance; + + @static + AdDisplayContainer createAdDisplayContainer( + ViewGroup container, + VideoAdPlayer player, + ); + + /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. + ImaSdkSettings createImaSdkSettings(); + + /// Creates an `AdsLoader` for requesting ads using the specified settings + /// object. + AdsLoader createAdsLoader( + ImaSdkSettings settings, + AdDisplayContainer container, + ); + + /// Creates an AdsRequest object to contain the data used to request ads. + AdsRequest createAdsRequest(); +} + +/// Defines general SDK settings that are used when creating an `AdsLoader`. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', + ), +) +abstract class ImaSdkSettings {} + +/// Defines an update to the video's progress. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', + ), +) +abstract class VideoProgressUpdate { + VideoProgressUpdate(int currentTimeMs, int durationMs); + + /// Value to use for cases when progress is not yet defined, such as video + /// initialization. + @static + @attached + late final VideoProgressUpdate videoTimeNotReady; +} + +/// The minimal information required to play an ad. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', + ), +) +abstract class AdMediaInfo { + late final String url; +} + +/// An ad may be part of a pod of ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', + ), +) +abstract class AdPodInfo { + /// The position of the ad within the pod. + /// + /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the + /// ad is not part of a pod, this will return 1. + late final int adPosition; + + /// The maximum duration of the pod in seconds. + /// + /// For unknown duration, -1 is returned. + late final double maxDuration; + + /// Client side and DAI VOD: Returns the index of the ad pod. + late final int podIndex; + + /// The content time offset at which the current ad pod was scheduled. + /// + /// For preroll pod, 0 is returned. For midrolls, the scheduled time is + /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this + /// ad is not part of a pod, or the pod is not part of an ad playlist. + late final double timeOffset; + + /// The total number of ads contained within this pod, including bumpers. + late final int totalAds; + + /// Returns true if the ad is a bumper ad. + late final bool isBumper; +} + +/// FrameLayout is designed to block out an area on the screen to display a +/// single item. +/// +/// See https://developer.android.com/reference/android/widget/FrameLayout. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.widget.FrameLayout', + ), +) +abstract class FrameLayout extends ViewGroup { + FrameLayout(); +} + +/// A special view that can contain other views (called children.) +/// +/// See https://developer.android.com/reference/android/view/ViewGroup. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.view.ViewGroup', + ), +) +abstract class ViewGroup extends View { + void addView(View view); +} + +/// Displays a video file. +/// +/// See https://developer.android.com/reference/android/widget/VideoView. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.widget.VideoView', + ), +) +abstract class VideoView extends View { + VideoView(); + + /// Callback to be invoked when the media source is ready for playback. + late final void Function(MediaPlayer player)? onPrepared; + + /// Callback to be invoked when playback of a media source has completed. + late final void Function(MediaPlayer player)? onCompletion; + + /// Callback to be invoked when there has been an error during an asynchronous + /// operation. + late final void Function(MediaPlayer player, int what, int extra) onError; + + /// Sets the URI of the video. + void setVideoUri(String uri); + + /// The current position of the playing video. + /// + /// In milliseconds. + int getCurrentPosition(); +} + +/// This class represents the basic building block for user interface components. +/// +/// See https://developer.android.com/reference/android/view/View. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), +) +abstract class View {} + +/// MediaPlayer class can be used to control playback of audio/video files and +/// streams. +/// +/// See https://developer.android.com/reference/android/media/MediaPlayer. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'android.media.MediaPlayer', + ), +) +abstract class MediaPlayer { + /// Gets the duration of the file. + int getDuration(); + + /// Seeks to specified time position. + void seekTo(int mSec); + + /// Starts or resumes playback. + void start(); + + /// Pauses playback. + void pause(); + + /// Stops playback after playback has been started or paused. + void stop(); +} + +/// Callbacks that the player must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', + ), +) +abstract class VideoAdPlayerCallback { + /// Fire this callback periodically as ad playback occurs. + void onAdProgress( + AdMediaInfo adMediaInfo, + VideoProgressUpdate videoProgressUpdate, + ); + + /// Fire this callback when video playback stalls waiting for data. + void onBuffering(AdMediaInfo adMediaInfo); + + /// Fire this callback when all content has finished playing. + void onContentComplete(); + + /// Fire this callback when the video finishes playing. + void onEnded(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video has encountered an error. + void onError(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is ready to begin playback. + void onLoaded(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is paused. + void onPause(AdMediaInfo adMediaInfo); + + /// Fire this callback when the player begins playing a video. + void onPlay(AdMediaInfo adMediaInfo); + + /// Fire this callback when the video is unpaused. + void onResume(AdMediaInfo adMediaInfo); + + /// Fire this callback when the playback volume changes. + void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); +} + +/// Defines the set of methods that a video player must implement to be used by +/// the IMA SDK, as well as a set of callbacks that it must fire. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', + ), +) +abstract class VideoAdPlayer { + VideoAdPlayer(); + + /// Adds a callback. + late final void Function(VideoAdPlayerCallback callback) addCallback; + + /// Loads a video ad hosted at AdMediaInfo. + late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; + + /// Pauses playing the current ad. + late final void Function(AdMediaInfo adMediaInfo) pauseAd; + + /// Starts or resumes playing the video ad referenced by the AdMediaInfo, + /// provided loadAd has already been called for it. + late final void Function(AdMediaInfo adMediaInfo) playAd; + + /// Cleans up and releases all resources used by the `VideoAdPlayer`. + late final void Function() release; + + /// Removes a callback. + late final void Function(VideoAdPlayerCallback callback) removeCallback; + + /// Stops playing the current ad. + late final void Function(AdMediaInfo adMediaInfo) stopAd; + + /// The volume of the player as a percentage from 0 to 100. + void setVolume(int value); + + /// The `VideoProgressUpdate` describing playback progress of the current + /// video. + void setAdProgress(VideoProgressUpdate progress); +} + +/// Listener interface for notification of ad load or stream load completion. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', + ), +) +abstract class AdsLoadedListener { + AdsLoadedListener(); + + /// Called once the AdsManager or StreamManager has been loaded. + late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; +} + +/// Interface for classes that will listen to AdErrorEvents. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', + ), +) +abstract class AdErrorListener { + AdErrorListener(); + + /// Called when an error occurs. + late final void Function(AdErrorEvent event) onAdError; +} + +/// Listener interface for ad events. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', + ), +) +abstract class AdEventListener { + AdEventListener(); + + /// Respond to an occurrence of an AdEvent. + late final void Function(AdEvent event) onAdEvent; +} From 91452730e542aa6ff5a5c63f6daf70a0ef8c4b1b Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Sun, 2 Jun 2024 19:45:29 -0400 Subject: [PATCH 69/76] an --- .../lib/src/android/android_ad_display_container.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart index a033bb30dfb..9822a78f7c3 100644 --- a/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart +++ b/packages/interactive_media_ads/lib/src/android/android_ad_display_container.dart @@ -48,7 +48,7 @@ final class AndroidAdDisplayContainerCreationParams /// Android implementation of [PlatformAdDisplayContainer]. /// -/// This acts as the video player for the ad. To be a player for an ad from the +/// This acts as the video player for an ad. To be a player for an ad from the /// IMA SDK: /// 1. The [ima.VideoView] must be in the View hierarchy until all ads have /// finished. From c3ce374ca0b40efe5f8e0e7974e4c51a5c997e7a Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 3 Jun 2024 18:52:36 -0400 Subject: [PATCH 70/76] add an unknown value for enum --- .../interactive_media_ads/AdErrorProxyApi.kt | 1 + .../InteractiveMediaAdsLibrary.g.kt | 44 ++++--- .../android/enum_converter_extensions.dart | 1 + .../src/android/interactive_media_ads.g.dart | 110 ++++++++++-------- .../interactive_media_ads_android.dart | 3 + packages/interactive_media_ads/pubspec.yaml | 10 +- 6 files changed, 101 insertions(+), 68 deletions(-) diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt index dfaf8289134..5e06fe2c3b7 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdErrorProxyApi.kt @@ -39,6 +39,7 @@ class AdErrorProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : AdError.AdErrorCode.INVALID_ARGUMENTS -> AdErrorCode.INVALID_ARGUMENTS AdError.AdErrorCode.PLAYLIST_NO_CONTENT_TRACKING -> AdErrorCode.PLAYLIST_NO_CONTENT_TRACKING AdError.AdErrorCode.UNEXPECTED_ADS_LOADED_EVENT -> AdErrorCode.UNEXPECTED_ADS_LOADED_EVENT + else -> AdErrorCode.UNKNOWN } } 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 c5edc8dfc35..96f2868211c 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 @@ -303,10 +303,11 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { codec) if (instanceManager != null) { channel.setMessageHandler { message, reply -> - val identifier = message as Number + val args = message as List + val identifierArg = args[0].let { num -> if (num is Int) num.toLong() else num as Long } val wrapped: List = try { - instanceManager.remove(identifier.toLong()) + instanceManager.remove(identifierArg) listOf(null) } catch (exception: Throwable) { wrapError(exception) @@ -341,11 +342,11 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } } - fun removeStrongReference(identifier: Long, callback: (Result) -> Unit) { + fun removeStrongReference(identifierArg: Long, callback: (Result) -> Unit) { val channelName = "dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference" val channel = BasicMessageChannel(binaryMessenger, channelName, codec) - channel.send(identifier) { + channel.send(listOf(identifierArg)) { if (it is List<*>) { if (it.size > 1) { callback(Result.failure(FlutterError(it[0] as String, it[1] as String, it[2] as String?))) @@ -358,7 +359,6 @@ private class PigeonInstanceManagerApi(val binaryMessenger: BinaryMessenger) { } } } - /** * Provides implementations for each ProxyApi implementation and provides access to resources needed * by any implementation. @@ -395,13 +395,17 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { * An implementation of [PigeonApiBaseDisplayContainer] used to add a new Dart instance of * `BaseDisplayContainer` to the Dart `InstanceManager`. */ - abstract fun getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer + open fun getPigeonApiBaseDisplayContainer(): PigeonApiBaseDisplayContainer { + return PigeonApiBaseDisplayContainer(this) + } /** * An implementation of [PigeonApiAdDisplayContainer] used to add a new Dart instance of * `AdDisplayContainer` to the Dart `InstanceManager`. */ - abstract fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer + open fun getPigeonApiAdDisplayContainer(): PigeonApiAdDisplayContainer { + return PigeonApiAdDisplayContainer(this) + } /** * An implementation of [PigeonApiAdsLoader] used to add a new Dart instance of `AdsLoader` to the @@ -437,7 +441,9 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { * An implementation of [PigeonApiContentProgressProvider] used to add a new Dart instance of * `ContentProgressProvider` to the Dart `InstanceManager`. */ - abstract fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider + open fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider { + return PigeonApiContentProgressProvider(this) + } /** * An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to @@ -467,7 +473,9 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { * An implementation of [PigeonApiImaSdkSettings] used to add a new Dart instance of * `ImaSdkSettings` to the Dart `InstanceManager`. */ - abstract fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings + open fun getPigeonApiImaSdkSettings(): PigeonApiImaSdkSettings { + return PigeonApiImaSdkSettings(this) + } /** * An implementation of [PigeonApiVideoProgressUpdate] used to add a new Dart instance of @@ -509,7 +517,9 @@ abstract class PigeonProxyApiRegistrar(val binaryMessenger: BinaryMessenger) { * An implementation of [PigeonApiView] used to add a new Dart instance of `View` to the Dart * `InstanceManager`. */ - abstract fun getPigeonApiView(): PigeonApiView + open fun getPigeonApiView(): PigeonApiView { + return PigeonApiView(this) + } /** * An implementation of [PigeonApiMediaPlayer] used to add a new Dart instance of `MediaPlayer` to @@ -732,7 +742,9 @@ enum class AdErrorCode(val raw: Int) { */ VAST_TRAFFICKING_ERROR(21), /** There was an error playing the video ad. */ - VIDEO_PLAY_ERROR(22); + VIDEO_PLAY_ERROR(22), + /** The error code is not recognized by this wrapper. */ + UNKNOWN(23); companion object { fun ofRaw(raw: Int): AdErrorCode? { @@ -842,7 +854,7 @@ enum class AdEventType(val raw: Int) { * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiBaseDisplayContainer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { +open class PigeonApiBaseDisplayContainer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of BaseDisplayContainer and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -880,7 +892,7 @@ abstract class PigeonApiBaseDisplayContainer(open val pigeonRegistrar: PigeonPro * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiAdDisplayContainer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { +open class PigeonApiAdDisplayContainer(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of AdDisplayContainer and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -1325,7 +1337,7 @@ abstract class PigeonApiAdsRequest(open val pigeonRegistrar: PigeonProxyApiRegis * https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiContentProgressProvider(open val pigeonRegistrar: PigeonProxyApiRegistrar) { +open class PigeonApiContentProgressProvider(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -1872,7 +1884,7 @@ abstract class PigeonApiImaSdkFactory(open val pigeonRegistrar: PigeonProxyApiRe * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiImaSdkSettings(open val pigeonRegistrar: PigeonProxyApiRegistrar) { +open class PigeonApiImaSdkSettings(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of ImaSdkSettings and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance( @@ -2484,7 +2496,7 @@ abstract class PigeonApiVideoView(open val pigeonRegistrar: PigeonProxyApiRegist * See https://developer.android.com/reference/android/view/View. */ @Suppress("UNCHECKED_CAST") -abstract class PigeonApiView(open val pigeonRegistrar: PigeonProxyApiRegistrar) { +open class PigeonApiView(open val pigeonRegistrar: PigeonProxyApiRegistrar) { @Suppress("LocalVariableName", "FunctionName") /** Creates a Dart instance of View and attaches it to [pigeon_instanceArg]. */ fun pigeon_newInstance(pigeon_instanceArg: android.view.View, callback: (Result) -> Unit) { diff --git a/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart b/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart index b3e020b6a00..4d7293df429 100644 --- a/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart +++ b/packages/interactive_media_ads/lib/src/android/enum_converter_extensions.dart @@ -79,6 +79,7 @@ extension NativeAdErrorCodeConverter on ima.AdErrorCode { ima.AdErrorCode.vastTooManyRedirects => AdErrorCode.vastTooManyRedirects, ima.AdErrorCode.vastTraffickingError => AdErrorCode.vastTraffickingError, ima.AdErrorCode.videoPlayError => AdErrorCode.videoPlayError, + ima.AdErrorCode.unknown => AdErrorCode.unknownError, }; } } 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 920e0339904..5ba85481c3b 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 @@ -328,56 +328,67 @@ class PigeonInstanceManager { class _PigeonInstanceManagerApi { /// Constructor for [_PigeonInstanceManagerApi]. _PigeonInstanceManagerApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; + : __pigeon_binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + final BinaryMessenger? __pigeon_binaryMessenger; static const MessageCodec pigeonChannelCodec = StandardMessageCodec(); static void setUpMessageHandlers({ + bool pigeon_clearHandlers = false, BinaryMessenger? binaryMessenger, PigeonInstanceManager? instanceManager, }) { - const String channelName = - r'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference'; - final BasicMessageChannel channel = BasicMessageChannel( - channelName, - pigeonChannelCodec, - binaryMessenger: binaryMessenger, - ); - channel.setMessageHandler((Object? message) async { - assert( - message != null, - 'Argument for $channelName was null.', - ); - final int? identifier = message as int?; - assert( - identifier != null, - r'Argument for $channelName, expected non-null int.', - ); - (instanceManager ?? PigeonInstanceManager.instance).remove(identifier!); - return []; - }); + { + final BasicMessageChannel __pigeon_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + __pigeon_channel.setMessageHandler(null); + } else { + __pigeon_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference was null.'); + final List args = (message as List?)!; + final int? arg_identifier = (args[0] as int?); + assert(arg_identifier != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference was null, expected non-null int.'); + try { + (instanceManager ?? PigeonInstanceManager.instance) + .remove(arg_identifier!); + return wrapResponse(empty: true); + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } + }); + } + } } Future removeStrongReference(int identifier) async { - const String channelName = - r'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference'; - final BasicMessageChannel channel = BasicMessageChannel( - channelName, + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.removeStrongReference'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, pigeonChannelCodec, - binaryMessenger: _binaryMessenger, + binaryMessenger: __pigeon_binaryMessenger, ); - final List? replyList = - await channel.send(identifier) as List?; - if (replyList == null) { - throw _createConnectionError(channelName); - } else if (replyList.length > 1) { + final List? __pigeon_replyList = + await __pigeon_channel.send([identifier]) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -388,21 +399,23 @@ class _PigeonInstanceManagerApi { /// /// This is typically called after a hot restart. Future clear() async { - const String channelName = - r'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear'; - final BasicMessageChannel channel = BasicMessageChannel( - channelName, + const String __pigeon_channelName = + 'dev.flutter.pigeon.interactive_media_ads.PigeonInstanceManagerApi.clear'; + final BasicMessageChannel __pigeon_channel = + BasicMessageChannel( + __pigeon_channelName, pigeonChannelCodec, - binaryMessenger: _binaryMessenger, + binaryMessenger: __pigeon_binaryMessenger, ); - final List? replyList = await channel.send(null) as List?; - if (replyList == null) { - throw _createConnectionError(channelName); - } else if (replyList.length > 1) { + final List? __pigeon_replyList = + await __pigeon_channel.send(null) as List?; + if (__pigeon_replyList == null) { + throw _createConnectionError(__pigeon_channelName); + } else if (__pigeon_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: __pigeon_replyList[0]! as String, + message: __pigeon_replyList[1] as String?, + details: __pigeon_replyList[2], ); } else { return; @@ -513,6 +526,9 @@ enum AdErrorCode { /// There was an error playing the video ad. videoPlayError, + + /// The error code is not recognized by this wrapper. + unknown, } /// Specifies when the error was encountered, during either ad loading or playback. 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 1af6ec946e0..6bb18ce6aa4 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -96,6 +96,9 @@ enum AdErrorCode { /// There was an error playing the video ad. videoPlayError, + + /// The error code is not recognized by this wrapper. + unknown, } /// Specifies when the error was encountered, during either ad loading or playback. diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index cfa07c385b4..d3009436850 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -28,11 +28,11 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 -# pigeon: -# git: -# url: git@github.com:bparrishMines/packages.git -# ref: pigeon_kotlin_split -# path: packages/pigeon + pigeon: + git: + url: git@github.com:bparrishMines/packages.git + ref: pigeon_kotlin_split + path: packages/pigeon topics: - ads From dc6f38aa76078cf36aa8d7827be64c5934486250 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 24 Jun 2024 20:28:03 -0400 Subject: [PATCH 71/76] comment pigeon --- .../interactive_media_ads_android.dart | 1433 +++++++++-------- packages/interactive_media_ads/pubspec.yaml | 5 - 2 files changed, 718 insertions(+), 720 deletions(-) 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 6bb18ce6aa4..972a1e6818c 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -2,719 +2,722 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// TODO(bparrishMines): Uncomment this file once +// https://github.com/flutter/packages/pull/6371 lands. This file uses the +// Kotlin ProxyApi feature from pigeon. // ignore_for_file: avoid_unused_constructor_parameters - -import 'package:pigeon/pigeon.dart'; - -@ConfigurePigeon( - PigeonOptions( - copyrightHeader: 'pigeons/copyright.txt', - dartOut: 'lib/src/android/interactive_media_ads.g.dart', - kotlinOut: - 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt', - kotlinOptions: KotlinOptions( - package: 'dev.flutter.packages.interactive_media_ads', - ), - ), -) - -/// The types of error that can be encountered. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. -enum AdErrorCode { - /// Ads player was not provided. - adsPlayerWasNotProvided, - - /// There was a problem requesting ads from the server. - adsRequestNetworkError, - - /// A companion ad failed to load or render. - companionAdLoadingFailed, - - /// There was a problem requesting ads from the server. - failedToRequestAds, - - /// An error internal to the SDK occurred. - internalError, - - /// Invalid arguments were provided to SDK methods. - invalidArguments, - - /// An overlay ad failed to load. - overlayAdLoadingFailed, - - /// An overlay ad failed to render. - overlayAdPlayingFailed, - - /// Ads list was returned but ContentProgressProvider was not configured. - playlistNoContentTracking, - - /// Ads loader sent ads loaded event when it was not expected. - unexpectedAdsLoadedEvent, - - /// The ad response was not understood and cannot be parsed. - unknownAdResponse, - - /// An unexpected error occurred and the cause is not known. - unknownError, - - /// No assets were found in the VAST ad response. - vastAssetNotFound, - - /// A VAST response containing a single `` tag with no child tags. - vastEmptyResponse, - - /// Assets were found in the VAST ad response for a linear ad, but none of - /// them matched the video player's capabilities. - vastLinearAssetMismatch, - - /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper - /// or inline ad load has timed out. - vastLoadTimeout, - - /// The ad response was not recognized as a valid VAST ad. - vastMalformedResponse, - - /// Failed to load media assets from a VAST response. - vastMediaLoadTimeout, - - /// Assets were found in the VAST ad response for a nonlinear ad, but none of - /// them matched the video player's capabilities. - vastNonlinearAssetMismatch, - - /// No Ads VAST response after one or more wrappers. - vastNoAdsAfterWrapper, - - /// The maximum number of VAST wrapper redirects has been reached. - vastTooManyRedirects, - - /// Trafficking error. - /// - /// Video player received an ad type that it was not expecting and/or cannot - /// display. - vastTraffickingError, - - /// There was an error playing the video ad. - videoPlayError, - - /// The error code is not recognized by this wrapper. - unknown, -} - -/// Specifies when the error was encountered, during either ad loading or playback. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. -enum AdErrorType { - /// Indicates that the error was encountered when the ad was being loaded. - load, - - /// Indicates that the error was encountered after the ad loaded, during ad play. - play, - - /// The error is not recognized by this wrapper. - unknown, -} - -/// Types of events that can occur during ad playback. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. -enum AdEventType { - /// Fired when an ad break in a stream ends. - adBreakEnded, - - /// Fired when an ad break will not play back any ads. - adBreakFetchError, - - /// Fired when an ad break is ready from VMAP or ad rule ads. - adBreakReady, - - /// Fired when an ad break in a stream starts. - adBreakStarted, - - /// Fired when playback stalls while the ad buffers. - adBuffering, - - /// Fired when an ad period in a stream ends. - adPeriodEnded, - - /// Fired when an ad period in a stream starts. - adPeriodStarted, - - /// Fired to inform of ad progress and can be used by publisher to display a - /// countdown timer. - adProgress, - - /// Fired when the ads manager is done playing all the valid ads in the ads - /// response, or when the response doesn't return any valid ads. - allAdsCompleted, - - /// Fired when an ad is clicked. - clicked, - - /// Fired when an ad completes playing. - completed, - - /// Fired when content should be paused. - contentPauseRequested, - - /// Fired when content should be resumed. - contentResumeRequested, - - /// Fired when VOD stream cuepoints have changed. - cuepointsChanged, - - /// Fired when the ad playhead crosses first quartile. - firstQuartile, - - /// The user has closed the icon fallback image dialog. - iconFallbackImageClosed, - - /// The user has tapped an ad icon. - iconTapped, - - /// Fired when the VAST response has been received. - loaded, - - /// Fired to enable the SDK to communicate a message to be logged, which is - /// stored in adData. - log, - - /// Fired when the ad playhead crosses midpoint. - midpoint, - - /// Fired when an ad is paused. - paused, - - /// Fired when an ad is resumed. - resumed, - - /// Fired when an ad changes its skippable state. - skippableStateChanged, - - /// Fired when an ad was skipped. - skipped, - - /// Fired when an ad starts playing. - started, - - /// Fired when a non-clickthrough portion of a video ad is clicked. - tapped, - - /// Fired when the ad playhead crosses third quartile. - thirdQuartile, - - /// The event type is not recognized by this wrapper. - unknown, -} - -/// A base class for more specialized container interfaces. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', - ), -) -abstract class BaseDisplayContainer {} - -/// A container in which to display the ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', - ), -) -abstract class AdDisplayContainer implements BaseDisplayContainer {} - -/// An object which allows publishers to request ads from ad servers or a -/// dynamic ad insertion stream. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', - ), -) -abstract class AdsLoader { - /// Registers a listener for errors that occur during the ads request. - void addAdErrorListener(AdErrorListener listener); - - /// Registers a listener for the ads manager loaded event. - void addAdsLoadedListener(AdsLoadedListener listener); - - /// Requests ads from a server. - void requestAds(AdsRequest request); -} - -/// An event raised when ads are successfully loaded from the ad server through an AdsLoader. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', - ), -) -abstract class AdsManagerLoadedEvent { - /// The ads manager that will control playback of the loaded ads, or null when - /// using dynamic ad insertion. - late final AdsManager manager; -} - -/// An event raised when there is an error loading or playing ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', - ), -) -abstract class AdErrorEvent { - /// The AdError that caused this event. - late final AdError error; -} - -/// An error that occurred in the SDK. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', - ), -) -abstract class AdError { - /// The error's code. - late final AdErrorCode errorCode; - - /// The error code's number. - late final int errorCodeNumber; - - /// The error's type. - late final AdErrorType errorType; - - /// A human-readable summary of the error. - late final String message; -} - -/// 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. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', - ), -) -abstract class AdsRequest { - /// Sets the URL from which ads will be requested. - void setAdTagUrl(String adTagUrl); - - /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks - /// based on content progress (cue points). - void setContentProgressProvider(ContentProgressProvider provider); -} - -/// Defines an interface to allow SDK to track progress of the content video. -/// -/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', - ), -) -abstract class ContentProgressProvider {} - -/// An object which handles playing ads after they've been received from the -/// server. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', - ), -) -abstract class AdsManager extends BaseManager { - /// Discards current ad break and resumes content. - void discardAdBreak(); - - /// Pauses the current ad. - void pause(); - - /// Starts playing the ads. - void start(); -} - -/// Base interface for managing ads.. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', - ), -) -abstract class BaseManager { - /// Registers a listener for errors that occur during the ad or stream - /// initialization and playback. - void addAdErrorListener(AdErrorListener errorListener); - - /// Registers a listener for ad events that occur during ad or stream - /// initialization and playback. - void addAdEventListener(AdEventListener adEventListener); - - /// Stops the ad and all tracking, then releases all assets that were loaded - /// to play the ad. - void destroy(); - - /// Initializes the ad experience using default rendering settings - void init(); -} - -/// Event to notify publisher that an event occurred with an Ad. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', - ), -) -abstract class AdEvent { - /// The type of event that occurred. - late final AdEventType type; -} - -/// Factory class for creating SDK objects. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', - ), -) -abstract class ImaSdkFactory { - @static - @attached - late final ImaSdkFactory instance; - - @static - AdDisplayContainer createAdDisplayContainer( - ViewGroup container, - VideoAdPlayer player, - ); - - /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. - ImaSdkSettings createImaSdkSettings(); - - /// Creates an `AdsLoader` for requesting ads using the specified settings - /// object. - AdsLoader createAdsLoader( - ImaSdkSettings settings, - AdDisplayContainer container, - ); - - /// Creates an AdsRequest object to contain the data used to request ads. - AdsRequest createAdsRequest(); -} - -/// Defines general SDK settings that are used when creating an `AdsLoader`. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', - ), -) -abstract class ImaSdkSettings {} - -/// Defines an update to the video's progress. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', - ), -) -abstract class VideoProgressUpdate { - VideoProgressUpdate(int currentTimeMs, int durationMs); - - /// Value to use for cases when progress is not yet defined, such as video - /// initialization. - @static - @attached - late final VideoProgressUpdate videoTimeNotReady; -} - -/// The minimal information required to play an ad. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', - ), -) -abstract class AdMediaInfo { - late final String url; -} - -/// An ad may be part of a pod of ads. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', - ), -) -abstract class AdPodInfo { - /// The position of the ad within the pod. - /// - /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the - /// ad is not part of a pod, this will return 1. - late final int adPosition; - - /// The maximum duration of the pod in seconds. - /// - /// For unknown duration, -1 is returned. - late final double maxDuration; - - /// Client side and DAI VOD: Returns the index of the ad pod. - late final int podIndex; - - /// The content time offset at which the current ad pod was scheduled. - /// - /// For preroll pod, 0 is returned. For midrolls, the scheduled time is - /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this - /// ad is not part of a pod, or the pod is not part of an ad playlist. - late final double timeOffset; - - /// The total number of ads contained within this pod, including bumpers. - late final int totalAds; - - /// Returns true if the ad is a bumper ad. - late final bool isBumper; -} - -/// FrameLayout is designed to block out an area on the screen to display a -/// single item. -/// -/// See https://developer.android.com/reference/android/widget/FrameLayout. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.widget.FrameLayout', - ), -) -abstract class FrameLayout extends ViewGroup { - FrameLayout(); -} - -/// A special view that can contain other views (called children.) -/// -/// See https://developer.android.com/reference/android/view/ViewGroup. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.view.ViewGroup', - ), -) -abstract class ViewGroup extends View { - void addView(View view); -} - -/// Displays a video file. -/// -/// See https://developer.android.com/reference/android/widget/VideoView. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.widget.VideoView', - ), -) -abstract class VideoView extends View { - VideoView(); - - /// Callback to be invoked when the media source is ready for playback. - late final void Function(MediaPlayer player)? onPrepared; - - /// Callback to be invoked when playback of a media source has completed. - late final void Function(MediaPlayer player)? onCompletion; - - /// Callback to be invoked when there has been an error during an asynchronous - /// operation. - late final void Function(MediaPlayer player, int what, int extra) onError; - - /// Sets the URI of the video. - void setVideoUri(String uri); - - /// The current position of the playing video. - /// - /// In milliseconds. - int getCurrentPosition(); -} - -/// This class represents the basic building block for user interface components. -/// -/// See https://developer.android.com/reference/android/view/View. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), -) -abstract class View {} - -/// MediaPlayer class can be used to control playback of audio/video files and -/// streams. -/// -/// See https://developer.android.com/reference/android/media/MediaPlayer. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: 'android.media.MediaPlayer', - ), -) -abstract class MediaPlayer { - /// Gets the duration of the file. - int getDuration(); - - /// Seeks to specified time position. - void seekTo(int mSec); - - /// Starts or resumes playback. - void start(); - - /// Pauses playback. - void pause(); - - /// Stops playback after playback has been started or paused. - void stop(); -} - -/// Callbacks that the player must fire. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', - ), -) -abstract class VideoAdPlayerCallback { - /// Fire this callback periodically as ad playback occurs. - void onAdProgress( - AdMediaInfo adMediaInfo, - VideoProgressUpdate videoProgressUpdate, - ); - - /// Fire this callback when video playback stalls waiting for data. - void onBuffering(AdMediaInfo adMediaInfo); - - /// Fire this callback when all content has finished playing. - void onContentComplete(); - - /// Fire this callback when the video finishes playing. - void onEnded(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video has encountered an error. - void onError(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is ready to begin playback. - void onLoaded(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is paused. - void onPause(AdMediaInfo adMediaInfo); - - /// Fire this callback when the player begins playing a video. - void onPlay(AdMediaInfo adMediaInfo); - - /// Fire this callback when the video is unpaused. - void onResume(AdMediaInfo adMediaInfo); - - /// Fire this callback when the playback volume changes. - void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); -} - -/// Defines the set of methods that a video player must implement to be used by -/// the IMA SDK, as well as a set of callbacks that it must fire. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', - ), -) -abstract class VideoAdPlayer { - VideoAdPlayer(); - - /// Adds a callback. - late final void Function(VideoAdPlayerCallback callback) addCallback; - - /// Loads a video ad hosted at AdMediaInfo. - late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; - - /// Pauses playing the current ad. - late final void Function(AdMediaInfo adMediaInfo) pauseAd; - - /// Starts or resumes playing the video ad referenced by the AdMediaInfo, - /// provided loadAd has already been called for it. - late final void Function(AdMediaInfo adMediaInfo) playAd; - - /// Cleans up and releases all resources used by the `VideoAdPlayer`. - late final void Function() release; - - /// Removes a callback. - late final void Function(VideoAdPlayerCallback callback) removeCallback; - - /// Stops playing the current ad. - late final void Function(AdMediaInfo adMediaInfo) stopAd; - - /// The volume of the player as a percentage from 0 to 100. - void setVolume(int value); - - /// The `VideoProgressUpdate` describing playback progress of the current - /// video. - void setAdProgress(VideoProgressUpdate progress); -} - -/// Listener interface for notification of ad load or stream load completion. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', - ), -) -abstract class AdsLoadedListener { - AdsLoadedListener(); - - /// Called once the AdsManager or StreamManager has been loaded. - late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; -} - -/// Interface for classes that will listen to AdErrorEvents. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', - ), -) -abstract class AdErrorListener { - AdErrorListener(); - - /// Called when an error occurs. - late final void Function(AdErrorEvent event) onAdError; -} - -/// Listener interface for ad events. -/// -/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. -@ProxyApi( - kotlinOptions: KotlinProxyApiOptions( - fullClassName: - 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', - ), -) -abstract class AdEventListener { - AdEventListener(); - - /// Respond to an occurrence of an AdEvent. - late final void Function(AdEvent event) onAdEvent; -} +// +// import 'package:pigeon/pigeon.dart'; +// +// @ConfigurePigeon( +// PigeonOptions( +// copyrightHeader: 'pigeons/copyright.txt', +// dartOut: 'lib/src/android/interactive_media_ads.g.dart', +// kotlinOut: +// 'android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt', +// kotlinOptions: KotlinOptions( +// package: 'dev.flutter.packages.interactive_media_ads', +// ), +// ), +// ) +// +// /// The types of error that can be encountered. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorCode.html. +// enum AdErrorCode { +// /// Ads player was not provided. +// adsPlayerWasNotProvided, +// +// /// There was a problem requesting ads from the server. +// adsRequestNetworkError, +// +// /// A companion ad failed to load or render. +// companionAdLoadingFailed, +// +// /// There was a problem requesting ads from the server. +// failedToRequestAds, +// +// /// An error internal to the SDK occurred. +// internalError, +// +// /// Invalid arguments were provided to SDK methods. +// invalidArguments, +// +// /// An overlay ad failed to load. +// overlayAdLoadingFailed, +// +// /// An overlay ad failed to render. +// overlayAdPlayingFailed, +// +// /// Ads list was returned but ContentProgressProvider was not configured. +// playlistNoContentTracking, +// +// /// Ads loader sent ads loaded event when it was not expected. +// unexpectedAdsLoadedEvent, +// +// /// The ad response was not understood and cannot be parsed. +// unknownAdResponse, +// +// /// An unexpected error occurred and the cause is not known. +// unknownError, +// +// /// No assets were found in the VAST ad response. +// vastAssetNotFound, +// +// /// A VAST response containing a single `` tag with no child tags. +// vastEmptyResponse, +// +// /// Assets were found in the VAST ad response for a linear ad, but none of +// /// them matched the video player's capabilities. +// vastLinearAssetMismatch, +// +// /// At least one VAST wrapper ad loaded successfully and a subsequent wrapper +// /// or inline ad load has timed out. +// vastLoadTimeout, +// +// /// The ad response was not recognized as a valid VAST ad. +// vastMalformedResponse, +// +// /// Failed to load media assets from a VAST response. +// vastMediaLoadTimeout, +// +// /// Assets were found in the VAST ad response for a nonlinear ad, but none of +// /// them matched the video player's capabilities. +// vastNonlinearAssetMismatch, +// +// /// No Ads VAST response after one or more wrappers. +// vastNoAdsAfterWrapper, +// +// /// The maximum number of VAST wrapper redirects has been reached. +// vastTooManyRedirects, +// +// /// Trafficking error. +// /// +// /// Video player received an ad type that it was not expecting and/or cannot +// /// display. +// vastTraffickingError, +// +// /// There was an error playing the video ad. +// videoPlayError, +// +// /// The error code is not recognized by this wrapper. +// unknown, +// } +// +// /// Specifies when the error was encountered, during either ad loading or playback. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.AdErrorType.html. +// enum AdErrorType { +// /// Indicates that the error was encountered when the ad was being loaded. +// load, +// +// /// Indicates that the error was encountered after the ad loaded, during ad play. +// play, +// +// /// The error is not recognized by this wrapper. +// unknown, +// } +// +// /// Types of events that can occur during ad playback. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventType.html. +// enum AdEventType { +// /// Fired when an ad break in a stream ends. +// adBreakEnded, +// +// /// Fired when an ad break will not play back any ads. +// adBreakFetchError, +// +// /// Fired when an ad break is ready from VMAP or ad rule ads. +// adBreakReady, +// +// /// Fired when an ad break in a stream starts. +// adBreakStarted, +// +// /// Fired when playback stalls while the ad buffers. +// adBuffering, +// +// /// Fired when an ad period in a stream ends. +// adPeriodEnded, +// +// /// Fired when an ad period in a stream starts. +// adPeriodStarted, +// +// /// Fired to inform of ad progress and can be used by publisher to display a +// /// countdown timer. +// adProgress, +// +// /// Fired when the ads manager is done playing all the valid ads in the ads +// /// response, or when the response doesn't return any valid ads. +// allAdsCompleted, +// +// /// Fired when an ad is clicked. +// clicked, +// +// /// Fired when an ad completes playing. +// completed, +// +// /// Fired when content should be paused. +// contentPauseRequested, +// +// /// Fired when content should be resumed. +// contentResumeRequested, +// +// /// Fired when VOD stream cuepoints have changed. +// cuepointsChanged, +// +// /// Fired when the ad playhead crosses first quartile. +// firstQuartile, +// +// /// The user has closed the icon fallback image dialog. +// iconFallbackImageClosed, +// +// /// The user has tapped an ad icon. +// iconTapped, +// +// /// Fired when the VAST response has been received. +// loaded, +// +// /// Fired to enable the SDK to communicate a message to be logged, which is +// /// stored in adData. +// log, +// +// /// Fired when the ad playhead crosses midpoint. +// midpoint, +// +// /// Fired when an ad is paused. +// paused, +// +// /// Fired when an ad is resumed. +// resumed, +// +// /// Fired when an ad changes its skippable state. +// skippableStateChanged, +// +// /// Fired when an ad was skipped. +// skipped, +// +// /// Fired when an ad starts playing. +// started, +// +// /// Fired when a non-clickthrough portion of a video ad is clicked. +// tapped, +// +// /// Fired when the ad playhead crosses third quartile. +// thirdQuartile, +// +// /// The event type is not recognized by this wrapper. +// unknown, +// } +// +// /// A base class for more specialized container interfaces. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseDisplayContainer.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.BaseDisplayContainer', +// ), +// ) +// abstract class BaseDisplayContainer {} +// +// /// A container in which to display the ads. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdDisplayContainer. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdDisplayContainer', +// ), +// ) +// abstract class AdDisplayContainer implements BaseDisplayContainer {} +// +// /// An object which allows publishers to request ads from ad servers or a +// /// dynamic ad insertion stream. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsLoader', +// ), +// ) +// abstract class AdsLoader { +// /// Registers a listener for errors that occur during the ads request. +// void addAdErrorListener(AdErrorListener listener); +// +// /// Registers a listener for the ads manager loaded event. +// void addAdsLoadedListener(AdsLoadedListener listener); +// +// /// Requests ads from a server. +// void requestAds(AdsRequest request); +// } +// +// /// An event raised when ads are successfully loaded from the ad server through an AdsLoader. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManagerLoadedEvent.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent', +// ), +// ) +// abstract class AdsManagerLoadedEvent { +// /// The ads manager that will control playback of the loaded ads, or null when +// /// using dynamic ad insertion. +// late final AdsManager manager; +// } +// +// /// An event raised when there is an error loading or playing ads. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdErrorEvent', +// ), +// ) +// abstract class AdErrorEvent { +// /// The AdError that caused this event. +// late final AdError error; +// } +// +// /// An error that occurred in the SDK. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdError.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdError', +// ), +// ) +// abstract class AdError { +// /// The error's code. +// late final AdErrorCode errorCode; +// +// /// The error code's number. +// late final int errorCodeNumber; +// +// /// The error's type. +// late final AdErrorType errorType; +// +// /// A human-readable summary of the error. +// late final String message; +// } +// +// /// 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. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsRequest', +// ), +// ) +// abstract class AdsRequest { +// /// Sets the URL from which ads will be requested. +// void setAdTagUrl(String adTagUrl); +// +// /// Attaches a ContentProgressProvider instance to allow scheduling ad breaks +// /// based on content progress (cue points). +// void setContentProgressProvider(ContentProgressProvider provider); +// } +// +// /// Defines an interface to allow SDK to track progress of the content video. +// /// +// /// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider', +// ), +// ) +// abstract class ContentProgressProvider {} +// +// /// An object which handles playing ads after they've been received from the +// /// server. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsManager. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdsManager', +// ), +// ) +// abstract class AdsManager extends BaseManager { +// /// Discards current ad break and resumes content. +// void discardAdBreak(); +// +// /// Pauses the current ad. +// void pause(); +// +// /// Starts playing the ads. +// void start(); +// } +// +// /// Base interface for managing ads.. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.BaseManager', +// ), +// ) +// abstract class BaseManager { +// /// Registers a listener for errors that occur during the ad or stream +// /// initialization and playback. +// void addAdErrorListener(AdErrorListener errorListener); +// +// /// Registers a listener for ad events that occur during ad or stream +// /// initialization and playback. +// void addAdEventListener(AdEventListener adEventListener); +// +// /// Stops the ad and all tracking, then releases all assets that were loaded +// /// to play the ad. +// void destroy(); +// +// /// Initializes the ad experience using default rendering settings +// void init(); +// } +// +// /// Event to notify publisher that an event occurred with an Ad. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdEvent', +// ), +// ) +// abstract class AdEvent { +// /// The type of event that occurred. +// late final AdEventType type; +// } +// +// /// Factory class for creating SDK objects. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkFactory', +// ), +// ) +// abstract class ImaSdkFactory { +// @static +// @attached +// late final ImaSdkFactory instance; +// +// @static +// AdDisplayContainer createAdDisplayContainer( +// ViewGroup container, +// VideoAdPlayer player, +// ); +// +// /// Creates an `ImaSdkSettings` object for configuring the IMA SDK. +// ImaSdkSettings createImaSdkSettings(); +// +// /// Creates an `AdsLoader` for requesting ads using the specified settings +// /// object. +// AdsLoader createAdsLoader( +// ImaSdkSettings settings, +// AdDisplayContainer container, +// ); +// +// /// Creates an AdsRequest object to contain the data used to request ads. +// AdsRequest createAdsRequest(); +// } +// +// /// Defines general SDK settings that are used when creating an `AdsLoader`. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.ImaSdkSettings', +// ), +// ) +// abstract class ImaSdkSettings {} +// +// /// Defines an update to the video's progress. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoProgressUpdate.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate', +// ), +// ) +// abstract class VideoProgressUpdate { +// VideoProgressUpdate(int currentTimeMs, int durationMs); +// +// /// Value to use for cases when progress is not yet defined, such as video +// /// initialization. +// @static +// @attached +// late final VideoProgressUpdate videoTimeNotReady; +// } +// +// /// The minimal information required to play an ad. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/AdMediaInfo.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.player.AdMediaInfo', +// ), +// ) +// abstract class AdMediaInfo { +// late final String url; +// } +// +// /// An ad may be part of a pod of ads. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdPodInfo.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'com.google.ads.interactivemedia.v3.api.AdPodInfo', +// ), +// ) +// abstract class AdPodInfo { +// /// The position of the ad within the pod. +// /// +// /// The value returned is one-based, for example, 1 of 2, 2 of 2, etc. If the +// /// ad is not part of a pod, this will return 1. +// late final int adPosition; +// +// /// The maximum duration of the pod in seconds. +// /// +// /// For unknown duration, -1 is returned. +// late final double maxDuration; +// +// /// Client side and DAI VOD: Returns the index of the ad pod. +// late final int podIndex; +// +// /// The content time offset at which the current ad pod was scheduled. +// /// +// /// For preroll pod, 0 is returned. For midrolls, the scheduled time is +// /// returned in seconds. For postroll, -1 is returned. Defaults to 0 if this +// /// ad is not part of a pod, or the pod is not part of an ad playlist. +// late final double timeOffset; +// +// /// The total number of ads contained within this pod, including bumpers. +// late final int totalAds; +// +// /// Returns true if the ad is a bumper ad. +// late final bool isBumper; +// } +// +// /// FrameLayout is designed to block out an area on the screen to display a +// /// single item. +// /// +// /// See https://developer.android.com/reference/android/widget/FrameLayout. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.widget.FrameLayout', +// ), +// ) +// abstract class FrameLayout extends ViewGroup { +// FrameLayout(); +// } +// +// /// A special view that can contain other views (called children.) +// /// +// /// See https://developer.android.com/reference/android/view/ViewGroup. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.view.ViewGroup', +// ), +// ) +// abstract class ViewGroup extends View { +// void addView(View view); +// } +// +// /// Displays a video file. +// /// +// /// See https://developer.android.com/reference/android/widget/VideoView. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.widget.VideoView', +// ), +// ) +// abstract class VideoView extends View { +// VideoView(); +// +// /// Callback to be invoked when the media source is ready for playback. +// late final void Function(MediaPlayer player)? onPrepared; +// +// /// Callback to be invoked when playback of a media source has completed. +// late final void Function(MediaPlayer player)? onCompletion; +// +// /// Callback to be invoked when there has been an error during an asynchronous +// /// operation. +// late final void Function(MediaPlayer player, int what, int extra) onError; +// +// /// Sets the URI of the video. +// void setVideoUri(String uri); +// +// /// The current position of the playing video. +// /// +// /// In milliseconds. +// int getCurrentPosition(); +// } +// +// /// This class represents the basic building block for user interface components. +// /// +// /// See https://developer.android.com/reference/android/view/View. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions(fullClassName: 'android.view.View'), +// ) +// abstract class View {} +// +// /// MediaPlayer class can be used to control playback of audio/video files and +// /// streams. +// /// +// /// See https://developer.android.com/reference/android/media/MediaPlayer. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: 'android.media.MediaPlayer', +// ), +// ) +// abstract class MediaPlayer { +// /// Gets the duration of the file. +// int getDuration(); +// +// /// Seeks to specified time position. +// void seekTo(int mSec); +// +// /// Starts or resumes playback. +// void start(); +// +// /// Pauses playback. +// void pause(); +// +// /// Stops playback after playback has been started or paused. +// void stop(); +// } +// +// /// Callbacks that the player must fire. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.VideoAdPlayerCallback.html +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer.VideoAdPlayerCallback', +// ), +// ) +// abstract class VideoAdPlayerCallback { +// /// Fire this callback periodically as ad playback occurs. +// void onAdProgress( +// AdMediaInfo adMediaInfo, +// VideoProgressUpdate videoProgressUpdate, +// ); +// +// /// Fire this callback when video playback stalls waiting for data. +// void onBuffering(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when all content has finished playing. +// void onContentComplete(); +// +// /// Fire this callback when the video finishes playing. +// void onEnded(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video has encountered an error. +// void onError(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video is ready to begin playback. +// void onLoaded(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video is paused. +// void onPause(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the player begins playing a video. +// void onPlay(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the video is unpaused. +// void onResume(AdMediaInfo adMediaInfo); +// +// /// Fire this callback when the playback volume changes. +// void onVolumeChanged(AdMediaInfo adMediaInfo, int percentage); +// } +// +// /// Defines the set of methods that a video player must implement to be used by +// /// the IMA SDK, as well as a set of callbacks that it must fire. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/player/VideoAdPlayer.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.player.VideoAdPlayer', +// ), +// ) +// abstract class VideoAdPlayer { +// VideoAdPlayer(); +// +// /// Adds a callback. +// late final void Function(VideoAdPlayerCallback callback) addCallback; +// +// /// Loads a video ad hosted at AdMediaInfo. +// late final void Function(AdMediaInfo adMediaInfo, AdPodInfo adPodInfo) loadAd; +// +// /// Pauses playing the current ad. +// late final void Function(AdMediaInfo adMediaInfo) pauseAd; +// +// /// Starts or resumes playing the video ad referenced by the AdMediaInfo, +// /// provided loadAd has already been called for it. +// late final void Function(AdMediaInfo adMediaInfo) playAd; +// +// /// Cleans up and releases all resources used by the `VideoAdPlayer`. +// late final void Function() release; +// +// /// Removes a callback. +// late final void Function(VideoAdPlayerCallback callback) removeCallback; +// +// /// Stops playing the current ad. +// late final void Function(AdMediaInfo adMediaInfo) stopAd; +// +// /// The volume of the player as a percentage from 0 to 100. +// void setVolume(int value); +// +// /// The `VideoProgressUpdate` describing playback progress of the current +// /// video. +// void setAdProgress(VideoProgressUpdate progress); +// } +// +// /// Listener interface for notification of ad load or stream load completion. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader.AdsLoadedListener.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdsLoader.AdsLoadedListener', +// ), +// ) +// abstract class AdsLoadedListener { +// AdsLoadedListener(); +// +// /// Called once the AdsManager or StreamManager has been loaded. +// late final void Function(AdsManagerLoadedEvent event) onAdsManagerLoaded; +// } +// +// /// Interface for classes that will listen to AdErrorEvents. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdErrorEvent.AdErrorListener.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdErrorEvent.AdErrorListener', +// ), +// ) +// abstract class AdErrorListener { +// AdErrorListener(); +// +// /// Called when an error occurs. +// late final void Function(AdErrorEvent event) onAdError; +// } +// +// /// Listener interface for ad events. +// /// +// /// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdEvent.AdEventListener.html. +// @ProxyApi( +// kotlinOptions: KotlinProxyApiOptions( +// fullClassName: +// 'com.google.ads.interactivemedia.v3.api.AdEvent.AdEventListener', +// ), +// ) +// abstract class AdEventListener { +// AdEventListener(); +// +// /// Respond to an occurrence of an AdEvent. +// late final void Function(AdEvent event) onAdEvent; +// } diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index d3009436850..123a35dc76d 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -28,11 +28,6 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.4.4 - pigeon: - git: - url: git@github.com:bparrishMines/packages.git - ref: pigeon_kotlin_split - path: packages/pigeon topics: - ads From 819441a5e8d11309c475dec8a56f83a2153b9821 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:06:26 -0400 Subject: [PATCH 72/76] add flutter request agent --- .../interactive_media_ads/AdsRequestProxyApi.kt | 10 +++++++++- .../interactive_media_ads/AdsRequestProxyApiTest.kt | 4 +++- packages/interactive_media_ads/pubspec.yaml | 2 +- 3 files changed, 13 insertions(+), 3 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 eb9555a9b19..9b9c10e4c5f 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 @@ -15,8 +15,16 @@ import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider */ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsRequest(pigeonRegistrar) { + companion object { + /** + * The current version of the `interactive_media_ads`. + * + * This must match the version in pubspec.yaml. + **/ + const val pluginVersion = "0.0.2" + } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { - pigeon_instance.adTagUrl = adTagUrl + pigeon_instance.adTagUrl = "$adTagUrl&request_agent=Flutter-IMA-$pluginVersion" } override fun setContentProgressProvider( 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 f8abe621502..b236fa9121a 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 @@ -9,6 +9,8 @@ import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify +import java.io.File +import java.nio.file.FileSystem class AdsRequestProxyApiTest { @Test @@ -18,7 +20,7 @@ class AdsRequestProxyApiTest { val instance = mock() api.setAdTagUrl(instance, "adTag") - verify(instance).adTagUrl = "adTag" + verify(instance).adTagUrl = "adTag&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}" } @Test diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 123a35dc76d..c3bc1e75b17 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.0.2 +version: 0.0.2 # This must match the version in `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` environment: sdk: ^3.2.3 From eda9cacca4bc6bc9db65e0d174d530f2ac1ee390 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:06:41 -0400 Subject: [PATCH 73/76] request agent test --- .../test/version_test.dart | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 packages/interactive_media_ads/test/version_test.dart diff --git a/packages/interactive_media_ads/test/version_test.dart b/packages/interactive_media_ads/test/version_test.dart new file mode 100644 index 00000000000..38ccb9a2406 --- /dev/null +++ b/packages/interactive_media_ads/test/version_test.dart @@ -0,0 +1,27 @@ +// 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. + +import 'dart:io'; + +import 'package:flutter_test/flutter_test.dart'; + +void main() { + test('AdsRequestProxyApi.pluginVersion matches pubspec ersion', () { + final String pubspecPath = '${Directory.current.path}/pubspec.yaml'; + final String pubspec = File(pubspecPath).readAsStringSync(); + final RegExp regex = RegExp(r'version:\s*(.*?) #'); + final RegExpMatch? match = regex.firstMatch(pubspec); + final String pubspecVersion = match!.group(1)!.trim(); + + final String adsRequestProxyApiPath = + '${Directory.current.path}/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt'; + final String apiFileAsString = + File(adsRequestProxyApiPath).readAsStringSync(); + + expect( + apiFileAsString, + contains('const val pluginVersion = "$pubspecVersion"'), + ); + }); +} From 6a18facfce531e86f50ff7680d5fca91d61d9508 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:34:31 -0400 Subject: [PATCH 74/76] formatting and lint --- .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 3 ++- .../interactive_media_ads/InteractiveMediaAdsLibrary.g.kt | 2 +- .../packages/interactive_media_ads/AdsRequestProxyApiTest.kt | 5 ++--- 3 files changed, 5 insertions(+), 5 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 9b9c10e4c5f..fe9a12d6f48 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 @@ -20,9 +20,10 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * The current version of the `interactive_media_ads`. * * This must match the version in pubspec.yaml. - **/ + */ const val pluginVersion = "0.0.2" } + override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { pigeon_instance.adTagUrl = "$adTagUrl&request_agent=Flutter-IMA-$pluginVersion" } 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 96f2868211c..49d21f7b51e 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 @@ -3,7 +3,7 @@ // found in the LICENSE file. // Autogenerated from Pigeon (v19.1.0), do not edit directly. // See also: https://pub.dev/packages/pigeon -@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") +@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass", "SyntheticAccessor") package dev.flutter.packages.interactive_media_ads 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 b236fa9121a..66c3d35ee55 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 @@ -9,8 +9,6 @@ import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider import kotlin.test.Test import org.mockito.kotlin.mock import org.mockito.kotlin.verify -import java.io.File -import java.nio.file.FileSystem class AdsRequestProxyApiTest { @Test @@ -20,7 +18,8 @@ class AdsRequestProxyApiTest { val instance = mock() api.setAdTagUrl(instance, "adTag") - verify(instance).adTagUrl = "adTag&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}" + verify(instance).adTagUrl = + "adTag&request_agent=Flutter-IMA-${AdsRequestProxyApi.pluginVersion}" } @Test From 4829c85b18ccf6ba3c2f11e3d12c3d297855b482 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 24 Jun 2024 21:39:18 -0400 Subject: [PATCH 75/76] only run example on Android --- packages/interactive_media_ads/example/lib/main.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/example/lib/main.dart b/packages/interactive_media_ads/example/lib/main.dart index cc1b129202a..f8ce5e5ce50 100644 --- a/packages/interactive_media_ads/example/lib/main.dart +++ b/packages/interactive_media_ads/example/lib/main.dart @@ -4,6 +4,7 @@ import 'dart:async'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_driver/driver_extension.dart'; import 'package:interactive_media_ads/interactive_media_ads.dart'; @@ -22,7 +23,15 @@ const String _adTagUrl = 'https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator='; void main() { - runApp(const MaterialApp(home: AdExampleWidget())); + runApp( + MaterialApp( + // TODO(bparrishMines): Remove this check once the iOS implementation + // is added. + home: defaultTargetPlatform == TargetPlatform.android + ? const AdExampleWidget() + : Container(), + ), + ); } /// Example widget displaying an Ad during a video. From 463bfe4aff302e95e79b29c174dadc848b5ffba5 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Mon, 24 Jun 2024 22:00:32 -0400 Subject: [PATCH 76/76] small nits --- .../packages/interactive_media_ads/AdsRequestProxyApi.kt | 2 +- packages/interactive_media_ads/test/version_test.dart | 2 +- 2 files changed, 2 insertions(+), 2 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 fe9a12d6f48..9222ea80d40 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 @@ -17,7 +17,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : PigeonApiAdsRequest(pigeonRegistrar) { companion object { /** - * The current version of the `interactive_media_ads`. + * The current version of the `interactive_media_ads` plugin. * * This must match the version in pubspec.yaml. */ diff --git a/packages/interactive_media_ads/test/version_test.dart b/packages/interactive_media_ads/test/version_test.dart index 38ccb9a2406..0bd444e995b 100644 --- a/packages/interactive_media_ads/test/version_test.dart +++ b/packages/interactive_media_ads/test/version_test.dart @@ -7,7 +7,7 @@ import 'dart:io'; import 'package:flutter_test/flutter_test.dart'; void main() { - test('AdsRequestProxyApi.pluginVersion matches pubspec ersion', () { + test('AdsRequestProxyApi.pluginVersion matches pubspec version', () { final String pubspecPath = '${Directory.current.path}/pubspec.yaml'; final String pubspec = File(pubspecPath).readAsStringSync(); final RegExp regex = RegExp(r'version:\s*(.*?) #');