Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/interactive_media_ads/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.2.2+11

* Adds internal wrapper for Android native `UniversalAdId`.

## 0.2.2+10

* Fixes bug where Android would show the last frame of the previous Ad before playing the current
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
*
* This must match the version in pubspec.yaml.
*/
const val pluginVersion = "0.2.2+10"
const val pluginVersion = "0.2.2+11"
}

override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,12 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar(
*/
abstract fun getPigeonApiCompanionAd(): PigeonApiCompanionAd

/**
* An implementation of [PigeonApiUniversalAdId] used to add a new Dart instance of
* `UniversalAdId` to the Dart `InstanceManager`.
*/
abstract fun getPigeonApiUniversalAdId(): PigeonApiUniversalAdId

fun setUp() {
InteractiveMediaAdsLibraryPigeonInstanceManagerApi.setUpMessageHandlers(
binaryMessenger, instanceManager)
Expand Down Expand Up @@ -697,6 +703,8 @@ private class InteractiveMediaAdsLibraryPigeonProxyApiBaseCodec(
registrar.getPigeonApiAdProgressInfo().pigeon_newInstance(value) {}
} else if (value is com.google.ads.interactivemedia.v3.api.CompanionAd) {
registrar.getPigeonApiCompanionAd().pigeon_newInstance(value) {}
} else if (value is com.google.ads.interactivemedia.v3.api.UniversalAdId) {
registrar.getPigeonApiUniversalAdId().pigeon_newInstance(value) {}
}

when {
Expand Down Expand Up @@ -4832,3 +4840,68 @@ abstract class PigeonApiCompanionAd(
}
}
}
/**
* This object exposes information about the universal ad ID.
*
* See
* https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/UniversalAdId.html.
*/
@Suppress("UNCHECKED_CAST")
abstract class PigeonApiUniversalAdId(
open val pigeonRegistrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar
) {
/**
* Returns the ad ID registry associated with the ad ID value.
*
* Returns "unknown" if the registry is not known.
*/
abstract fun adIdRegistry(
pigeon_instance: com.google.ads.interactivemedia.v3.api.UniversalAdId
): String

/**
* Returns the universal ad ID value.
*
* Returns "unknown" if the value is not known.
*/
abstract fun adIdValue(
pigeon_instance: com.google.ads.interactivemedia.v3.api.UniversalAdId
): String

@Suppress("LocalVariableName", "FunctionName")
/** Creates a Dart instance of UniversalAdId and attaches it to [pigeon_instanceArg]. */
fun pigeon_newInstance(
pigeon_instanceArg: com.google.ads.interactivemedia.v3.api.UniversalAdId,
callback: (Result<Unit>) -> 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 adIdRegistryArg = adIdRegistry(pigeon_instanceArg)
val adIdValueArg = adIdValue(pigeon_instanceArg)
val binaryMessenger = pigeonRegistrar.binaryMessenger
val codec = pigeonRegistrar.codec
val channelName = "dev.flutter.pigeon.interactive_media_ads.UniversalAdId.pigeon_newInstance"
val channel = BasicMessageChannel<Any?>(binaryMessenger, channelName, codec)
channel.send(listOf(pigeon_identifierArg, adIdRegistryArg, adIdValueArg)) {
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)))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,4 +137,8 @@ open class ProxyApiRegistrar(binaryMessenger: BinaryMessenger, var context: Cont
override fun getPigeonApiCompanionAd(): PigeonApiCompanionAd {
return CompanionAdProxyApi(this)
}

override fun getPigeonApiUniversalAdId(): PigeonApiUniversalAdId {
return UniversalAdIdProxyApi(this)
}
}
Original file line number Diff line number Diff line change
@@ -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.UniversalAdId

/**
* ProxyApi implementation for [UniversalAdId].
*
* <p>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 UniversalAdIdProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
PigeonApiUniversalAdId(pigeonRegistrar) {
override fun adIdRegistry(pigeon_instance: UniversalAdId): String {
return pigeon_instance.adIdRegistry
}

override fun adIdValue(pigeon_instance: UniversalAdId): String {
return pigeon_instance.adIdValue
}
}
Original file line number Diff line number Diff line change
@@ -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.UniversalAdId
import kotlin.test.Test
import kotlin.test.assertEquals
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever

class UniversalAdIdProxyApiTest {
@Test
fun adIdRegistry() {
val api = TestProxyApiRegistrar().getPigeonApiUniversalAdId()

val instance = mock<UniversalAdId>()
val value = "myString"
whenever(instance.adIdRegistry).thenReturn(value)

assertEquals(value, api.adIdRegistry(instance))
}

@Test
fun adIdValue() {
val api = TestProxyApiRegistrar().getPigeonApiUniversalAdId()

val instance = mock<UniversalAdId>()
val value = "myString"
whenever(instance.adIdValue).thenReturn(value)

assertEquals(value, api.adIdValue(instance))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest {
/// The current version of the `interactive_media_ads` plugin.
///
/// This must match the version in pubspec.yaml.
static let pluginVersion = "0.2.2+10"
static let pluginVersion = "0.2.2+11"

func pigeonDefaultConstructor(
pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@ class PigeonInstanceManager {
pigeon_instanceManager: instanceManager);
CompanionAd.pigeon_setUpMessageHandlers(
pigeon_instanceManager: instanceManager);
UniversalAdId.pigeon_setUpMessageHandlers(
pigeon_instanceManager: instanceManager);
return instanceManager;
}

Expand Down Expand Up @@ -5780,3 +5782,100 @@ class CompanionAd extends PigeonInternalProxyApiBaseClass {
);
}
}

/// This object exposes information about the universal ad ID.
///
/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/UniversalAdId.html.
class UniversalAdId extends PigeonInternalProxyApiBaseClass {
/// Constructs [UniversalAdId] 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
UniversalAdId.pigeon_detached({
super.pigeon_binaryMessenger,
super.pigeon_instanceManager,
required this.adIdRegistry,
required this.adIdValue,
});

/// Returns the ad ID registry associated with the ad ID value.
///
/// Returns "unknown" if the registry is not known.
final String adIdRegistry;

/// Returns the universal ad ID value.
///
/// Returns "unknown" if the value is not known.
final String adIdValue;

static void pigeon_setUpMessageHandlers({
bool pigeon_clearHandlers = false,
BinaryMessenger? pigeon_binaryMessenger,
PigeonInstanceManager? pigeon_instanceManager,
UniversalAdId Function(
String adIdRegistry,
String adIdValue,
)? 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.UniversalAdId.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.UniversalAdId.pigeon_newInstance was null.');
final List<Object?> args = (message as List<Object?>?)!;
final int? arg_pigeon_instanceIdentifier = (args[0] as int?);
assert(arg_pigeon_instanceIdentifier != null,
'Argument for dev.flutter.pigeon.interactive_media_ads.UniversalAdId.pigeon_newInstance was null, expected non-null int.');
final String? arg_adIdRegistry = (args[1] as String?);
assert(arg_adIdRegistry != null,
'Argument for dev.flutter.pigeon.interactive_media_ads.UniversalAdId.pigeon_newInstance was null, expected non-null String.');
final String? arg_adIdValue = (args[2] as String?);
assert(arg_adIdValue != null,
'Argument for dev.flutter.pigeon.interactive_media_ads.UniversalAdId.pigeon_newInstance was null, expected non-null String.');
try {
(pigeon_instanceManager ?? PigeonInstanceManager.instance)
.addHostCreatedInstance(
pigeon_newInstance?.call(arg_adIdRegistry!, arg_adIdValue!) ??
UniversalAdId.pigeon_detached(
pigeon_binaryMessenger: pigeon_binaryMessenger,
pigeon_instanceManager: pigeon_instanceManager,
adIdRegistry: arg_adIdRegistry!,
adIdValue: arg_adIdValue!,
),
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
UniversalAdId pigeon_copy() {
return UniversalAdId.pigeon_detached(
pigeon_binaryMessenger: pigeon_binaryMessenger,
pigeon_instanceManager: pigeon_instanceManager,
adIdRegistry: adIdRegistry,
adIdValue: adIdValue,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -894,3 +894,23 @@ abstract class CompanionAd {
/// 0 if unavailable.
late final int width;
}

/// This object exposes information about the universal ad ID.
///
/// See https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/UniversalAdId.html.
@ProxyApi(
kotlinOptions: KotlinProxyApiOptions(
fullClassName: 'com.google.ads.interactivemedia.v3.api.UniversalAdId',
),
)
abstract class UniversalAdId {
/// Returns the ad ID registry associated with the ad ID value.
///
/// Returns "unknown" if the registry is not known.
late final String adIdRegistry;

/// Returns the universal ad ID value.
///
/// Returns "unknown" if the value is not known.
late final String adIdValue;
}
2 changes: 1 addition & 1 deletion packages/interactive_media_ads/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: interactive_media_ads
description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS.
repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22
version: 0.2.2+10 # This must match the version in
version: 0.2.2+11 # 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`

Expand Down