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,