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 20aa5bd926
commit 16285ca5df
2 changed files with 34 additions and 3 deletions

View File

@ -73,6 +73,9 @@ Release notes
* Add a property `focusSkipButtonWhenAvailable` to the
`ImaServerSideAdInsertionMediaSource.AdsLoader.Builder` to request
focusing the skip button on TV devices and set it to true by default.
* Add a method `focusSkipButton()` to the
`ImaServerSideAdInsertionMediaSource.AdsLoader` to programmatically
request to focus the skip button.
* Bump IMA SDK version to 3.29.0.
* Demo app
* Request notification permission for download notifications at runtime

View File

@ -376,8 +376,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;
@ -403,6 +402,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.
*
@ -429,7 +457,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) {