diff options
4 files changed, 15 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java index b3aa351d69d7..70993ca3e21b 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java @@ -201,7 +201,8 @@ public class HdmiCecLocalDeviceAudioSystem extends HdmiCecLocalDeviceSource { if (WAKE_ON_HOTPLUG && connected) { mService.wakeUp(); } - if (mService.getPortInfo(portId).getType() == HdmiPortInfo.PORT_OUTPUT) { + HdmiPortInfo portInfo = mService.getPortInfo(portId); + if (portInfo != null && portInfo.getType() == HdmiPortInfo.PORT_OUTPUT) { mCecMessageCache.flushAll(); if (!connected) { if (isSystemAudioActivated()) { diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java index 7e8a2cc6d835..29303aab6fa9 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java @@ -92,7 +92,8 @@ abstract class HdmiCecLocalDeviceSource extends HdmiCecLocalDevice { @ServiceThreadOnly void onHotplug(int portId, boolean connected) { assertRunOnServiceThread(); - if (mService.getPortInfo(portId).getType() == HdmiPortInfo.PORT_OUTPUT) { + HdmiPortInfo portInfo = mService.getPortInfo(portId); + if (portInfo != null && portInfo.getType() == HdmiPortInfo.PORT_OUTPUT) { mCecMessageCache.flushAll(); } // We'll not invalidate the active source on the hotplug event to pass CETC 11.2.2-2 ~ 3. diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index b3926fd1b5ba..92537064f766 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -1783,8 +1783,9 @@ public class HdmiControlService extends SystemService { // initPortInfo at hotplug event. mHdmiCecNetwork.initPortInfo(); + HdmiPortInfo portInfo = getPortInfo(portId); if (connected && !isTvDevice() - && getPortInfo(portId).getType() == HdmiPortInfo.PORT_OUTPUT) { + && portInfo != null && portInfo.getType() == HdmiPortInfo.PORT_OUTPUT) { ArrayList<HdmiCecLocalDevice> localDevices = new ArrayList<>(); for (int type : getCecLocalDeviceTypes()) { HdmiCecLocalDevice localDevice = mHdmiCecNetwork.getLocalDevice(type); diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java index 708ee352a8c9..99fa30c588db 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java @@ -1706,6 +1706,15 @@ public class HdmiControlServiceTest { verify(mHdmiControlServiceSpy, times(1)).startArcAction(eq(false), any()); } + @Test + public void onHotplugIn_invalidPortId_noAddressAllocation() { + mHdmiControlServiceSpy.onHotplug(-1, true); + mTestLooper.dispatchAll(); + + verify(mHdmiControlServiceSpy, times(0)) + .allocateLogicalAddress(any(), eq(INITIATED_BY_HOTPLUG)); + } + protected static class MockPlaybackDevice extends HdmiCecLocalDevicePlayback { private boolean mCanGoToStandby; |