Loading services/core/java/com/android/server/hdmi/HdmiControlService.java +3 −2 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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; } } Loading services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +27 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
services/core/java/com/android/server/hdmi/HdmiControlService.java +3 −2 Original line number Diff line number Diff line Loading @@ -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 = Loading @@ -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; } } Loading
services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +27 −0 Original line number Diff line number Diff line Loading @@ -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; Loading