Skip to content

Commit 4c18648

Browse files
Adds internal wrapper for Android native ContentProgressProvider (flutter#7461)
1 parent bb53e5d commit 4c18648

File tree

9 files changed

+227
-13
lines changed

9 files changed

+227
-13
lines changed

packages/interactive_media_ads/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.2.1
2+
3+
* Adds internal wrapper for Android native `ContentProgressProvider`.
4+
15
## 0.2.0
26

37
* Adds support for pausing and resuming Ad playback. See `AdsManager.pause` and `AdsManager.resume`.

packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class AdsRequestProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
2121
*
2222
* This must match the version in pubspec.yaml.
2323
*/
24-
const val pluginVersion = "0.2.0"
24+
const val pluginVersion = "0.2.1"
2525
}
2626

2727
override fun setAdTagUrl(pigeon_instance: AdsRequest, adTagUrl: String) {

packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/ContentProgressProviderProxyApi.kt

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,34 @@
44

55
package dev.flutter.packages.interactive_media_ads
66

7+
import com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider
8+
import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate
9+
710
/**
8-
* ProxyApi implementation for
9-
* [com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider].
11+
* ProxyApi implementation for [ContentProgressProvider].
1012
*
1113
* <p>This class may handle instantiating native object instances that are attached to a Dart
1214
* instance or handle method calls on the associated native class or an instance of that class.
1315
*/
1416
class ContentProgressProviderProxyApi(override val pigeonRegistrar: ProxyApiRegistrar) :
15-
PigeonApiContentProgressProvider(pigeonRegistrar)
17+
PigeonApiContentProgressProvider(pigeonRegistrar) {
18+
internal class ContentProgressProviderImpl(val api: ContentProgressProviderProxyApi) :
19+
ContentProgressProvider {
20+
var currentProgress = VideoProgressUpdate.VIDEO_TIME_NOT_READY
21+
22+
override fun getContentProgress(): VideoProgressUpdate {
23+
return currentProgress
24+
}
25+
}
26+
27+
override fun pigeon_defaultConstructor(): ContentProgressProvider {
28+
return ContentProgressProviderImpl(this)
29+
}
30+
31+
override fun setContentProgress(
32+
pigeon_instance: ContentProgressProvider,
33+
update: VideoProgressUpdate
34+
) {
35+
(pigeon_instance as ContentProgressProviderImpl).currentProgress = update
36+
}
37+
}

packages/interactive_media_ads/android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/InteractiveMediaAdsLibrary.g.kt

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2013 The Flutter Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
// Autogenerated from Pigeon (v22.2.0), do not edit directly.
4+
// Autogenerated from Pigeon (v22.3.0), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass", "SyntheticAccessor")
77

@@ -423,9 +423,7 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar(
423423
* An implementation of [PigeonApiContentProgressProvider] used to add a new Dart instance of
424424
* `ContentProgressProvider` to the Dart `InstanceManager`.
425425
*/
426-
open fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider {
427-
return PigeonApiContentProgressProvider(this)
428-
}
426+
abstract fun getPigeonApiContentProgressProvider(): PigeonApiContentProgressProvider
429427

430428
/**
431429
* An implementation of [PigeonApiAdsManager] used to add a new Dart instance of `AdsManager` to
@@ -544,6 +542,8 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar(
544542
binaryMessenger, instanceManager)
545543
PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsLoader())
546544
PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsRequest())
545+
PigeonApiContentProgressProvider.setUpMessageHandlers(
546+
binaryMessenger, getPigeonApiContentProgressProvider())
547547
PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, getPigeonApiAdsManager())
548548
PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, getPigeonApiBaseManager())
549549
PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, getPigeonApiImaSdkFactory())
@@ -566,6 +566,7 @@ abstract class InteractiveMediaAdsLibraryPigeonProxyApiRegistrar(
566566
InteractiveMediaAdsLibraryPigeonInstanceManagerApi.setUpMessageHandlers(binaryMessenger, null)
567567
PigeonApiAdsLoader.setUpMessageHandlers(binaryMessenger, null)
568568
PigeonApiAdsRequest.setUpMessageHandlers(binaryMessenger, null)
569+
PigeonApiContentProgressProvider.setUpMessageHandlers(binaryMessenger, null)
569570
PigeonApiAdsManager.setUpMessageHandlers(binaryMessenger, null)
570571
PigeonApiBaseManager.setUpMessageHandlers(binaryMessenger, null)
571572
PigeonApiImaSdkFactory.setUpMessageHandlers(binaryMessenger, null)
@@ -1429,9 +1430,83 @@ abstract class PigeonApiAdsRequest(
14291430
* https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html.
14301431
*/
14311432
@Suppress("UNCHECKED_CAST")
1432-
open class PigeonApiContentProgressProvider(
1433+
abstract class PigeonApiContentProgressProvider(
14331434
open val pigeonRegistrar: InteractiveMediaAdsLibraryPigeonProxyApiRegistrar
14341435
) {
1436+
abstract fun pigeon_defaultConstructor():
1437+
com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider
1438+
1439+
/**
1440+
* Sets an update on the progress of the video.
1441+
*
1442+
* This is a custom method added to the native class because the native method
1443+
* `getContentProgress` requires a synchronous return value.
1444+
*/
1445+
abstract fun setContentProgress(
1446+
pigeon_instance: com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider,
1447+
update: com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate
1448+
)
1449+
1450+
companion object {
1451+
@Suppress("LocalVariableName")
1452+
fun setUpMessageHandlers(
1453+
binaryMessenger: BinaryMessenger,
1454+
api: PigeonApiContentProgressProvider?
1455+
) {
1456+
val codec = api?.pigeonRegistrar?.codec ?: InteractiveMediaAdsLibraryPigeonCodec()
1457+
run {
1458+
val channel =
1459+
BasicMessageChannel<Any?>(
1460+
binaryMessenger,
1461+
"dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_defaultConstructor",
1462+
codec)
1463+
if (api != null) {
1464+
channel.setMessageHandler { message, reply ->
1465+
val args = message as List<Any?>
1466+
val pigeon_identifierArg = args[0] as Long
1467+
val wrapped: List<Any?> =
1468+
try {
1469+
api.pigeonRegistrar.instanceManager.addDartCreatedInstance(
1470+
api.pigeon_defaultConstructor(), pigeon_identifierArg)
1471+
listOf(null)
1472+
} catch (exception: Throwable) {
1473+
wrapError(exception)
1474+
}
1475+
reply.reply(wrapped)
1476+
}
1477+
} else {
1478+
channel.setMessageHandler(null)
1479+
}
1480+
}
1481+
run {
1482+
val channel =
1483+
BasicMessageChannel<Any?>(
1484+
binaryMessenger,
1485+
"dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.setContentProgress",
1486+
codec)
1487+
if (api != null) {
1488+
channel.setMessageHandler { message, reply ->
1489+
val args = message as List<Any?>
1490+
val pigeon_instanceArg =
1491+
args[0] as com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider
1492+
val updateArg =
1493+
args[1] as com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate
1494+
val wrapped: List<Any?> =
1495+
try {
1496+
api.setContentProgress(pigeon_instanceArg, updateArg)
1497+
listOf(null)
1498+
} catch (exception: Throwable) {
1499+
wrapError(exception)
1500+
}
1501+
reply.reply(wrapped)
1502+
}
1503+
} else {
1504+
channel.setMessageHandler(null)
1505+
}
1506+
}
1507+
}
1508+
}
1509+
14351510
@Suppress("LocalVariableName", "FunctionName")
14361511
/** Creates a Dart instance of ContentProgressProvider and attaches it to [pigeon_instanceArg]. */
14371512
fun pigeon_newInstance(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
package dev.flutter.packages.interactive_media_ads
6+
7+
import com.google.ads.interactivemedia.v3.api.player.VideoProgressUpdate
8+
import kotlin.test.Test
9+
import kotlin.test.assertEquals
10+
import kotlin.test.assertTrue
11+
import org.mockito.kotlin.mock
12+
13+
class ContentProgressProviderProxyApiTest {
14+
@Test
15+
fun pigeon_defaultConstructor() {
16+
val api = TestProxyApiRegistrar().getPigeonApiContentProgressProvider()
17+
18+
assertTrue(
19+
api.pigeon_defaultConstructor()
20+
is ContentProgressProviderProxyApi.ContentProgressProviderImpl)
21+
}
22+
23+
@Test
24+
fun setContentProgress() {
25+
val api = TestProxyApiRegistrar().getPigeonApiContentProgressProvider()
26+
27+
val instance =
28+
ContentProgressProviderProxyApi.ContentProgressProviderImpl(
29+
api as ContentProgressProviderProxyApi)
30+
val mockProgressUpdate = mock<VideoProgressUpdate>()
31+
api.setContentProgress(instance, mockProgressUpdate)
32+
33+
assertEquals(mockProgressUpdate, instance.currentProgress)
34+
assertEquals(mockProgressUpdate, instance.contentProgress)
35+
}
36+
}

packages/interactive_media_ads/ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class AdsRequestProxyAPIDelegate: PigeonApiDelegateIMAAdsRequest {
1313
/// The current version of the `interactive_media_ads` plugin.
1414
///
1515
/// This must match the version in pubspec.yaml.
16-
static let pluginVersion = "0.2.0"
16+
static let pluginVersion = "0.2.1"
1717

1818
func pigeonDefaultConstructor(
1919
pigeonApi: PigeonApiIMAAdsRequest, adTagUrl: String, adDisplayContainer: IMAAdDisplayContainer,

packages/interactive_media_ads/lib/src/android/interactive_media_ads.g.dart

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2013 The Flutter Authors. All rights reserved.
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
4-
// Autogenerated from Pigeon (v22.2.0), do not edit directly.
4+
// Autogenerated from Pigeon (v22.3.0), do not edit directly.
55
// See also: https://pub.dev/packages/pigeon
66
// 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
77

@@ -1397,6 +1397,40 @@ class AdsRequest extends PigeonInternalProxyApiBaseClass {
13971397
///
13981398
/// See https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/player/ContentProgressProvider.html.
13991399
class ContentProgressProvider extends PigeonInternalProxyApiBaseClass {
1400+
ContentProgressProvider({
1401+
super.pigeon_binaryMessenger,
1402+
super.pigeon_instanceManager,
1403+
}) {
1404+
final int pigeonVar_instanceIdentifier =
1405+
pigeon_instanceManager.addDartCreatedInstance(this);
1406+
final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec =
1407+
_pigeonVar_codecContentProgressProvider;
1408+
final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger;
1409+
() async {
1410+
const String pigeonVar_channelName =
1411+
'dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.pigeon_defaultConstructor';
1412+
final BasicMessageChannel<Object?> pigeonVar_channel =
1413+
BasicMessageChannel<Object?>(
1414+
pigeonVar_channelName,
1415+
pigeonChannelCodec,
1416+
binaryMessenger: pigeonVar_binaryMessenger,
1417+
);
1418+
final List<Object?>? pigeonVar_replyList = await pigeonVar_channel
1419+
.send(<Object?>[pigeonVar_instanceIdentifier]) as List<Object?>?;
1420+
if (pigeonVar_replyList == null) {
1421+
throw _createConnectionError(pigeonVar_channelName);
1422+
} else if (pigeonVar_replyList.length > 1) {
1423+
throw PlatformException(
1424+
code: pigeonVar_replyList[0]! as String,
1425+
message: pigeonVar_replyList[1] as String?,
1426+
details: pigeonVar_replyList[2],
1427+
);
1428+
} else {
1429+
return;
1430+
}
1431+
}();
1432+
}
1433+
14001434
/// Constructs [ContentProgressProvider] without creating the associated native object.
14011435
///
14021436
/// This should only be used by subclasses created by this library or to
@@ -1407,6 +1441,10 @@ class ContentProgressProvider extends PigeonInternalProxyApiBaseClass {
14071441
super.pigeon_instanceManager,
14081442
});
14091443

1444+
late final _PigeonInternalProxyApiBaseCodec
1445+
_pigeonVar_codecContentProgressProvider =
1446+
_PigeonInternalProxyApiBaseCodec(pigeon_instanceManager);
1447+
14101448
static void pigeon_setUpMessageHandlers({
14111449
bool pigeon_clearHandlers = false,
14121450
BinaryMessenger? pigeon_binaryMessenger,
@@ -1456,6 +1494,37 @@ class ContentProgressProvider extends PigeonInternalProxyApiBaseClass {
14561494
}
14571495
}
14581496

1497+
/// Sets an update on the progress of the video.
1498+
///
1499+
/// This is a custom method added to the native class because the native
1500+
/// method `getContentProgress` requires a synchronous return value.
1501+
Future<void> setContentProgress(VideoProgressUpdate update) async {
1502+
final _PigeonInternalProxyApiBaseCodec pigeonChannelCodec =
1503+
_pigeonVar_codecContentProgressProvider;
1504+
final BinaryMessenger? pigeonVar_binaryMessenger = pigeon_binaryMessenger;
1505+
const String pigeonVar_channelName =
1506+
'dev.flutter.pigeon.interactive_media_ads.ContentProgressProvider.setContentProgress';
1507+
final BasicMessageChannel<Object?> pigeonVar_channel =
1508+
BasicMessageChannel<Object?>(
1509+
pigeonVar_channelName,
1510+
pigeonChannelCodec,
1511+
binaryMessenger: pigeonVar_binaryMessenger,
1512+
);
1513+
final List<Object?>? pigeonVar_replyList =
1514+
await pigeonVar_channel.send(<Object?>[this, update]) as List<Object?>?;
1515+
if (pigeonVar_replyList == null) {
1516+
throw _createConnectionError(pigeonVar_channelName);
1517+
} else if (pigeonVar_replyList.length > 1) {
1518+
throw PlatformException(
1519+
code: pigeonVar_replyList[0]! as String,
1520+
message: pigeonVar_replyList[1] as String?,
1521+
details: pigeonVar_replyList[2],
1522+
);
1523+
} else {
1524+
return;
1525+
}
1526+
}
1527+
14591528
@override
14601529
ContentProgressProvider pigeon_copy() {
14611530
return ContentProgressProvider.pigeon_detached(

packages/interactive_media_ads/pigeons/interactive_media_ads_android.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,15 @@ abstract class AdsRequest {
327327
'com.google.ads.interactivemedia.v3.api.player.ContentProgressProvider',
328328
),
329329
)
330-
abstract class ContentProgressProvider {}
330+
abstract class ContentProgressProvider {
331+
ContentProgressProvider();
332+
333+
/// Sets an update on the progress of the video.
334+
///
335+
/// This is a custom method added to the native class because the native
336+
/// method `getContentProgress` requires a synchronous return value.
337+
void setContentProgress(VideoProgressUpdate update);
338+
}
331339

332340
/// An object which handles playing ads after they've been received from the
333341
/// server.

packages/interactive_media_ads/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: interactive_media_ads
22
description: A Flutter plugin for using the Interactive Media Ads SDKs on Android and iOS.
33
repository: https://github.com/flutter/packages/tree/main/packages/interactive_media_ads
44
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+interactive_media_ads%22
5-
version: 0.2.0 # This must match the version in
5+
version: 0.2.1 # This must match the version in
66
# `android/src/main/kotlin/dev/flutter/packages/interactive_media_ads/AdsRequestProxyApi.kt` and
77
# `ios/interactive_media_ads/Sources/interactive_media_ads/AdsRequestProxyAPIDelegate.swift`
88

0 commit comments

Comments
 (0)