Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af64d587 authored by Paul Colta's avatar Paul Colta Committed by Gerrit Code Review
Browse files

Merge "HDMI: Do not start NewDeviceAction while DeviceDiscoveryAction is running" into main

parents 545573aa 2b6db63e
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -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];
+29 −0
Original line number Original line Diff line number Diff line
@@ -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);
    }
}
}