Add tests to verify volume command behavior

Tests verify that a Playback device will send volume commands to the
correct target device. Verify that volume commands can be sent both when
the device is active source and not the active source.

Test: atest HdmiCecLocalDevicePlaybackTest
Bug: 161052729
Change-Id: I592451412203efb53f0d8a9dbbe7f8c80668df77
This commit is contained in:
Marvin Ramin
2020-08-25 14:02:55 +02:00
parent 90230f18c6
commit 713ed5eba4

View File

@@ -15,6 +15,7 @@
*/
package com.android.server.hdmi;
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;
@@ -692,6 +693,82 @@ public class HdmiCecLocalDevicePlaybackTest {
assertThat(mNativeWrapper.getResultMessages()).doesNotContain(keyReleased);
}
@Test
public void sendVolumeKeyEvent_toTv_activeSource() {
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
mHdmiControlService.setSystemAudioActivated(false);
mHdmiControlService.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, true);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, false);
HdmiCecMessage pressed = HdmiCecMessageBuilder.buildUserControlPressed(
mPlaybackLogicalAddress, ADDR_TV, HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP);
HdmiCecMessage released = HdmiCecMessageBuilder.buildUserControlReleased(
mPlaybackLogicalAddress, ADDR_TV);
mTestLooper.dispatchAll();
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
}
@Test
public void sendVolumeKeyEvent_toAudio_activeSource() {
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
mHdmiControlService.setSystemAudioActivated(true);
mHdmiControlService.setActiveSource(mPlaybackLogicalAddress, mPlaybackPhysicalAddress);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, true);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, false);
HdmiCecMessage pressed = HdmiCecMessageBuilder.buildUserControlPressed(
mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM, HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP);
HdmiCecMessage released = HdmiCecMessageBuilder.buildUserControlReleased(
mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM);
mTestLooper.dispatchAll();
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isTrue();
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
}
@Test
public void sendVolumeKeyEvent_toTv_inactiveSource() {
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
mHdmiControlService.setSystemAudioActivated(false);
mHdmiControlService.setActiveSource(ADDR_TV, 0x0000);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, true);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, false);
HdmiCecMessage pressed = HdmiCecMessageBuilder.buildUserControlPressed(
mPlaybackLogicalAddress, ADDR_TV, HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP);
HdmiCecMessage released = HdmiCecMessageBuilder.buildUserControlReleased(
mPlaybackLogicalAddress, ADDR_TV);
mTestLooper.dispatchAll();
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
}
@Test
public void sendVolumeKeyEvent_toAudio_inactiveSource() {
mHdmiControlService.setHdmiCecVolumeControlEnabled(true);
mHdmiControlService.setSystemAudioActivated(true);
mHdmiControlService.setActiveSource(ADDR_TV, 0x0000);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, true);
mHdmiCecLocalDevicePlayback.sendVolumeKeyEvent(KeyEvent.KEYCODE_VOLUME_UP, false);
HdmiCecMessage pressed = HdmiCecMessageBuilder.buildUserControlPressed(
mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM, HdmiCecKeycode.CEC_KEYCODE_VOLUME_UP);
HdmiCecMessage released = HdmiCecMessageBuilder.buildUserControlReleased(
mPlaybackLogicalAddress, ADDR_AUDIO_SYSTEM);
mTestLooper.dispatchAll();
assertThat(mHdmiCecLocalDevicePlayback.mIsActiveSource).isFalse();
assertThat(mNativeWrapper.getResultMessages()).containsAllOf(pressed, released);
}
@Test
public void handleSetStreamPath_broadcastsActiveSource() {
HdmiCecMessage setStreamPath = HdmiCecMessageBuilder.buildSetStreamPath(ADDR_TV,