From aeb2f620f11717aa0f1a413a5c7d5cd57ff48056 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Mon, 31 Jul 2017 03:30:09 -0700 Subject: [PATCH] Handle release() while initializing the ads manager Also don't detach any attached player in release() to prevent a possible NullPointerException if ImaAdsLoader.release() runs first, then the MediaSource is released and detaches the player. This is safe because if the loader was attached it's guaranteed to be detached. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=163673750 --- .../exoplayer2/ext/ima/ImaAdsLoader.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) 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 fc8000b397..6541dad0ac 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 @@ -187,6 +187,10 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, * Whether {@link #getContentProgress()} has sent {@link #pendingContentPositionMs} to IMA. */ private boolean sentPendingContentPositionMs; + /** + * Whether {@link #release()} has been called. + */ + private boolean released; /** * Creates a new IMA ads loader. @@ -252,7 +256,7 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, if (imaPausedContent) { adsManager.resume(); } - } else if (adTagUri != null) { + } else { requestAds(); } } @@ -278,12 +282,10 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, * Releases the loader. Must be called when the instance is no longer needed. */ public void release() { + released = true; if (adsManager != null) { adsManager.destroy(); adsManager = null; - if (player != null) { - detachPlayer(); - } } } @@ -291,7 +293,12 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, @Override public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) { - adsManager = adsManagerLoadedEvent.getAdsManager(); + AdsManager adsManager = adsManagerLoadedEvent.getAdsManager(); + if (released) { + adsManager.destroy(); + return; + } + this.adsManager = adsManager; adsManager.addAdErrorListener(this); adsManager.addAdEventListener(this); if (ENABLE_PRELOADING) {