Commit cdeea279 by andrewlewis Committed by Oliver Woodman

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
parent 1f0c85bd
...@@ -187,6 +187,10 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, ...@@ -187,6 +187,10 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer,
* Whether {@link #getContentProgress()} has sent {@link #pendingContentPositionMs} to IMA. * Whether {@link #getContentProgress()} has sent {@link #pendingContentPositionMs} to IMA.
*/ */
private boolean sentPendingContentPositionMs; private boolean sentPendingContentPositionMs;
/**
* Whether {@link #release()} has been called.
*/
private boolean released;
/** /**
* Creates a new IMA ads loader. * Creates a new IMA ads loader.
...@@ -252,7 +256,7 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, ...@@ -252,7 +256,7 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer,
if (imaPausedContent) { if (imaPausedContent) {
adsManager.resume(); adsManager.resume();
} }
} else if (adTagUri != null) { } else {
requestAds(); requestAds();
} }
} }
...@@ -278,12 +282,10 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, ...@@ -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. * Releases the loader. Must be called when the instance is no longer needed.
*/ */
public void release() { public void release() {
released = true;
if (adsManager != null) { if (adsManager != null) {
adsManager.destroy(); adsManager.destroy();
adsManager = null; adsManager = null;
if (player != null) {
detachPlayer();
}
} }
} }
...@@ -291,7 +293,12 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, ...@@ -291,7 +293,12 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer,
@Override @Override
public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) { public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) {
adsManager = adsManagerLoadedEvent.getAdsManager(); AdsManager adsManager = adsManagerLoadedEvent.getAdsManager();
if (released) {
adsManager.destroy();
return;
}
this.adsManager = adsManager;
adsManager.addAdErrorListener(this); adsManager.addAdErrorListener(this);
adsManager.addAdEventListener(this); adsManager.addAdEventListener(this);
if (ENABLE_PRELOADING) { if (ENABLE_PRELOADING) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment