# PlayerAudioFocusContractTest

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

*** ** * ** ***


```
@UnstableApi
public abstract class PlayerAudioFocusContractTest
```

<br />

*** ** * ** ***

A collection of contract tests for `https://developer.android.com/reference/androidx/media3/common/Player` implementations that support `https://developer.android.com/reference/androidx/media3/common/Player#COMMAND_SET_AUDIO_ATTRIBUTES()`.

Subclasses should only include the logic necessary to construct the `https://developer.android.com/reference/androidx/media3/common/Player` and return the player's internal `https://developer.android.com/reference/androidx/media3/common/util/Clock` and internal processing `https://developer.android.com/reference/android/os/Looper.html` by overriding `https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#createPlayerInfo()`.

Subclasses shouldn't include any new `https://junit.org/junit4/javadoc/latest/org/junit/Test.html` methods - implementation-specific tests should be in a separate class.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest.PlayerInfo` Interface that allows access to a `https://developer.android.com/reference/androidx/media3/common/Player` instance and its internal `https://developer.android.com/reference/androidx/media3/common/util/Clock` and processing `https://developer.android.com/reference/android/os/Looper.html`. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#PlayerAudioFocusContractTest()()` |

| ### Public methods |
|---|---|
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#audioFocusLoss_whilePaused_rereportsPausedWithFocusLoss()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#audioFocusLost_whilePlaying_pausesPlayback()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#getPlaybackSuppressionReason_withUnpreparedPlayer_returnsNone()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#pause_duringTransientLossWhilePlaying_keepsPlaybackPausedAndSuppressed()( )` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_duringTransientLossWhilePaused_continuesPlayback()()` |
| `void` | `@https://robolectric.org/javadoc/4.11/org/robolectric/annotation/Config.html(minSdk = 26) @https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_duringTransientLossWhilePlayingWithDelayedGainAndLoss_continuesAndPausesPlayback()( )` |
| `void` | `@https://robolectric.org/javadoc/4.11/org/robolectric/annotation/Config.html(minSdk = 26) @https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_duringTransientLossWhilePlayingWithDelayedGainAndRegularGain_continuesPlayback()( )` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_duringTransientLossWhilePlayingWithLoss_pausesPlayback()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_duringTransientLossWhilePlayingWithRegularGain_continuesPlayback()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_withAudioFocusRequestDenied_doesNotPlay()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_withAudioFocusRequestGranted_startsPlayback()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#play_withHandleAudioFocusDisabled_ignoresDeniedRequestAndStartsPlayback()( )` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#player_hasRequiredCommandsAvailable()()` |
| `final void` | `@https://junit.org/junit4/javadoc/latest/org/junit/After.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#tearDown()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#transientLossAndGain_whilePaused_suppressesPlayback()()` |
| `void` | `@https://junit.org/junit4/javadoc/latest/org/junit/Test.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#transientLossAndGain_whilePlaying_suppressesPlaybackWhileLost()()` |

| ### Protected methods |
|---|---|
| `abstract https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest.PlayerInfo` | `@https://checkerframework.org/api/com/google/errorprone/annotations/ForOverride.html https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest#createPlayerInfo()()` Creates and returns the `https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest.PlayerInfo` with which to run the tests. |

## Public constructors

### PlayerAudioFocusContractTest

```
public PlayerAudioFocusContractTest()
```

## Public methods

### audioFocusLoss_whilePaused_rereportsPausedWithFocusLoss

```
@Test
public void audioFocusLoss_whilePaused_rereportsPausedWithFocusLoss()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### audioFocusLost_whilePlaying_pausesPlayback

```
@Test
public void audioFocusLost_whilePlaying_pausesPlayback()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### getPlaybackSuppressionReason_withUnpreparedPlayer_returnsNone

```
@Test
public void getPlaybackSuppressionReason_withUnpreparedPlayer_returnsNone()
```

### pause_duringTransientLossWhilePlaying_keepsPlaybackPausedAndSuppressed

```
@Test
public void pause_duringTransientLossWhilePlaying_keepsPlaybackPausedAndSuppressed(

)
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_duringTransientLossWhilePaused_continuesPlayback

```
@Test
public void play_duringTransientLossWhilePaused_continuesPlayback()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_duringTransientLossWhilePlayingWithDelayedGainAndLoss_continuesAndPausesPlayback

```
@Config(minSdk = 26)
@Test
public void play_duringTransientLossWhilePlayingWithDelayedGainAndLoss_continuesAndPausesPlayback(

)
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_duringTransientLossWhilePlayingWithDelayedGainAndRegularGain_continuesPlayback

```
@Config(minSdk = 26)
@Test
public void play_duringTransientLossWhilePlayingWithDelayedGainAndRegularGain_continuesPlayback(

)
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_duringTransientLossWhilePlayingWithLoss_pausesPlayback

```
@Test
public void play_duringTransientLossWhilePlayingWithLoss_pausesPlayback()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_duringTransientLossWhilePlayingWithRegularGain_continuesPlayback

```
@Test
public void play_duringTransientLossWhilePlayingWithRegularGain_continuesPlayback()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_withAudioFocusRequestDenied_doesNotPlay

```
@Test
public void play_withAudioFocusRequestDenied_doesNotPlay()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_withAudioFocusRequestGranted_startsPlayback

```
@Test
public void play_withAudioFocusRequestGranted_startsPlayback()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### play_withHandleAudioFocusDisabled_ignoresDeniedRequestAndStartsPlayback

```
@Test
public void play_withHandleAudioFocusDisabled_ignoresDeniedRequestAndStartsPlayback(

)
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### player_hasRequiredCommandsAvailable

```
@Test
public void player_hasRequiredCommandsAvailable()
```

### tearDown

```
@After
public final void tearDown()
```

### transientLossAndGain_whilePaused_suppressesPlayback

```
@Test
public void transientLossAndGain_whilePaused_suppressesPlayback()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

### transientLossAndGain_whilePlaying_suppressesPlaybackWhileLost

```
@Test
public void transientLossAndGain_whilePlaying_suppressesPlaybackWhileLost()
```

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/Exception.html` |   |

## Protected methods

### createPlayerInfo

```
@ForOverride
protected abstract PlayerAudioFocusContractTest.PlayerInfo createPlayerInfo()
```

Creates and returns the `https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest.PlayerInfo` with which to run the tests.

The `https://developer.android.com/reference/androidx/media3/test/utils/robolectric/PlayerAudioFocusContractTest.PlayerInfo#getPlayer()` must have `https://developer.android.com/reference/androidx/media3/common/Player#setAudioAttributes(androidx.media3.common.AudioAttributes,boolean)` initially disabled.