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

Commit 49f3e305 authored by Paul Colta's avatar Paul Colta
Browse files

HDMI: Invoke Vendor command listeners correctly

Test: atest HdmiControlServiceTest#multipleVendorCommandListeners_receiveCallback
Bug: 287889335
Change-Id: Ia5426685326573a52d2bd27f7223b8fc9f49c514
parent d1886c8e
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -3786,6 +3786,7 @@ public class HdmiControlService extends SystemService {
            if (mVendorCommandListenerRecords.isEmpty()) {
                return false;
            }
            boolean notifiedVendorCommandToListeners = false;
            for (VendorCommandListenerRecord record : mVendorCommandListenerRecords) {
                if (hasVendorId) {
                    int vendorId =
@@ -3798,12 +3799,12 @@ public class HdmiControlService extends SystemService {
                }
                try {
                    record.mListener.onReceived(srcAddress, destAddress, params, hasVendorId);
                    return true;
                    notifiedVendorCommandToListeners = true;
                } catch (RemoteException e) {
                    Slog.e(TAG, "Failed to notify vendor command reception", e);
                }
            }
            return false;
            return notifiedVendorCommandToListeners;
        }
    }

+27 −0
Original line number Diff line number Diff line
@@ -903,6 +903,33 @@ public class HdmiControlServiceTest {
        assertThat(vendorCmdListener.mVendorCommandCallbackReceived).isFalse();
    }

    @Test
    public void multipleVendorCommandListeners_receiveCallback() {
        int destAddress = mHdmiControlServiceSpy.playback().getDeviceInfo().getLogicalAddress();
        int sourceAddress = Constants.ADDR_TV;
        byte[] params = {0x00, 0x01, 0x02, 0x03};
        int vendorId = 0x123456;
        mHdmiControlServiceSpy.setPowerStatus(HdmiControlManager.POWER_STATUS_ON);

        VendorCommandListener vendorCmdListener =
                new VendorCommandListener(sourceAddress, destAddress, params, vendorId);
        VendorCommandListener secondVendorCmdListener =
                new VendorCommandListener(sourceAddress, destAddress, params, vendorId);
        mHdmiControlServiceSpy.addVendorCommandListener(vendorCmdListener, vendorId);
        mHdmiControlServiceSpy.addVendorCommandListener(secondVendorCmdListener, vendorId);
        mTestLooper.dispatchAll();

        HdmiCecMessage vendorCommandNoId =
                HdmiCecMessageBuilder.buildVendorCommand(sourceAddress, destAddress, params);
        mNativeWrapper.onCecMessage(vendorCommandNoId);
        mTestLooper.dispatchAll();
        assertThat(vendorCmdListener.mVendorCommandCallbackReceived).isTrue();
        assertThat(vendorCmdListener.mParamsCorrect).isTrue();

        assertThat(secondVendorCmdListener.mVendorCommandCallbackReceived).isTrue();
        assertThat(secondVendorCmdListener.mParamsCorrect).isTrue();
    }

    private static class VendorCommandListener extends IHdmiVendorCommandListener.Stub {
        boolean mVendorCommandCallbackReceived = false;
        boolean mParamsCorrect = false;