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

Commit d4aa23fb authored by Paul Colța's avatar Paul Colța Committed by Android (Google) Code Review
Browse files

Merge "HDMI: Invoke Vendor command listeners correctly"

parents ce011d2a 49f3e305
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -3819,6 +3819,7 @@ public class HdmiControlService extends SystemService {
            if (mVendorCommandListenerRecords.isEmpty()) {
                return false;
            }
            boolean notifiedVendorCommandToListeners = false;
            for (VendorCommandListenerRecord record : mVendorCommandListenerRecords) {
                if (hasVendorId) {
                    int vendorId =
@@ -3831,12 +3832,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;