From a647a2ce73122eee6bf5b77914e71e835b3097c5 Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:48:04 -0500 Subject: [PATCH 1/4] impl of adslot --- packages/interactive_media_ads/CHANGELOG.md | 4 + .../AdsRequestProxyApi.kt | 2 +- .../InteractiveMediaAdsLibrary.g.kt | 424 +++++++++++++++- .../ProxyApiRegistrar.kt | 8 + .../AdsRequestProxyAPIDelegate.swift | 2 +- .../src/android/interactive_media_ads.g.dart | 464 +++++++++++++++++- .../interactive_media_ads_android.dart | 54 ++ packages/interactive_media_ads/pubspec.yaml | 4 +- 8 files changed, 955 insertions(+), 7 deletions(-) diff --git a/packages/interactive_media_ads/CHANGELOG.md b/packages/interactive_media_ads/CHANGELOG.md index 02d26a048a1..c188eda3cd8 100644 --- a/packages/interactive_media_ads/CHANGELOG.md +++ b/packages/interactive_media_ads/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.3+3 + +* Adds internal wrapper for Android native `CompanionAdSlot` and `CompanionAdSlot.ClickListener`. + ## 0.2.3+2 * Bumps `com.google.ads.interactivemedia.v3:interactivemedia` from 3.35.1 to 3.36.0. 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 c067b5d40e2..b4a7fa16559 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : * * This must match the version in pubspec.yaml. */ - const val pluginVersion = "0.2.3+2" + const val pluginVersion = "0.2.3+3" } override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) { diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt index fc3198cd86c..b4382ad5d8e 100644 --- a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.0), do not edit directly. +// Autogenerated from Pigeon (v22.6.1), do not edit directly. // See also: https://pub.dev/packages/pigeon -@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass", "SyntheticAccessor") +@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") package dev.flutter.packages.interactive_media_ads @@ -567,6 +567,18 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( */ abstract fun getPigeonApiAd(): PigeonApiAd + /** + * An implementation of [PigeonApiCompanionAdSlotClickListener] used to add a new Dart instance of + * `CompanionAdSlotClickListener` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiCompanionAdSlotClickListener(): PigeonApiCompanionAdSlotClickListener + + /** + * An implementation of [PigeonApiCompanionAdSlot] used to add a new Dart instance of + * `CompanionAdSlot` to the Dart `InstanceManager`. + */ + abstract fun getPigeonApiCompanionAdSlot(): PigeonApiCompanionAdSlot + fun setUp() { InteractiveMediaAdsLibraryPigeonInstanceManagerApi.setUpMessageHandlers( binaryMessenger, instanceManager) @@ -592,6 +604,9 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, getPigeonApiAdEventListener()) PigeonApiAdsRenderingSettings.setUpMessageHandlers( binaryMessenger, getPigeonApiAdsRenderingSettings()) + PigeonApiCompanionAdSlotClickListener.setUpMessageHandlers( + binaryMessenger, getPigeonApiCompanionAdSlotClickListener()) + PigeonApiCompanionAdSlot.setUpMessageHandlers(binaryMessenger, getPigeonApiCompanionAdSlot()) } fun tearDown() { @@ -613,6 +628,8 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar( PigeonApiAdErrorListener.setUpMessageHandlers(binaryMessenger, null) PigeonApiAdEventListener.setUpMessageHandlers(binaryMessenger, null) PigeonApiAdsRenderingSettings.setUpMessageHandlers(binaryMessenger, null) + PigeonApiCompanionAdSlotClickListener.setUpMessageHandlers(binaryMessenger, null) + PigeonApiCompanionAdSlot.setUpMessageHandlers(binaryMessenger, null) } } @@ -713,6 +730,10 @@ private class InteractiveMediaAdsLibraryPigeonProxyApiBaseCodec( registrar.getPigeonApiUniversalAdId().pigeon_newInstance(value) {} } else if (value is com.google.ads.interactivemedia.v3.api.Ad) { registrar.getPigeonApiAd().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener) { + registrar.getPigeonApiCompanionAdSlotClickListener().pigeon_newInstance(value) {} + } else if (value is com.google.ads.interactivemedia.v3.api.CompanionAdSlot) { + registrar.getPigeonApiCompanionAdSlot().pigeon_newInstance(value) {} } when { @@ -5296,3 +5317,402 @@ abstract class PigeonApiAd( } } } +/** + * Listener interface for click events. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.ClickListener.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiCompanionAdSlotClickListener( + open val pigeonRegistrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar +) { + abstract fun pigeon_defaultConstructor(): + com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers( + binaryMessenger: BinaryMessenger, + api: PigeonApiCompanionAdSlotClickListener? + ) { + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlotClickListener.pigeon_defaultConstructor", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val pigeon_identifierArg = args[0] 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 { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** + * Creates a Dart instance of CompanionAdSlotClickListener and attaches it to + * [pigeon_instanceArg]. + */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.ignoreCallsToDart) { + callback( + Result.failure( + FlutterError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) + return + } + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + throw IllegalStateException( + "Attempting to create a new Dart instance of CompanionAdSlotClickListener, but the class has a nonnull callback method.") + } + + /** Respond to a click on this companion ad slot. */ + fun onCompanionAdClick( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.ignoreCallsToDart) { + callback( + Result.failure( + FlutterError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) + return + } + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlotClickListener.onCompanionAdClick" + 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))) + } + } + } +} +/** + * A companion ad slot for which the SDK should retrieve ads. + * + * See + * https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.html. + */ +@Suppress("UNCHECKED_CAST") +abstract class PigeonApiCompanionAdSlot( + open val pigeonRegistrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar +) { + /** Registers a listener for companion clicks. */ + abstract fun addClickListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot, + clickListener: com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener + ) + + /** Returns the ViewGroup into which the companion will be rendered. */ + abstract fun getContainer( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot + ): android.view.ViewGroup + + /** Returns the height of the companion slot. */ + abstract fun getHeight( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot + ): Long + + /** Returns the width of the companion slot. */ + abstract fun getWidth( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot + ): Long + + /** Returns true if the companion slot is filled, false otherwise. */ + abstract fun isFilled( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot + ): Boolean + + /** Removes a listener for companion clicks. */ + abstract fun removeClickListener( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot, + clickListener: com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener + ) + + /** + * Sets the ViewGroup into which the companion will be rendered. + * + * Required. + */ + abstract fun setContainer( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot, + container: android.view.ViewGroup + ) + + /** + * Sets the size of the slot. + * + * Only companions matching the slot size will be displayed in the slot. + */ + abstract fun setSize( + pigeon_instance: com.google.ads.interactivemedia.v3.api.CompanionAdSlot, + width: Long, + height: Long + ) + + companion object { + @Suppress("LocalVariableName") + fun setUpMessageHandlers(binaryMessenger: BinaryMessenger, api: PigeonApiCompanionAdSlot?) { + val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec() + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.addClickListener", + 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.CompanionAdSlot + val clickListenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener + val wrapped: List = + try { + api.addClickListener(pigeon_instanceArg, clickListenerArg) + 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.CompanionAdSlot.getContainer", + 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.CompanionAdSlot + val wrapped: List = + try { + listOf(api.getContainer(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.getHeight", + 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.CompanionAdSlot + val wrapped: List = + try { + listOf(api.getHeight(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.getWidth", + 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.CompanionAdSlot + val wrapped: List = + try { + listOf(api.getWidth(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.isFilled", + 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.CompanionAdSlot + val wrapped: List = + try { + listOf(api.isFilled(pigeon_instanceArg)) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.removeClickListener", + 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.CompanionAdSlot + val clickListenerArg = + args[1] as com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener + val wrapped: List = + try { + api.removeClickListener(pigeon_instanceArg, clickListenerArg) + 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.CompanionAdSlot.setContainer", + 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.CompanionAdSlot + val containerArg = args[1] as android.view.ViewGroup + val wrapped: List = + try { + api.setContainer(pigeon_instanceArg, containerArg) + 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.CompanionAdSlot.setSize", + 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.CompanionAdSlot + val widthArg = args[1] as Long + val heightArg = args[2] as Long + val wrapped: List = + try { + api.setSize(pigeon_instanceArg, widthArg, heightArg) + listOf(null) + } catch (exception: Throwable) { + wrapError(exception) + } + reply.reply(wrapped) + } + } else { + channel.setMessageHandler(null) + } + } + } + } + + @Suppress("LocalVariableName", "FunctionName") + /** Creates a Dart instance of CompanionAdSlot and attaches it to [pigeon_instanceArg]. */ + fun pigeon_newInstance( + pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.CompanionAdSlot, + callback: (Result) -> Unit + ) { + if (pigeonRegistrar.ignoreCallsToDart) { + callback( + Result.failure( + FlutterError("ignore-calls-error", "Calls to Dart are being ignored.", ""))) + return + } + if (pigeonRegistrar.instanceManager.containsInstance(pigeon_instanceArg)) { + Result.success(Unit) + return + } + val pigeon_identifierArg = + pigeonRegistrar.instanceManager.addHostCreatedInstance(pigeon_instanceArg) + val binaryMessenger = pigeonRegistrar.binaryMessenger + val codec = pigeonRegistrar.codec + val channelName = "dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.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/ProxyApiRegistrar.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ProxyApiRegistrar.kt index d1cfda322be..c34c6242b9f 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 @@ -145,4 +145,12 @@ open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Cont override fun getPigeonApiAd(): PigeonApiAd { return AdProxyApi(this) } + + override fun getPigeonApiCompanionAdSlotClickListener(): PigeonApiCompanionAdSlotClickListener { + return CompanionAdSlotClickListenerProxyApi(this) + } + + override fun getPigeonApiCompanionAdSlot(): PigeonApiCompanionAdSlot { + return CompanionAdSlotProxyApi(this) + } } diff --git a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift index acbf879e2f8..7b00f9c7f95 100644 --- a/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift +++ b/packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest { /// The current version of the `interactive_media_ads` plugin. /// /// This must match the version in pubspec.yaml. - static let pluginVersion = "0.2.3+2" + static let pluginVersion = "0.2.3+3" func pigeonDefaultConstructor( pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer, diff --git a/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart b/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart index b519ac04475..9291453b86a 100644 --- a/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart +++ b/packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v22.6.0), do not edit directly. +// Autogenerated from Pigeon (v22.6.1), 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 @@ -198,6 +198,10 @@ class PigeonInstanceManager { UniversalAdId.pigeon_setUpMessageHandlers( pigeon_instanceManager: instanceManager); Ad.pigeon_setUpMessageHandlers(pigeon_instanceManager: instanceManager); + CompanionAdSlotClickListener.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); + CompanionAdSlot.pigeon_setUpMessageHandlers( + pigeon_instanceManager: instanceManager); return instanceManager; } @@ -6427,3 +6431,461 @@ class Ad extends PigeonInternalProxyApiBaseClass { ); } } + +/// Listener interface for click events. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.ClickListener.html. +class CompanionAdSlotClickListener extends PigeonInternalProxyApiBaseClass { + CompanionAdSlotClickListener({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onCompanionAdClick, + }) { + final int pigeonVar_instanceIdentifier = + pigeon_instanceManager.addDartCreatedInstance(this); + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlotClickListener; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + () async { + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlotClickListener.pigeon_defaultConstructor'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([pigeonVar_instanceIdentifier]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + }(); + } + + /// Constructs [CompanionAdSlotClickListener] 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 + CompanionAdSlotClickListener.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + required this.onCompanionAdClick, + }); + + late final _PigeonInternalProxyApiBaseCodec + _pigeonVar_codecCompanionAdSlotClickListener = + _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); + + /// Respond to a click on this companion ad slot. + /// + /// 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 CompanionAdSlotClickListener instance = CompanionAdSlotClickListener( + /// onCompanionAdClick: (CompanionAdSlotClickListener pigeon_instance, ...) { + /// print(weakMyVariable?.target); + /// }, + /// ); + /// ``` + /// + /// Alternatively, [PigeonInstanceManager.removeWeakReference] can be used to + /// release the associated Native object manually. + final void Function(CompanionAdSlotClickListener pigeon_instance) + onCompanionAdClick; + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + void Function(CompanionAdSlotClickListener pigeon_instance)? + onCompanionAdClick, + }) { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlotClickListener.onCompanionAdClick', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + pigeonVar_channel.setMessageHandler(null); + } else { + pigeonVar_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.CompanionAdSlotClickListener.onCompanionAdClick was null.'); + final List args = (message as List?)!; + final CompanionAdSlotClickListener? arg_pigeon_instance = + (args[0] as CompanionAdSlotClickListener?); + assert(arg_pigeon_instance != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.CompanionAdSlotClickListener.onCompanionAdClick was null, expected non-null CompanionAdSlotClickListener.'); + try { + (onCompanionAdClick ?? arg_pigeon_instance!.onCompanionAdClick) + .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())); + } + }); + } + } + } + + @override + CompanionAdSlotClickListener pigeon_copy() { + return CompanionAdSlotClickListener.pigeon_detached( + pigeon_binaryMessenger: pigeon_binaryMessenger, + pigeon_instanceManager: pigeon_instanceManager, + onCompanionAdClick: onCompanionAdClick, + ); + } +} + +/// A companion ad slot for which the SDK should retrieve ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.html. +class CompanionAdSlot extends PigeonInternalProxyApiBaseClass { + /// Constructs [CompanionAdSlot] 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 + CompanionAdSlot.pigeon_detached({ + super.pigeon_binaryMessenger, + super.pigeon_instanceManager, + }); + + late final _PigeonInternalProxyApiBaseCodec _pigeonVar_codecCompanionAdSlot = + _PigeonInternalProxyApiBaseCodec(pigeon_instanceManager); + + static void pigeon_setUpMessageHandlers({ + bool pigeon_clearHandlers = false, + BinaryMessenger? pigeon_binaryMessenger, + PigeonInstanceManager? pigeon_instanceManager, + CompanionAdSlot Function()? pigeon_newInstance, + }) { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _PigeonInternalProxyApiBaseCodec( + pigeon_instanceManager ?? PigeonInstanceManager.instance); + final BinaryMessenger? binaryMessenger = pigeon_binaryMessenger; + { + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.pigeon_newInstance', + pigeonChannelCodec, + binaryMessenger: binaryMessenger); + if (pigeon_clearHandlers) { + pigeonVar_channel.setMessageHandler(null); + } else { + pigeonVar_channel.setMessageHandler((Object? message) async { + assert(message != null, + 'Argument for dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.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.CompanionAdSlot.pigeon_newInstance was null, expected non-null int.'); + try { + (pigeon_instanceManager ?? PigeonInstanceManager.instance) + .addHostCreatedInstance( + pigeon_newInstance?.call() ?? + CompanionAdSlot.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 companion clicks. + Future addClickListener( + CompanionAdSlotClickListener clickListener) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.addClickListener'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, clickListener]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Returns the ViewGroup into which the companion will be rendered. + Future getContainer() async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.getContainer'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as ViewGroup?)!; + } + } + + /// Returns the height of the companion slot. + Future getHeight() async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.getHeight'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as int?)!; + } + } + + /// Returns the width of the companion slot. + Future getWidth() async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.getWidth'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as int?)!; + } + } + + /// Returns true if the companion slot is filled, false otherwise. + Future isFilled() async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.isFilled'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([this]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as bool?)!; + } + } + + /// Removes a listener for companion clicks. + Future removeClickListener( + CompanionAdSlotClickListener clickListener) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.removeClickListener'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, clickListener]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the ViewGroup into which the companion will be rendered. + /// + /// Required. + Future setContainer(ViewGroup container) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.setContainer'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, container]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + /// Sets the size of the slot. + /// + /// Only companions matching the slot size will be displayed in the slot. + Future setSize( + int width, + int height, + ) async { + final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec = + _pigeonVar_codecCompanionAdSlot; + final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger; + const String pigeonVar_channelName = + 'dev.flutter.pigeon.interactive_media_ads.CompanionAdSlot.setSize'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([this, width, height]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else { + return; + } + } + + @override + CompanionAdSlot pigeon_copy() { + return CompanionAdSlot.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 61d5a0f05e5..46db8d3e2d2 100644 --- a/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart +++ b/packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart @@ -1030,3 +1030,57 @@ abstract class Ad { /// Indicates whether the ad can be skipped by the user. late final bool isSkippable; } + +/// Listener interface for click events. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.ClickListener.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: + 'com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener', + ), +) +abstract class CompanionAdSlotClickListener { + CompanionAdSlotClickListener(); + + /// Respond to a click on this companion ad slot. + late final void Function() onCompanionAdClick; +} + +/// A companion ad slot for which the SDK should retrieve ads. +/// +/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/CompanionAdSlot.html. +@ProxyApi( + kotlinOptions: KotlinProxyApiOptions( + fullClassName: 'com.google.ads.interactivemedia.v3.api.CompanionAdSlot', + ), +) +abstract class CompanionAdSlot { + /// Registers a listener for companion clicks. + void addClickListener(CompanionAdSlotClickListener clickListener); + + /// Returns the ViewGroup into which the companion will be rendered. + ViewGroup getContainer(); + + /// Returns the height of the companion slot. + int getHeight(); + + /// Returns the width of the companion slot. + int getWidth(); + + /// Returns true if the companion slot is filled, false otherwise. + bool isFilled(); + + /// Removes a listener for companion clicks. + void removeClickListener(CompanionAdSlotClickListener clickListener); + + /// Sets the ViewGroup into which the companion will be rendered. + /// + /// Required. + void setContainer(ViewGroup container); + + /// Sets the size of the slot. + /// + /// Only companions matching the slot size will be displayed in the slot. + void setSize(int width, int height); +} diff --git a/packages/interactive_media_ads/pubspec.yaml b/packages/interactive_media_ads/pubspec.yaml index 435f7f83fc5..4fa1d3743c2 100644 --- a/packages/interactive_media_ads/pubspec.yaml +++ b/packages/interactive_media_ads/pubspec.yaml @@ -2,7 +2,7 @@ name: interactive_media_ads description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS. repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22 -version: 0.2.3+2 # This must match the version in +version: 0.2.3+3 # This must match the version in # `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and # `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift` @@ -31,7 +31,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.4 - pigeon: ^22.6.0 + pigeon: ^22.6.1 topics: - ads From 7392fe879bdfb8e2e64ee85c4491c4d8c89f085e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:48:16 -0500 Subject: [PATCH 2/4] add new files --- .../CompanionAdSlotClickListenerProxyApi.kt | 26 +++++ .../CompanionAdSlotProxyApi.kt | 50 +++++++++ ...ompanionAdSlotClickListenerProxyApiTest.kt | 34 ++++++ .../CompanionAdSlotProxyApiTest.kt | 104 ++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApi.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApiTest.kt create mode 100644 packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApi.kt new file mode 100644 index 00000000000..ce92e8eaa2f --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApi.kt @@ -0,0 +1,26 @@ +// 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.CompanionAdSlot.ClickListener + +/** + * ProxyApi implementation for [ClickListener]. + * + *

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 CompanionAdSlotClickListenerProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiCompanionAdSlotClickListener(pigeonRegistrar) { + internal class ClickListenerImpl(val api: CompanionAdSlotClickListenerProxyApi) : ClickListener { + override fun onCompanionAdClick() { + api.pigeonRegistrar.runOnMainThread { api.onCompanionAdClick(this) {} } + } + } + + override fun pigeon_defaultConstructor(): ClickListener { + return ClickListenerImpl(this) + } +} diff --git a/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApi.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApi.kt new file mode 100644 index 00000000000..ec0bdafdbd2 --- /dev/null +++ b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApi.kt @@ -0,0 +1,50 @@ +// 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 +import com.google.ads.interactivemedia.v3.api.CompanionAdSlot +import com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener + +/** + * ProxyApi implementation for [CompanionAdSlot]. + * + *

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 CompanionAdSlotProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) : + PigeonApiCompanionAdSlot(pigeonRegistrar) { + override fun addClickListener(pigeon_instance: CompanionAdSlot, clickListener: ClickListener) { + return pigeon_instance.addClickListener(clickListener) + } + + override fun getContainer(pigeon_instance: CompanionAdSlot): ViewGroup { + return pigeon_instance.container + } + + override fun getHeight(pigeon_instance: CompanionAdSlot): Long { + return pigeon_instance.height.toLong() + } + + override fun getWidth(pigeon_instance: CompanionAdSlot): Long { + return pigeon_instance.width.toLong() + } + + override fun isFilled(pigeon_instance: CompanionAdSlot): Boolean { + return pigeon_instance.isFilled + } + + override fun removeClickListener(pigeon_instance: CompanionAdSlot, clickListener: ClickListener) { + pigeon_instance.removeClickListener(clickListener) + } + + override fun setContainer(pigeon_instance: CompanionAdSlot, container: ViewGroup) { + pigeon_instance.container = container + } + + override fun setSize(pigeon_instance: CompanionAdSlot, width: Long, height: Long) { + pigeon_instance.setSize(width.toInt(), height.toInt()) + } +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApiTest.kt new file mode 100644 index 00000000000..8f31f8585bb --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotClickListenerProxyApiTest.kt @@ -0,0 +1,34 @@ +// 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 +import kotlin.test.assertTrue +import org.mockito.kotlin.any +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class CompanionAdSlotClickListenerProxyApiTest { + @Test + fun pigeon_defaultConstructor() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlotClickListener() + + assertTrue( + api.pigeon_defaultConstructor() is CompanionAdSlotClickListenerProxyApi.ClickListenerImpl) + } + + @Test + fun onCompanionAdClick() { + val mockApi = mock() + whenever(mockApi.pigeonRegistrar).thenReturn(TestProxyApiRegistrar()) + + val instance = CompanionAdSlotClickListenerProxyApi.ClickListenerImpl(mockApi) + instance.onCompanionAdClick() + + verify(mockApi).onCompanionAdClick(eq(instance), any()) + } +} diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt new file mode 100644 index 00000000000..84a014fca97 --- /dev/null +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt @@ -0,0 +1,104 @@ +// 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 +import com.google.ads.interactivemedia.v3.api.CompanionAdSlot +import com.google.ads.interactivemedia.v3.api.CompanionAdSlot.ClickListener +import kotlin.test.Test +import kotlin.test.assertEquals +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class CompanionAdSlotProxyApiTest { + @Test + fun addClickListener() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val clickListener = mock() + api.addClickListener(instance, clickListener) + + verify(instance).addClickListener(clickListener) + } + + @Test + fun getContainer() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val value = mock() + whenever(instance.container).thenReturn(value) + + assertEquals(value, api.getContainer(instance)) + } + + @Test + fun getHeight() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val value = 0 + whenever(instance.height).thenReturn(value) + assertEquals(value.toLong(), api.getHeight(instance)) + } + + @Test + fun getWidth() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val value = 0 + whenever(instance.width).thenReturn(value) + + assertEquals(value.toLong(), api.getWidth(instance)) + } + + @Test + fun isFilled() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val value = true + whenever(instance.isFilled).thenReturn(value) + + assertEquals(value, api.isFilled(instance)) + } + + @Test + fun removeClickListener() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val clickListener = mock() + api.removeClickListener(instance, clickListener) + + verify(instance).removeClickListener(clickListener) + } + + @Test + fun setContainer() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val container = mock() + api.setContainer(instance, container) + + verify(instance).container = container + } + + @Test + fun setSize() { + val api = TestProxyApiRegistrar().getPigeonApiCompanionAdSlot() + + val instance = mock() + val width = 0L + val height = 0L + api.setSize(instance, width, height) + + verify(instance).setSize(width.toInt(), height.toInt()) + } +} From 8b7c55726ec6a12bd4ced15604d523bce948206e Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Wed, 20 Nov 2024 12:06:12 -0500 Subject: [PATCH 3/4] synthetic accessor --- .../interactive_media_ads/InteractiveMediaAdsLibrary.g.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/InteractiveMediaAdsLibrary.g.kt b/packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt index b4382ad5d8e..16e53f4c996 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 (v22.6.1), 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 From 98ceb3b0465fbfad3bdf1df1471d609a2f0ee9bc Mon Sep 17 00:00:00 2001 From: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com> Date: Fri, 22 Nov 2024 15:49:48 -0500 Subject: [PATCH 4/4] use a different value --- .../interactive_media_ads/CompanionAdSlotProxyApiTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt index 84a014fca97..9e85e402c14 100644 --- a/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt +++ b/packages/interactive_media_ads/android/src/test/kotlin/dev/flutter/packages/interactive_media_ads/CompanionAdSlotProxyApiTest.kt @@ -96,7 +96,7 @@ class CompanionAdSlotProxyApiTest { val instance = mock() val width = 0L - val height = 0L + val height = 1L api.setSize(instance, width, height) verify(instance).setSize(width.toInt(), height.toInt())