# FakeMultiPeriodLiveTimeline

Artifact: [androidx.media3:media3-test-utils](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/test/utils/FakeMultiPeriodLiveTimeline.java+class:androidx.media3.test.utils.FakeMultiPeriodLiveTimeline)

*** ** * ** ***


```
@UnstableApi
public class FakeMultiPeriodLiveTimeline extends Timeline
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.common.Timeline](https://developer.android.com/reference/androidx/media3/common/Timeline) ||
|   | ↳ | [androidx.media3.test.utils.FakeMultiPeriodLiveTimeline](https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline) |

*** ** * ** ***

A fake `https://developer.android.com/reference/androidx/media3/common/Timeline` that produces a live window with periods according to the available time range.

The parameters passed to the `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#FakeMultiPeriodLiveTimeline(long,long,long,boolean[],long[],boolean,boolean,boolean)` define the availability start time, the window size and `now`. Use `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#advanceNowUs(long)` to advance the live window of the timeline accordingly.

The first available period with `https://developer.android.com/reference/androidx/media3/common/Timeline.Period#id()` 0 (zero) starts at `
availabilityStartTimeUs`. The `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` starts at `now -
liveWindowDurationUs` with the first period of the window having its ID relative to the first available period.

Periods are either of type content or ad as defined by the ad sequence pattern. A period is an ad if `adSequencePattern[id % adSequencePattern.length]` evaluates to true. Ad periods have a duration of `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#AD_PERIOD_DURATION_MS()` and content periods have a duration of `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#PERIOD_DURATION_MS()`.

## Summary

| ### Constants |
|---|---|
| `static final long` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#AD_PERIOD_DURATION_MS() = 10000` |
| `static final long` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#PERIOD_DURATION_MS() = 30000` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#FakeMultiPeriodLiveTimeline(long,long,long,boolean[],long[],boolean,boolean,boolean)( long availabilityStartTimeMs, long liveWindowDurationUs, long nowUs, boolean[] adSequencePattern, long[] periodDurationMsPattern, boolean isContentTimeline, boolean populateAds, boolean playedAds )` Creates an instance. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#advanceNowUs(long)(long durationUs)` Advances the live window by the given duration, in microseconds. |
| `int` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getIndexOfPeriod(java.lang.Object)(https://developer.android.com/reference/java/lang/Object.html uid)` Returns the index of the period identified by its unique `https://developer.android.com/reference/androidx/media3/common/Timeline.Period#uid()`, or `https://developer.android.com/reference/androidx/media3/common/C#INDEX_UNSET()` if the period is not in the timeline. |
| `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getPeriod(int,androidx.media3.common.Timeline.Period,boolean)(int periodIndex, https://developer.android.com/reference/androidx/media3/common/Timeline.Period period, boolean setIds)` Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` with data for the period at the specified index. |
| `int` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getPeriodCount()()` Returns the number of periods in the timeline. |
| `long` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getPeriodStartTimeUs(int)(int periodIndex)` Returns the period start time since Unix epoch, in microseconds. |
| `https://developer.android.com/reference/java/lang/Object.html` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getUidOfPeriod(int)(int periodIndex)` Returns the unique id of the period identified by its index in the timeline. |
| `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getWindow(int,androidx.media3.common.Timeline.Window,long)( int windowIndex, https://developer.android.com/reference/androidx/media3/common/Timeline.Window window, long defaultPositionProjectionUs )` Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` with data for the window at the specified index. |
| `int` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getWindowCount()()` Returns the number of windows in the timeline. |
| `long` | `https://developer.android.com/reference/androidx/media3/test/utils/FakeMultiPeriodLiveTimeline#getWindowStartTimeUs()()` The window's start time in microseconds since the Unix epoch, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if unknown or not applicable. |

### Inherited Constants

From [androidx.media3.common.Timeline](https://developer.android.com/reference/androidx/media3/common/Timeline) `static final https://developer.android.com/reference/androidx/media3/common/Timeline` `https://developer.android.com/reference/androidx/media3/common/Timeline#EMPTY()`

An empty timeline.

### Inherited methods

From [androidx.media3.common.Timeline](https://developer.android.com/reference/androidx/media3/common/Timeline) `final https://developer.android.com/reference/androidx/media3/common/Timeline` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/common/Timeline#copyWithSingleWindow(int)(int windowIndex)`

Returns a copy of this timeline containing just the single specified `https://developer.android.com/reference/androidx/media3/common/Timeline.Window`.
`boolean` `https://developer.android.com/reference/androidx/media3/common/Timeline#equals(java.lang.Object)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/Object.html obj)` `static https://developer.android.com/reference/androidx/media3/common/Timeline` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[fromBundle](https://developer.android.com/reference/androidx/media3/common/Timeline#fromBundle(android.os.Bundle))(https://developer.android.com/reference/android/os/Bundle.html bundle)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/common/Timeline#fromBundle(android.os.Bundle,int)` instead.

<br />

`static https://developer.android.com/reference/androidx/media3/common/Timeline` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/common/Timeline#fromBundle(android.os.Bundle,int)(https://developer.android.com/reference/android/os/Bundle.html bundle, int interfaceVersion)`

Restores a `Timeline` from a `https://developer.android.com/reference/android/os/Bundle.html`.
`int` `https://developer.android.com/reference/androidx/media3/common/Timeline#getFirstWindowIndex(boolean)(boolean shuffleModeEnabled)`

Returns the index of the first window in the playback order depending on whether shuffling is enabled.
`int` `https://developer.android.com/reference/androidx/media3/common/Timeline#getLastWindowIndex(boolean)(boolean shuffleModeEnabled)`

Returns the index of the last window in the playback order depending on whether shuffling is enabled.
`final int` `https://developer.android.com/reference/androidx/media3/common/Timeline#getNextPeriodIndex(int,androidx.media3.common.Timeline.Period,androidx.media3.common.Timeline.Window,int,boolean)(
int periodIndex,
https://developer.android.com/reference/androidx/media3/common/Timeline.Period period,
https://developer.android.com/reference/androidx/media3/common/Timeline.Window window,
@https://developer.android.com/reference/androidx/media3/common/Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)`

Returns the index of the period after the period at index `periodIndex` depending on the `repeatMode` and whether shuffling is enabled.
`int` `https://developer.android.com/reference/androidx/media3/common/Timeline#getNextWindowIndex(int,int,boolean)(
int windowIndex,
@https://developer.android.com/reference/androidx/media3/common/Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)`

Returns the index of the window after the window at index `windowIndex` depending on the `repeatMode` and whether shuffling is enabled.
`final https://developer.android.com/reference/androidx/media3/common/Timeline.Period` `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriod(int,androidx.media3.common.Timeline.Period)(int periodIndex, https://developer.android.com/reference/androidx/media3/common/Timeline.Period period)`

Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` with data for the period at the specified index.
`https://developer.android.com/reference/androidx/media3/common/Timeline.Period` `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodByUid(java.lang.Object,androidx.media3.common.Timeline.Period)(https://developer.android.com/reference/java/lang/Object.html periodUid, https://developer.android.com/reference/androidx/media3/common/Timeline.Period period)`

Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` with data for the period with the specified unique identifier.
`final https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Object.html, https://developer.android.com/reference/java/lang/Long.html>` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
@https://checkerframework.org/api/com/google/errorprone/annotations/InlineMe.html(replacement = "this.getPeriodPositionUs(window, period, windowIndex, windowPositionUs)")
[getPeriodPosition](https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPosition(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long))(
https://developer.android.com/reference/androidx/media3/common/Timeline.Window window,
https://developer.android.com/reference/androidx/media3/common/Timeline.Period period,
int windowIndex,
long windowPositionUs
)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPositionUs(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long)` instead.

<br />

`final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Object.html, https://developer.android.com/reference/java/lang/Long.html>` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
@https://checkerframework.org/api/com/google/errorprone/annotations/InlineMe.html(replacement = "this.getPeriodPositionUs("
+ "window, period, windowIndex, windowPositionUs, defaultPositionProjectionUs)")
[getPeriodPosition](https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPosition(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long,long))(
https://developer.android.com/reference/androidx/media3/common/Timeline.Window window,
https://developer.android.com/reference/androidx/media3/common/Timeline.Period period,
int windowIndex,
long windowPositionUs,
long defaultPositionProjectionUs
)`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPositionUs(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long,long)` instead.

<br />

`final https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Object.html, https://developer.android.com/reference/java/lang/Long.html>` `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPositionUs(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long)(
https://developer.android.com/reference/androidx/media3/common/Timeline.Window window,
https://developer.android.com/reference/androidx/media3/common/Timeline.Period period,
int windowIndex,
long windowPositionUs
)`

Calls `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPositionUs(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long)` with a zero default position projection.
`final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Object.html, https://developer.android.com/reference/java/lang/Long.html>` `https://developer.android.com/reference/androidx/media3/common/Timeline#getPeriodPositionUs(androidx.media3.common.Timeline.Window,androidx.media3.common.Timeline.Period,int,long,long)(
https://developer.android.com/reference/androidx/media3/common/Timeline.Window window,
https://developer.android.com/reference/androidx/media3/common/Timeline.Period period,
int windowIndex,
long windowPositionUs,
long defaultPositionProjectionUs
)`

Converts `(windowIndex, windowPositionUs)` to the corresponding `(periodUid,
periodPositionUs)`.
`int` `https://developer.android.com/reference/androidx/media3/common/Timeline#getPreviousWindowIndex(int,int,boolean)(
int windowIndex,
@https://developer.android.com/reference/androidx/media3/common/Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)`

Returns the index of the window before the window at index `windowIndex` depending on the `repeatMode` and whether shuffling is enabled.
`final https://developer.android.com/reference/androidx/media3/common/Timeline.Window` `https://developer.android.com/reference/androidx/media3/common/Timeline#getWindow(int,androidx.media3.common.Timeline.Window)(int windowIndex, https://developer.android.com/reference/androidx/media3/common/Timeline.Window window)`

Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` with data for the window at the specified index.
`int` `https://developer.android.com/reference/androidx/media3/common/Timeline#hashCode()()` `final boolean` `https://developer.android.com/reference/androidx/media3/common/Timeline#isEmpty()()`

Returns whether the timeline is empty.
`final boolean` `https://developer.android.com/reference/androidx/media3/common/Timeline#isLastPeriod(int,androidx.media3.common.Timeline.Period,androidx.media3.common.Timeline.Window,int,boolean)(
int periodIndex,
https://developer.android.com/reference/androidx/media3/common/Timeline.Period period,
https://developer.android.com/reference/androidx/media3/common/Timeline.Window window,
@https://developer.android.com/reference/androidx/media3/common/Player.RepeatMode int repeatMode,
boolean shuffleModeEnabled
)`

Returns whether the given period is the last period of the timeline depending on the `
repeatMode` and whether shuffling is enabled.
`final https://developer.android.com/reference/android/os/Bundle.html` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[toBundle](https://developer.android.com/reference/androidx/media3/common/Timeline#toBundle())()`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/common/Timeline#toBundle(int)` instead.

<br />

`final https://developer.android.com/reference/android/os/Bundle.html` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/common/Timeline#toBundle(int)(int interfaceVersion)`

Returns a `https://developer.android.com/reference/android/os/Bundle.html` representing the information stored in this object.

## Constants

### AD_PERIOD_DURATION_MS

```
public static final long AD_PERIOD_DURATION_MS = 10000
```

### PERIOD_DURATION_MS

```
public static final long PERIOD_DURATION_MS = 30000
```

## Public constructors

### FakeMultiPeriodLiveTimeline

```
public FakeMultiPeriodLiveTimeline(
    long availabilityStartTimeMs,
    long liveWindowDurationUs,
    long nowUs,
    boolean[] adSequencePattern,
    long[] periodDurationMsPattern,
    boolean isContentTimeline,
    boolean populateAds,
    boolean playedAds
)
```

Creates an instance.

| Parameters |
|---|---|
| `long availabilityStartTimeMs` | The start time of the available time range, UNIX epoch in milliseconds. |
| `long liveWindowDurationUs` | The duration of the live window. |
| `long nowUs` | The current time that determines the end of the live window. |
| `boolean[] adSequencePattern` | The repeating pattern of periods starting at ` availabilityStartTimeMs`. True is an ad period, and false a content period. |
| `long[] periodDurationMsPattern` | The repeating pattern of periods durations starting at ` availabilityStartTimeMs`, in milliseconds. Must have the same length as ` adSequencePattern`. |
| `boolean isContentTimeline` | Whether the timeline is a content timeline without `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState`s. |
| `boolean populateAds` | Whether to populate ads in the same way if an ad event has been received. |
| `boolean playedAds` | Whether ads should be marked as played if populated. |

## Public methods

### advanceNowUs

```
public void advanceNowUs(long durationUs)
```

Advances the live window by the given duration, in microseconds.

### getIndexOfPeriod

```
public int getIndexOfPeriod(Object uid)
```

Returns the index of the period identified by its unique `https://developer.android.com/reference/androidx/media3/common/Timeline.Period#uid()`, or `https://developer.android.com/reference/androidx/media3/common/C#INDEX_UNSET()` if the period is not in the timeline.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/Object.html uid` | A unique identifier for a period. |

| Returns |
|---|---|
| `int` | The index of the period, or `https://developer.android.com/reference/androidx/media3/common/C#INDEX_UNSET()` if the period was not found. |

### getPeriod

```
public Timeline.Period getPeriod(int periodIndex, Timeline.Period period, boolean setIds)
```

Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` with data for the period at the specified index.

| Parameters |
|---|---|
| `int periodIndex` | The index of the period. |
| `https://developer.android.com/reference/androidx/media3/common/Timeline.Period period` | The `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` to populate. Must not be null. |
| `boolean setIds` | Whether `https://developer.android.com/reference/androidx/media3/common/Timeline.Period#id()` and `https://developer.android.com/reference/androidx/media3/common/Timeline.Period#uid()` should be populated. If false, the fields will be set to null. The caller should pass false for efficiency reasons unless the fields are required. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Timeline.Period` | The populated `https://developer.android.com/reference/androidx/media3/common/Timeline.Period`, for convenience. |

### getPeriodCount

```
public int getPeriodCount()
```

Returns the number of periods in the timeline.

### getPeriodStartTimeUs

```
public long getPeriodStartTimeUs(int periodIndex)
```

Returns the period start time since Unix epoch, in microseconds.

Note: The returned value has millisecond precision only, so the trailing 3 digits are always zeros.

### getUidOfPeriod

```
public Object getUidOfPeriod(int periodIndex)
```

Returns the unique id of the period identified by its index in the timeline.

| Parameters |
|---|---|
| `int periodIndex` | The index of the period. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/lang/Object.html` | The unique id of the period. |

### getWindow

```
public Timeline.Window getWindow(
    int windowIndex,
    Timeline.Window window,
    long defaultPositionProjectionUs
)
```

Populates a `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` with data for the window at the specified index.

| Parameters |
|---|---|
| `int windowIndex` | The index of the window. |
| `https://developer.android.com/reference/androidx/media3/common/Timeline.Window window` | The `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` to populate. Must not be null. |
| `long defaultPositionProjectionUs` | A duration into the future that the populated window's default start position should be projected. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Timeline.Window` | The populated `https://developer.android.com/reference/androidx/media3/common/Timeline.Window`, for convenience. |

### getWindowCount

```
public int getWindowCount()
```

Returns the number of windows in the timeline.

### getWindowStartTimeUs

```
public long getWindowStartTimeUs()
```

The window's start time in microseconds since the Unix epoch, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if unknown or not applicable.