summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Paul Colța <donpaul@google.com> 2023-12-15 09:00:14 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-12-15 09:00:14 +0000
commitdac23fc89d04c7d469f2cd511e3d3fc76dcc3dcd (patch)
tree33a596e278ccba650e1a595b7f77a6316818523d
parent4a81d4c3ed354c75fda642df15bcfc1316a61f0b (diff)
parent652248646d0212dc53f376ff5e34aa599a214643 (diff)
Merge "HDMI: Avoid NPE on Hotplug In" into main
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystem.java3
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceSource.java3
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java3
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java9
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;