Loading services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -577,6 +577,12 @@ public final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @Constants.HandleMessageResult @Constants.HandleMessageResult protected int handleReportPhysicalAddress(HdmiCecMessage message) { protected int handleReportPhysicalAddress(HdmiCecMessage message) { super.handleReportPhysicalAddress(message); super.handleReportPhysicalAddress(message); // Ignore <Report Physical Address> while DeviceDiscoveryAction is in progress to avoid // starting a NewDeviceAction which might interfere in creating the list of known devices. if (hasAction(DeviceDiscoveryAction.class)) { return Constants.HANDLED; } int path = HdmiUtils.twoBytesToInt(message.getParams()); int path = HdmiUtils.twoBytesToInt(message.getParams()); int address = message.getSource(); int address = message.getSource(); int type = message.getParams()[2]; int type = message.getParams()[2]; Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +29 −0 Original line number Original line Diff line number Diff line Loading @@ -1878,4 +1878,33 @@ public class HdmiCecLocalDeviceTvTest { assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mPowerManager.isInteractive()).isTrue(); } } @Test public void handleReportPhysicalAddress_DeviceDiscoveryActionInProgress_noNewDeviceAction() { mHdmiControlService.getHdmiCecNetwork().clearDeviceList(); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.clearResultMessages(); mTestLooper.dispatchAll(); HdmiCecMessage reportPhysicalAddressFromPlayback1 = HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( ADDR_PLAYBACK_1, 0x1000, HdmiDeviceInfo.DEVICE_PLAYBACK); HdmiCecMessage reportPhysicalAddressFromPlayback2 = HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( ADDR_PLAYBACK_2, 0x2000, HdmiDeviceInfo.DEVICE_PLAYBACK); HdmiCecMessage giveOsdName = HdmiCecMessageBuilder.buildGiveOsdNameCommand( ADDR_TV, ADDR_PLAYBACK_2); // Skip state waiting for <Report Physical Address> for DeviceDiscoveryAction s.t. message // can be dispatched to local device TV. mNativeWrapper.onCecMessage(reportPhysicalAddressFromPlayback1); mNativeWrapper.clearResultMessages(); mTestLooper.dispatchAll(); mNativeWrapper.onCecMessage(reportPhysicalAddressFromPlayback2); mTestLooper.dispatchAll(); // NewDeviceAction did not start and <Give OSD Name> was not sent. assertThat(mNativeWrapper.getResultMessages()).doesNotContain(giveOsdName); } } } Loading
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +6 −0 Original line number Original line Diff line number Diff line Loading @@ -577,6 +577,12 @@ public final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { @Constants.HandleMessageResult @Constants.HandleMessageResult protected int handleReportPhysicalAddress(HdmiCecMessage message) { protected int handleReportPhysicalAddress(HdmiCecMessage message) { super.handleReportPhysicalAddress(message); super.handleReportPhysicalAddress(message); // Ignore <Report Physical Address> while DeviceDiscoveryAction is in progress to avoid // starting a NewDeviceAction which might interfere in creating the list of known devices. if (hasAction(DeviceDiscoveryAction.class)) { return Constants.HANDLED; } int path = HdmiUtils.twoBytesToInt(message.getParams()); int path = HdmiUtils.twoBytesToInt(message.getParams()); int address = message.getSource(); int address = message.getSource(); int type = message.getParams()[2]; int type = message.getParams()[2]; Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +29 −0 Original line number Original line Diff line number Diff line Loading @@ -1878,4 +1878,33 @@ public class HdmiCecLocalDeviceTvTest { assertThat(mPowerManager.isInteractive()).isTrue(); assertThat(mPowerManager.isInteractive()).isTrue(); } } @Test public void handleReportPhysicalAddress_DeviceDiscoveryActionInProgress_noNewDeviceAction() { mHdmiControlService.getHdmiCecNetwork().clearDeviceList(); mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS); mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); mNativeWrapper.clearResultMessages(); mTestLooper.dispatchAll(); HdmiCecMessage reportPhysicalAddressFromPlayback1 = HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( ADDR_PLAYBACK_1, 0x1000, HdmiDeviceInfo.DEVICE_PLAYBACK); HdmiCecMessage reportPhysicalAddressFromPlayback2 = HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( ADDR_PLAYBACK_2, 0x2000, HdmiDeviceInfo.DEVICE_PLAYBACK); HdmiCecMessage giveOsdName = HdmiCecMessageBuilder.buildGiveOsdNameCommand( ADDR_TV, ADDR_PLAYBACK_2); // Skip state waiting for <Report Physical Address> for DeviceDiscoveryAction s.t. message // can be dispatched to local device TV. mNativeWrapper.onCecMessage(reportPhysicalAddressFromPlayback1); mNativeWrapper.clearResultMessages(); mTestLooper.dispatchAll(); mNativeWrapper.onCecMessage(reportPhysicalAddressFromPlayback2); mTestLooper.dispatchAll(); // NewDeviceAction did not start and <Give OSD Name> was not sent. assertThat(mNativeWrapper.getResultMessages()).doesNotContain(giveOsdName); } } }