diff --git a/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java b/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java index 69379dadef47f..da38a3446e02e 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecMessageValidator.java @@ -99,7 +99,8 @@ public class HdmiCecMessageValidator { // Messages related to the physical address. PhysicalAddressValidator physicalAddressValidator = new PhysicalAddressValidator(); addValidationInfo(Constants.MESSAGE_ACTIVE_SOURCE, - physicalAddressValidator, ADDR_ALL, ADDR_BROADCAST); + physicalAddressValidator, ADDR_ALL ^ (ADDR_RECORDER_1 | ADDR_RECORDER_2 + | ADDR_AUDIO_SYSTEM | ADDR_RECORDER_3), ADDR_BROADCAST); addValidationInfo(Constants.MESSAGE_INACTIVE_SOURCE, physicalAddressValidator, ADDR_NOT_UNREGISTERED, ADDR_DIRECT); addValidationInfo(Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS, diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java index ad1ecf1ad1c8e..a7fe64adf1ff8 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java @@ -149,31 +149,4 @@ public class ActiveSourceActionTest { assertThat(playbackDevice.getActiveSource().physicalAddress).isEqualTo(mPhysicalAddress); assertThat(playbackDevice.isActiveSource()).isTrue(); } - - @Test - public void audioDevice_sendsActiveSource_noMenuStatus() { - HdmiCecLocalDeviceAudioSystem audioDevice = new HdmiCecLocalDeviceAudioSystem( - mHdmiControlService); - audioDevice.init(); - mLocalDevices.add(audioDevice); - mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); - mTestLooper.dispatchAll(); - - HdmiCecFeatureAction action = new com.android.server.hdmi.ActiveSourceAction( - audioDevice, ADDR_TV); - audioDevice.addAndStartAction(action); - mTestLooper.dispatchAll(); - - HdmiCecMessage activeSource = - HdmiCecMessageBuilder.buildActiveSource( - audioDevice.getDeviceInfo().getLogicalAddress(), mPhysicalAddress); - HdmiCecMessage menuStatus = - HdmiCecMessageBuilder.buildReportMenuStatus( - audioDevice.getDeviceInfo().getLogicalAddress(), - ADDR_TV, - Constants.MENU_STATE_ACTIVATED); - - assertThat(mNativeWrapper.getResultMessages()).contains(activeSource); - assertThat(mNativeWrapper.getResultMessages()).doesNotContain(menuStatus); - } } diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java index c53a7a708cfd3..81cfdbee78317 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecMessageValidatorTest.java @@ -16,6 +16,11 @@ 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_RECORDER_1; +import static com.android.server.hdmi.Constants.ADDR_RECORDER_2; +import static com.android.server.hdmi.Constants.ADDR_RECORDER_3; import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_DESTINATION; import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_PARAMETER; import static com.android.server.hdmi.HdmiCecMessageValidator.ERROR_PARAMETER_LONG; @@ -38,7 +43,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import java.util.Arrays; import java.util.Collections; +import java.util.List; /** Tests for {@link com.android.server.hdmi.HdmiCecMessageValidator} class. */ @SmallTest @@ -640,6 +647,22 @@ public class HdmiCecMessageValidatorTest { assertMessageValidity("4F:80:12:00:50:50").isEqualTo(ERROR_PARAMETER); } + @Test + public void isValid_activeSource() { + // Only source devices should broadcast messages. + List nonSourceDevicesAddresses = Arrays.asList(ADDR_RECORDER_1, ADDR_RECORDER_2, + ADDR_AUDIO_SYSTEM, ADDR_RECORDER_3); + + for (int i = 0; i < ADDR_BROADCAST; ++i) { + String message = Integer.toHexString(i) + "F:82:10:00"; + if (nonSourceDevicesAddresses.contains(i)) { + assertMessageValidity(message).isEqualTo(ERROR_SOURCE); + } else { + assertMessageValidity(message).isEqualTo(OK); + } + } + } + private IntegerSubject assertMessageValidity(String message) { return assertThat(HdmiUtils.buildMessage(message).getValidationResult()); }