Package com.google.android.exoplayer2.source.ads

## Class AdPlaybackState.AdGroup

- java.lang.Object
- - com.google.android.exoplayer2.source.ads.AdPlaybackState.AdGroup

- All Implemented Interfaces:
    `Bundleable`
  Enclosing class:
    AdPlaybackState

      public static final class AdPlaybackState.AdGroup
      extends Object
      implements Bundleable

  Represents a group of ads, with information about their states.

  Instances are immutable. Call the `with*` methods to get new instances that have the required changes.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.Bundleable

      `Bundleable.Creator<T extends Bundleable>`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `long` | `contentResumeOffsetUs` | The offset in microseconds which should be added to the content stream when resuming playback after the ad group.
    `int` | `count` | The number of ads in the ad group, or `C.LENGTH_UNSET` if unknown.
    `static Bundleable.Creator<AdPlaybackState.AdGroup>` | `CREATOR` | Object that can restore `AdPlaybackState.AdGroup` from a `Bundle`.
    `long[]` | `durationsUs` | The durations of each ad in the ad group, in microseconds.
    `boolean` | `isServerSideInserted` | Whether this ad group is server-side inserted and part of the content stream.
    `int` | `originalCount` | The original number of ads in the ad group in case the ad group is only partially available, or `C.LENGTH_UNSET` if unknown.
    `@com.google.android.exoplayer2.source.ads.AdPlaybackState.AdState int[]` | `states` | The state of each ad in the ad group.
    `long` | `timeUs` | The time of the ad group in the `Timeline.Period`, in microseconds, or `C.TIME_END_OF_SOURCE` to indicate a postroll ad.
    `@NullableType Uri[]` | `uris` | The URI of each ad in the ad group.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `AdGroup​(long timeUs)` | Creates a new ad group with an unspecified number of ads.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `equals​(Object o)` |
    `int` | `getFirstAdIndexToPlay()` | Returns the index of the first ad in the ad group that should be played, or `count` if no ads should be played.
    `int` | `getNextAdIndexToPlay​(int lastPlayedAdIndex)` | Returns the index of the next ad in the ad group that should be played after playing `lastPlayedAdIndex`, or `count` if no later ads should be played.
    `int` | `hashCode()` |
    `boolean` | `hasUnplayedAds()` | Returns whether the ad group has at least one ad that is neither played, skipped, nor failed.
    `boolean` | `shouldPlayAdGroup()` | Returns whether the ad group has at least one ad that should be played.
    `Bundle` | `toBundle()` | Returns a `Bundle` representing the information stored in this object.
    `AdPlaybackState.AdGroup` | `withAdCount​(int count)` | Returns a new instance with the ad count set to `count`.
    `AdPlaybackState.AdGroup` | `withAdDurationsUs​(long[] durationsUs)` | Returns a new instance with the specified ad durations, in microseconds.
    `AdPlaybackState.AdGroup` | `withAdState​(@com.google.android.exoplayer2.source.ads.AdPlaybackState.AdState int state, int index)` | Returns a new instance with the specified ad set to the specified `state`.
    `AdPlaybackState.AdGroup` | `withAdUri​(Uri uri, int index)` | Returns a new instance with the specified `uri` set for the specified ad, and the ad marked as `AdPlaybackState.AD_STATE_AVAILABLE`.
    `AdPlaybackState.AdGroup` | `withAllAdsReset()` | Returns an instance with all ads in final states (played, skipped, error) reset to either available or unavailable, which allows to play them again.
    `AdPlaybackState.AdGroup` | `withAllAdsSkipped()` | Returns an instance with all unavailable and available ads marked as skipped.
    `AdPlaybackState.AdGroup` | `withContentResumeOffsetUs​(long contentResumeOffsetUs)` | Returns an instance with the specified `contentResumeOffsetUs`.
    `AdPlaybackState.AdGroup` | `withIsServerSideInserted​(boolean isServerSideInserted)` | Returns an instance with the specified value for `isServerSideInserted`.
    `AdPlaybackState.AdGroup` | `withLastAdRemoved()` | Removes the last ad from the ad group.
    `AdPlaybackState.AdGroup` | `withOriginalAdCount​(int originalCount)` | Returns an instance with the specified value for `originalCount`.
    `AdPlaybackState.AdGroup` | `withTimeUs​(long timeUs)` | Returns a new instance with the `timeUs` set to the specified value.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### timeUs

          public final long timeUs

      The time of the ad group in the `Timeline.Period`, in microseconds, or `C.TIME_END_OF_SOURCE` to indicate a postroll ad.

    - #### count

          public final int count

      The number of ads in the ad group, or `C.LENGTH_UNSET` if unknown.

    - #### originalCount

          public final int originalCount

      The original number of ads in the ad group in case the ad group is only partially available, or `C.LENGTH_UNSET` if unknown. An ad can be partially available when a server side inserted ad live stream is joined while an ad is already playing and some ad information is missing.

    - #### uris

          public final @NullableType Uri[] uris

      The URI of each ad in the ad group.

    - #### states

          @AdState
          public final @com.google.android.exoplayer2.source.ads.AdPlaybackState.AdState int[] states

      The state of each ad in the ad group.

    - #### durationsUs

          public final long[] durationsUs

      The durations of each ad in the ad group, in microseconds.

    - #### contentResumeOffsetUs

          public final long contentResumeOffsetUs

      The offset in microseconds which should be added to the content stream when resuming playback after the ad group.

    - #### isServerSideInserted

          public final boolean isServerSideInserted

      Whether this ad group is server-side inserted and part of the content stream.

    - #### CREATOR

          public static final Bundleable.Creator<AdPlaybackState.AdGroup> CREATOR

      Object that can restore `AdPlaybackState.AdGroup` from a `Bundle`.

  - ### Constructor Detail

    - #### AdGroup

          public AdGroup​(long timeUs)

      Creates a new ad group with an unspecified number of ads.
      Parameters:
        `timeUs` - The time of the ad group in the `Timeline.Period`, in microseconds, or `C.TIME_END_OF_SOURCE` to indicate a postroll ad.

  - ### Method Detail

    - #### getFirstAdIndexToPlay

          public int getFirstAdIndexToPlay()

      Returns the index of the first ad in the ad group that should be played, or `count` if no ads should be played.

    - #### getNextAdIndexToPlay

          public int getNextAdIndexToPlay​(@IntRange(from=-1L)
                                          int lastPlayedAdIndex)

      Returns the index of the next ad in the ad group that should be played after playing `lastPlayedAdIndex`, or `count` if no later ads should be played. If no ads have been played, pass -1 to get the index of the first ad to play.

      Note: Server side inserted ads are always considered playable.

    - #### shouldPlayAdGroup

          public boolean shouldPlayAdGroup()

      Returns whether the ad group has at least one ad that should be played.

    - #### hasUnplayedAds

          public boolean hasUnplayedAds()

      Returns whether the ad group has at least one ad that is neither played, skipped, nor failed.

    - #### equals

          public boolean equals​(@Nullable
                                Object o)

      Overrides:
        `equals` in class `Object`

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### withTimeUs

          @CheckResult
          public AdPlaybackState.AdGroup withTimeUs​(long timeUs)

      Returns a new instance with the `timeUs` set to the specified value.

    - #### withAdCount

          @CheckResult
          public AdPlaybackState.AdGroup withAdCount​(int count)

      Returns a new instance with the ad count set to `count`.

    - #### withAdUri

          @CheckResult
          public AdPlaybackState.AdGroup withAdUri​(Uri uri,
                                                   @IntRange(from=0L)
                                                   int index)

      Returns a new instance with the specified `uri` set for the specified ad, and the ad marked as `AdPlaybackState.AD_STATE_AVAILABLE`.

    - #### withAdState

          @CheckResult
          public AdPlaybackState.AdGroup withAdState​(@AdState
                                                     @com.google.android.exoplayer2.source.ads.AdPlaybackState.AdState int state,
                                                     @IntRange(from=0L)
                                                     int index)

      Returns a new instance with the specified ad set to the specified `state`. The ad specified must currently either be in `AdPlaybackState.AD_STATE_UNAVAILABLE` or `AdPlaybackState.AD_STATE_AVAILABLE`.

      This instance's ad count may be unknown, in which case `index` must be less than the ad count specified later. Otherwise, `index` must be less than the current ad count.

    - #### withAdDurationsUs

          @CheckResult
          public AdPlaybackState.AdGroup withAdDurationsUs​(long[] durationsUs)

      Returns a new instance with the specified ad durations, in microseconds.

    - #### withContentResumeOffsetUs

          @CheckResult
          public AdPlaybackState.AdGroup withContentResumeOffsetUs​(long contentResumeOffsetUs)

      Returns an instance with the specified `contentResumeOffsetUs`.

    - #### withIsServerSideInserted

          @CheckResult
          public AdPlaybackState.AdGroup withIsServerSideInserted​(boolean isServerSideInserted)

      Returns an instance with the specified value for `isServerSideInserted`.

    - #### withOriginalAdCount

          public AdPlaybackState.AdGroup withOriginalAdCount​(int originalCount)

      Returns an instance with the specified value for `originalCount`.

    - #### withLastAdRemoved

          public AdPlaybackState.AdGroup withLastAdRemoved()

      Removes the last ad from the ad group.

    - #### withAllAdsSkipped

          @CheckResult
          public AdPlaybackState.AdGroup withAllAdsSkipped()

      Returns an instance with all unavailable and available ads marked as skipped. If the ad count hasn't been set, it will be set to zero.

    - #### withAllAdsReset

          @CheckResult
          public AdPlaybackState.AdGroup withAllAdsReset()

      Returns an instance with all ads in final states (played, skipped, error) reset to either available or unavailable, which allows to play them again.

    - #### toBundle

          public Bundle toBundle()

      Description copied from interface: `Bundleable`
      Returns a `Bundle` representing the information stored in this object.
      Specified by:
        `toBundle` in interface `Bundleable`