Add AdsLoader.focusSkipButton()

This method allows to call through to `StreamManager.focus()` of the currently playing SSAI stream.

PiperOrigin-RevId: 501399144
This commit is contained in:
bachinger 2023-01-11 23:46:58 +00:00 committed by Rohit Singh
parent 055ed77433
commit 0ba0c0ed43

View File

@ -374,8 +374,7 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou
private final ServerSideAdInsertionConfiguration configuration;
private final Context context;
private final Map<ImaServerSideAdInsertionMediaSource, MediaSourceResourceHolder>
mediaSourceResources;
private final Map<String, MediaSourceResourceHolder> mediaSourceResources;
private final Map<String, AdPlaybackState> adPlaybackStateMap;
@Nullable private Player player;
@ -401,6 +400,35 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou
this.player = player;
}
/**
* Puts the focus on the skip button, if a skip button is present and an ad is playing.
*
* @see StreamManager#focus()
*/
public void focusSkipButton() {
if (player == null) {
return;
}
if (player.getPlaybackState() != Player.STATE_IDLE
&& player.getPlaybackState() != Player.STATE_ENDED
&& player.getMediaItemCount() > 0) {
int currentPeriodIndex = player.getCurrentPeriodIndex();
Object adsId =
player
.getCurrentTimeline()
.getPeriod(currentPeriodIndex, new Timeline.Period())
.getAdsId();
if (adsId instanceof String) {
MediaSourceResourceHolder mediaSourceResourceHolder = mediaSourceResources.get(adsId);
if (mediaSourceResourceHolder != null
&& mediaSourceResourceHolder.imaServerSideAdInsertionMediaSource.streamManager
!= null) {
mediaSourceResourceHolder.imaServerSideAdInsertionMediaSource.streamManager.focus();
}
}
}
}
/**
* Releases resources.
*
@ -427,7 +455,7 @@ public final class ImaServerSideAdInsertionMediaSource extends CompositeMediaSou
StreamPlayer streamPlayer,
com.google.ads.interactivemedia.v3.api.AdsLoader adsLoader) {
mediaSourceResources.put(
mediaSource, new MediaSourceResourceHolder(mediaSource, streamPlayer, adsLoader));
mediaSource.adsId, new MediaSourceResourceHolder(mediaSource, streamPlayer, adsLoader));
}
private AdPlaybackState getAdPlaybackState(String adsId) {