From 026697140687e81d87540252174f859992f36abc Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Thu, 10 Sep 2020 12:04:01 +0100 Subject: [PATCH] Add a setter for ad error listeners This is useful because ImaAdsLoader.getAdsLoader() can now return null (before ads have been requested), and it avoids the app needing to get an AdsManager to attach its listener. PiperOrigin-RevId: 330907051 --- .../exoplayer2/ext/ima/ImaAdsLoader.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java index 351ad43d2c..ed40a17510 100644 --- a/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java +++ b/extensions/ima/src/main/java/com/google/android/exoplayer2/ext/ima/ImaAdsLoader.java @@ -124,6 +124,7 @@ public final class ImaAdsLoader private final Context context; @Nullable private ImaSdkSettings imaSdkSettings; + @Nullable private AdErrorListener adErrorListener; @Nullable private AdEventListener adEventListener; @Nullable private Set adUiElements; @Nullable private Collection companionAdSlots; @@ -165,6 +166,19 @@ public final class ImaAdsLoader return this; } + /** + * Sets a listener for ad errors that will be passed to {@link + * AdsLoader#addAdErrorListener(AdErrorListener)} and {@link + * AdsManager#addAdErrorListener(AdErrorListener)}. + * + * @param adErrorListener The ad error listener. + * @return This builder, for convenience. + */ + public Builder setAdErrorListener(AdErrorListener adErrorListener) { + this.adErrorListener = checkNotNull(adErrorListener); + return this; + } + /** * Sets a listener for ad events that will be passed to {@link * AdsManager#addAdEventListener(AdEventListener)}. @@ -316,6 +330,7 @@ public final class ImaAdsLoader playAdBeforeStartPosition, adUiElements, companionAdSlots, + adErrorListener, adEventListener, imaFactory); } @@ -341,6 +356,7 @@ public final class ImaAdsLoader playAdBeforeStartPosition, adUiElements, companionAdSlots, + adErrorListener, adEventListener, imaFactory); } @@ -408,6 +424,7 @@ public final class ImaAdsLoader private final int mediaBitrate; @Nullable private final Set adUiElements; @Nullable private final Collection companionAdSlots; + @Nullable private final AdErrorListener adErrorListener; @Nullable private final AdEventListener adEventListener; private final ImaFactory imaFactory; private final ImaSdkSettings imaSdkSettings; @@ -516,6 +533,7 @@ public final class ImaAdsLoader /* playAdBeforeStartPosition= */ true, /* adUiElements= */ null, /* companionAdSlots= */ null, + /* adErrorListener= */ null, /* adEventListener= */ null, /* imaFactory= */ new DefaultImaFactory()); } @@ -534,6 +552,7 @@ public final class ImaAdsLoader boolean playAdBeforeStartPosition, @Nullable Set adUiElements, @Nullable Collection companionAdSlots, + @Nullable AdErrorListener adErrorListener, @Nullable AdEventListener adEventListener, ImaFactory imaFactory) { checkArgument(adTagUri != null || adsResponse != null); @@ -548,6 +567,7 @@ public final class ImaAdsLoader this.playAdBeforeStartPosition = playAdBeforeStartPosition; this.adUiElements = adUiElements; this.companionAdSlots = companionAdSlots; + this.adErrorListener = adErrorListener; this.adEventListener = adEventListener; this.imaFactory = imaFactory; if (imaSdkSettings == null) { @@ -629,6 +649,9 @@ public final class ImaAdsLoader } adsLoader = imaFactory.createAdsLoader(context, imaSdkSettings, adDisplayContainer); adsLoader.addAdErrorListener(componentListener); + if (adErrorListener != null) { + adsLoader.addAdErrorListener(adErrorListener); + } adsLoader.addAdsLoadedListener(componentListener); AdsRequest request = imaFactory.createAdsRequest(); if (adTagUri != null) { @@ -759,6 +782,9 @@ public final class ImaAdsLoader if (adsLoader != null) { adsLoader.removeAdsLoadedListener(componentListener); adsLoader.removeAdErrorListener(componentListener); + if (adErrorListener != null) { + adsLoader.removeAdErrorListener(adErrorListener); + } } imaPausedContent = false; imaAdState = IMA_AD_STATE_NONE; @@ -1582,6 +1608,9 @@ public final class ImaAdsLoader private void destroyAdsManager() { if (adsManager != null) { adsManager.removeAdErrorListener(componentListener); + if (adErrorListener != null) { + adsManager.removeAdErrorListener(adErrorListener); + } adsManager.removeAdEventListener(componentListener); if (adEventListener != null) { adsManager.removeAdEventListener(adEventListener); @@ -1642,6 +1671,9 @@ public final class ImaAdsLoader pendingAdRequestContext = null; ImaAdsLoader.this.adsManager = adsManager; adsManager.addAdErrorListener(this); + if (adErrorListener != null) { + adsManager.addAdErrorListener(adErrorListener); + } adsManager.addAdEventListener(this); if (adEventListener != null) { adsManager.addAdEventListener(adEventListener);