Commit 07f05911 by olly Committed by Oliver Woodman

Clean up AudioFocusManagerTest

PiperOrigin-RevId: 305235961
parent 20cadd6e
...@@ -67,7 +67,6 @@ public class AudioFocusManagerTest { ...@@ -67,7 +67,6 @@ public class AudioFocusManagerTest {
@Test @Test
public void setAudioAttributes_withNullUsage_doesNotManageAudioFocus() { public void setAudioAttributes_withNullUsage_doesNotManageAudioFocus() {
// Ensure that NULL audio attributes -> don't manage audio focus
audioFocusManager.setAudioAttributes(/* audioAttributes= */ null); audioFocusManager.setAudioAttributes(/* audioAttributes= */ null);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ false, Player.STATE_IDLE)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ false, Player.STATE_IDLE))
...@@ -81,19 +80,18 @@ public class AudioFocusManagerTest { ...@@ -81,19 +80,18 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(maxSdk = 25) @Config(maxSdk = 25)
public void setAudioAttributes_withNullUsage_releasesAudioFocus() { public void setAudioAttributes_withNullUsage_abandonsAudioFocus() {
// Create attributes and request audio focus.
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
ShadowAudioManager.AudioFocusRequest request = ShadowAudioManager.AudioFocusRequest request =
Shadows.shadowOf(audioManager).getLastAudioFocusRequest(); Shadows.shadowOf(audioManager).getLastAudioFocusRequest();
assertThat(request.durationHint).isEqualTo(AudioManager.AUDIOFOCUS_GAIN); assertThat(request.durationHint).isEqualTo(AudioManager.AUDIOFOCUS_GAIN);
// Ensure that setting null audio attributes with audio focus releases audio focus. // Ensure that setting null audio attributes with focus releases focus.
audioFocusManager.setAudioAttributes(/* audioAttributes= */ null); audioFocusManager.setAudioAttributes(/* audioAttributes= */ null);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
...@@ -105,19 +103,18 @@ public class AudioFocusManagerTest { ...@@ -105,19 +103,18 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(minSdk = 26, maxSdk = TARGET_SDK) @Config(minSdk = 26, maxSdk = TARGET_SDK)
public void setAudioAttributes_withNullUsage_releasesAudioFocus_v26() { public void setAudioAttributes_withNullUsage_abandonsAudioFocus_v26() {
// Create attributes and request audio focus.
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
ShadowAudioManager.AudioFocusRequest request = ShadowAudioManager.AudioFocusRequest request =
Shadows.shadowOf(audioManager).getLastAudioFocusRequest(); Shadows.shadowOf(audioManager).getLastAudioFocusRequest();
assertThat(getAudioFocusGainFromRequest(request)).isEqualTo(AudioManager.AUDIOFOCUS_GAIN); assertThat(getAudioFocusGainFromRequest(request)).isEqualTo(AudioManager.AUDIOFOCUS_GAIN);
// Ensure that setting null audio attributes with audio focus releases audio focus. // Ensure that setting null audio attributes with focus releases focus.
audioFocusManager.setAudioAttributes(/* audioAttributes= */ null); audioFocusManager.setAudioAttributes(/* audioAttributes= */ null);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -128,7 +125,7 @@ public class AudioFocusManagerTest { ...@@ -128,7 +125,7 @@ public class AudioFocusManagerTest {
@Test @Test
public void setAudioAttributes_withUsageAlarm_throwsIllegalArgumentException() { public void setAudioAttributes_withUsageAlarm_throwsIllegalArgumentException() {
// Ensure that audio attributes that map to AUDIOFOCUS_GAIN_TRANSIENT* throw. // USAGE_ALARM attributes map to AUDIOFOCUS_GAIN_TRANSIENT, which should result in failure.
AudioAttributes alarm = new AudioAttributes.Builder().setUsage(C.USAGE_ALARM).build(); AudioAttributes alarm = new AudioAttributes.Builder().setUsage(C.USAGE_ALARM).build();
try { try {
audioFocusManager.setAudioAttributes(alarm); audioFocusManager.setAudioAttributes(alarm);
...@@ -140,12 +137,12 @@ public class AudioFocusManagerTest { ...@@ -140,12 +137,12 @@ public class AudioFocusManagerTest {
@Test @Test
public void setAudioAttributes_withUsageMedia_usesAudioFocusGain() { public void setAudioAttributes_withUsageMedia_usesAudioFocusGain() {
// Ensure setting media type audio attributes requests AUDIOFOCUS_GAIN.
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); AudioAttributes mediaAudioAttributes =
new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
audioFocusManager.setAudioAttributes(mediaAudioAttributes);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -155,14 +152,11 @@ public class AudioFocusManagerTest { ...@@ -155,14 +152,11 @@ public class AudioFocusManagerTest {
} }
@Test @Test
public void setAudioAttributes_inStateEnded_requestsAudioFocus() { public void setAudioAttributes_inEndedState_requestsAudioFocus() {
// Ensure setting audio attributes when player is in STATE_ENDED requests audio focus.
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_ENDED)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_ENDED))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
ShadowAudioManager.AudioFocusRequest request = ShadowAudioManager.AudioFocusRequest request =
...@@ -172,13 +166,10 @@ public class AudioFocusManagerTest { ...@@ -172,13 +166,10 @@ public class AudioFocusManagerTest {
@Test @Test
public void updateAudioFocus_idleToBuffering_setsPlayerCommandPlayWhenReady() { public void updateAudioFocus_idleToBuffering_setsPlayerCommandPlayWhenReady() {
// Ensure that when playWhenReady is true while the player is IDLE, audio focus is only
// requested after calling prepare (= changing the state to BUFFERING).
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media);
audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_IDLE)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_IDLE))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
assertThat(Shadows.shadowOf(audioManager).getLastAudioFocusRequest()).isNull(); assertThat(Shadows.shadowOf(audioManager).getLastAudioFocusRequest()).isNull();
...@@ -192,17 +183,16 @@ public class AudioFocusManagerTest { ...@@ -192,17 +183,16 @@ public class AudioFocusManagerTest {
@Test @Test
public void updateAudioFocus_pausedToPlaying_setsPlayerCommandPlayWhenReady() { public void updateAudioFocus_pausedToPlaying_setsPlayerCommandPlayWhenReady() {
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
// Audio focus should not be requested yet, because playWhenReady=false. // Audio focus should not be requested yet, because playWhenReady is false.
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ false, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ false, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_DO_NOT_PLAY); .isEqualTo(PLAYER_COMMAND_DO_NOT_PLAY);
assertThat(Shadows.shadowOf(audioManager).getLastAudioFocusRequest()).isNull(); assertThat(Shadows.shadowOf(audioManager).getLastAudioFocusRequest()).isNull();
// Audio focus should be requested now that playWhenReady=true. // Audio focus should be requested now that playWhenReady is true.
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
ShadowAudioManager.AudioFocusRequest request = ShadowAudioManager.AudioFocusRequest request =
...@@ -210,13 +200,11 @@ public class AudioFocusManagerTest { ...@@ -210,13 +200,11 @@ public class AudioFocusManagerTest {
assertThat(getAudioFocusGainFromRequest(request)).isEqualTo(AudioManager.AUDIOFOCUS_GAIN); assertThat(getAudioFocusGainFromRequest(request)).isEqualTo(AudioManager.AUDIOFOCUS_GAIN);
} }
// See https://github.com/google/ExoPlayer/issues/7182 for context.
@Test @Test
public void updateAudioFocus_pausedToPlaying_withTransientLoss_setsPlayerCommandPlayWhenReady() { public void updateAudioFocus_pausedToPlaying_withTransientLoss_setsPlayerCommandPlayWhenReady() {
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -224,17 +212,17 @@ public class AudioFocusManagerTest { ...@@ -224,17 +212,17 @@ public class AudioFocusManagerTest {
// Simulate transient focus loss. // Simulate transient focus loss.
audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT); audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
// Focus should be re-requested, rather than staying in a state of transient focus loss. // Focus should be re-requested rather than staying in a state of transient focus loss. See
// https://github.com/google/ExoPlayer/issues/7182 for context.
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
} }
@Test @Test
public void updateAudioFocus_pausedToPlaying_withTransientDuck_setsPlayerCommandPlayWhenReady() { public void updateAudioFocus_pausedToPlaying_withTransientDuck_setsPlayerCommandPlayWhenReady() {
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -246,7 +234,8 @@ public class AudioFocusManagerTest { ...@@ -246,7 +234,8 @@ public class AudioFocusManagerTest {
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f);
// Focus should be re-requested, rather than staying in a state of transient ducking. This // Focus should be re-requested, rather than staying in a state of transient ducking. This
// should restore the volume to 1.0. // should restore the volume to 1.0. See https://github.com/google/ExoPlayer/issues/7182 for
// context.
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f);
...@@ -254,10 +243,9 @@ public class AudioFocusManagerTest { ...@@ -254,10 +243,9 @@ public class AudioFocusManagerTest {
@Test @Test
public void updateAudioFocus_abandonFocusWhenDucked_restoresFullVolume() { public void updateAudioFocus_abandonFocusWhenDucked_restoresFullVolume() {
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -268,7 +256,7 @@ public class AudioFocusManagerTest { ...@@ -268,7 +256,7 @@ public class AudioFocusManagerTest {
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK); .onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f);
// Configure the manager to no longer handle audio focus. // Configure the manager to no longer handle focus.
audioFocusManager.setAudioAttributes(null); audioFocusManager.setAudioAttributes(null);
// Focus should be abandoned, which should restore the volume to 1.0. // Focus should be abandoned, which should restore the volume to 1.0.
...@@ -280,15 +268,10 @@ public class AudioFocusManagerTest { ...@@ -280,15 +268,10 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(maxSdk = 25) @Config(maxSdk = 25)
public void updateAudioFocus_readyToIdle_abandonsAudioFocus() { public void updateAudioFocus_readyToIdle_abandonsAudioFocus() {
// Ensure that stopping the player (=changing state to idle) abandons audio focus.
AudioAttributes media =
new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_SPEECH)
.build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusListener()).isNull(); assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusListener()).isNull();
...@@ -304,15 +287,9 @@ public class AudioFocusManagerTest { ...@@ -304,15 +287,9 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(minSdk = 26, maxSdk = TARGET_SDK) @Config(minSdk = 26, maxSdk = TARGET_SDK)
public void updateAudioFocus_readyToIdle_abandonsAudioFocus_v26() { public void updateAudioFocus_readyToIdle_abandonsAudioFocus_v26() {
// Ensure that stopping the player (=changing state to idle) abandons audio focus.
AudioAttributes media =
new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_SPEECH)
.build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -328,8 +305,7 @@ public class AudioFocusManagerTest { ...@@ -328,8 +305,7 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(maxSdk = 25) @Config(maxSdk = 25)
public void updateAudioFocus_readyToIdle_withoutHandlingAudioFocus_isNoOp() { public void updateAudioFocus_readyToIdle_withoutFocus_isNoOp() {
// Ensure that changing state to idle is a no-op if audio focus isn't handled.
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(null); audioFocusManager.setAudioAttributes(null);
...@@ -348,8 +324,7 @@ public class AudioFocusManagerTest { ...@@ -348,8 +324,7 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(minSdk = 26, maxSdk = TARGET_SDK) @Config(minSdk = 26, maxSdk = TARGET_SDK)
public void updateAudioFocus_readyToIdle_withoutHandlingAudioFocus_isNoOp_v26() { public void updateAudioFocus_readyToIdle_withoutFocus_isNoOp_v26() {
// Ensure that changing state to idle is a no-op if audio focus isn't handled.
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(null); audioFocusManager.setAudioAttributes(null);
...@@ -368,10 +343,9 @@ public class AudioFocusManagerTest { ...@@ -368,10 +343,9 @@ public class AudioFocusManagerTest {
@Test @Test
public void release_doesNotCallPlayerControlToRestoreVolume() { public void release_doesNotCallPlayerControlToRestoreVolume() {
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -389,14 +363,10 @@ public class AudioFocusManagerTest { ...@@ -389,14 +363,10 @@ public class AudioFocusManagerTest {
} }
@Test @Test
public void onAudioFocusChange_withDuckEnabled_volumeReducedAndRestored() { public void onAudioFocusChange_withDuckEnabled_reducesAndRestoresVolume() {
// Ensure that the volume multiplier is adjusted when audio focus is lost to
// AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK, and returns to the default value after focus is
// regained.
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -413,16 +383,15 @@ public class AudioFocusManagerTest { ...@@ -413,16 +383,15 @@ public class AudioFocusManagerTest {
@Test @Test
public void onAudioFocusChange_withPausedWhenDucked_sendsCommandWaitForCallback() { public void onAudioFocusChange_withPausedWhenDucked_sendsCommandWaitForCallback() {
// Ensure that the player is commanded to pause when audio focus is lost with Shadows.shadowOf(audioManager)
// AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK and the content type is CONTENT_TYPE_SPEECH. .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
AudioAttributes media =
AudioAttributes speechAudioAttributes =
new AudioAttributes.Builder() new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA) .setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_SPEECH) .setContentType(C.CONTENT_TYPE_SPEECH)
.build(); .build();
Shadows.shadowOf(audioManager) audioFocusManager.setAudioAttributes(speechAudioAttributes);
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -438,12 +407,9 @@ public class AudioFocusManagerTest { ...@@ -438,12 +407,9 @@ public class AudioFocusManagerTest {
@Test @Test
public void onAudioFocusChange_withTransientLoss_sendsCommandWaitForCallback() { public void onAudioFocusChange_withTransientLoss_sendsCommandWaitForCallback() {
// Ensure that the player is commanded to pause when audio focus is lost with
// AUDIOFOCUS_LOSS_TRANSIENT.
AudioAttributes media = new AudioAttributes.Builder().setUsage(C.USAGE_MEDIA).build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -456,16 +422,9 @@ public class AudioFocusManagerTest { ...@@ -456,16 +422,9 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(maxSdk = 25) @Config(maxSdk = 25)
public void onAudioFocusChange_withFocusLoss_sendsDoNotPlayAndAbandonsFocus() { public void onAudioFocusChange_withFocusLoss_sendsDoNotPlayAndAbandonsFocus() {
// Ensure that AUDIOFOCUS_LOSS causes AudioFocusManager to pause playback and abandon audio
// focus.
AudioAttributes media =
new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_SPEECH)
.build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
...@@ -482,16 +441,9 @@ public class AudioFocusManagerTest { ...@@ -482,16 +441,9 @@ public class AudioFocusManagerTest {
@Test @Test
@Config(minSdk = 26, maxSdk = TARGET_SDK) @Config(minSdk = 26, maxSdk = TARGET_SDK)
public void onAudioFocusChange_withFocusLoss_sendsDoNotPlayAndAbandonsFocus_v26() { public void onAudioFocusChange_withFocusLoss_sendsDoNotPlayAndAbandonsFocus_v26() {
// Ensure that AUDIOFOCUS_LOSS causes AudioFocusManager to pause playback and abandon audio
// focus.
AudioAttributes media =
new AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_SPEECH)
.build();
Shadows.shadowOf(audioManager) Shadows.shadowOf(audioManager)
.setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED); .setNextFocusRequestResponse(AudioManager.AUDIOFOCUS_REQUEST_GRANTED);
audioFocusManager.setAudioAttributes(media); audioFocusManager.setAudioAttributes(AudioAttributes.DEFAULT);
assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY)) assertThat(audioFocusManager.updateAudioFocus(/* playWhenReady= */ true, Player.STATE_READY))
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment