From 713ed5eba4891124770cba366d6fbe5ec97b113d Mon Sep 17 00:00:00 2001 From: Marvin Ramin Date: Tue, 25 Aug 2020 14:02:55 +0200 Subject: [PATCH] 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 --- .../hdmi/HdmiCecLocalDevicePlaybackTest.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java index ef2365e6da3e6..3f324a279270d 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java @@ -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,