summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author an.xi <an.xi@amlogic.com> 2024-09-17 17:09:09 +0800
committer an.xi <an.xi@amlogic.com> 2024-09-20 10:26:48 +0800
commitcaba2c45821faae403ea9b8bd50aa50307e5880d (patch)
tree47d2fba8c1b716fee08a6f1f57d9129fcb866053
parent850c53840b8e3a12e3fa815d6afcc07ea0c6e625 (diff)
cec: TV could fail to handle one touch play [1/1]
PD#SWPL-185469 BUG:367525039 Problem: If the <Active Source> message is received before TV receives the SCREEN_ON broadcast, this message will be processed directly in ActiveSourceHandler and results in a failure to switch source. The root cause is that the mTvInputs variable is not cleared in HdmiCecLocalDevice#disableDevice, since the tv input callback is cleared before the clearing of hdmi device info list. Besides, if the TV device adds the source device's HdmiDeviceInfo with only <Active Source> message, it could fail to add the related TvInputInfo to TvInput Framework. Solution: 1.Clear the tv inputs saved in local tv device during standby. 2.Set valid port id to the HdmiDeviceInfo created by <Active Source> message. Verify: Loki Change-Id: I08747fd2412eaacc6fedee9b0940d2c7c412a7d1 Signed-off-by: an.xi <an.xi@amlogic.com>
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java2
1 files changed, 2 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 978a8c0e1a45..2000eb705247 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -249,6 +249,7 @@ public final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
.setDisplayName(HdmiUtils.getDefaultDeviceName(source))
.setDeviceType(deviceTypes.get(0))
.setVendorId(Constants.VENDOR_ID_UNKNOWN)
+ .setPortId(mService.getHdmiCecNetwork().physicalAddressToPortId(physicalAddress))
.build();
mService.getHdmiCecNetwork().addCecDevice(newDevice);
}
@@ -1398,6 +1399,7 @@ public final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
protected void disableDevice(boolean initiatedByCec, PendingActionClearedCallback callback) {
assertRunOnServiceThread();
mService.unregisterTvInputCallback(mTvInputCallback);
+ mTvInputs.clear();
// Remove any repeated working actions.
// HotplugDetectionAction will be reinstated during the wake up process.
// HdmiControlService.onWakeUp() -> initializeLocalDevices() ->