From 6ad7cbde22fe9752082ce01c9b9be213b07afefc Mon Sep 17 00:00:00 2001 From: Jinsuk Kim Date: Tue, 6 Jan 2015 11:30:56 +0900 Subject: [PATCH] CEC: Make deviceSelect work for MHL device MHL device works on hotplug but not when API deviceSelect is invoked to select it due to a bug not finding the right MHL device instance. This CL rectifies it by searching for not only CEC but MHL devices attached to TV. Bug: 18909552 Change-Id: I4df1ead836090eb3a7476b7738be47a6970edb7d --- .../com/android/server/hdmi/HdmiCecLocalDeviceTv.java | 8 ++++++-- .../com/android/server/hdmi/HdmiControlService.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index ed7cebbc1b031..90dbd17652007 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -326,8 +326,12 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { ActiveSource activeSource = getActiveSource(); HdmiDeviceInfo info = getCecDeviceInfo(activeSource.logicalAddress); if (info == null) { - info = new HdmiDeviceInfo(Constants.ADDR_INVALID, path, getActivePortId(), - HdmiDeviceInfo.DEVICE_RESERVED, 0, null); + info = mService.getDeviceInfoByPort(getActivePortId()); + if (info == null) { + // No CEC/MHL device is present at the port. Attempt to switch to + // the hardware port itself for non-CEC devices that may be connected. + info = new HdmiDeviceInfo(path, getActivePortId()); + } } mService.invokeInputChangeListener(info); } diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java index 8ce6caf30c845..e8cb7204e5f69 100644 --- a/services/core/java/com/android/server/hdmi/HdmiControlService.java +++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java @@ -672,6 +672,16 @@ public final class HdmiControlService extends SystemService { return tv() == null ? null : tv().getCecDeviceInfo(logicalAddress); } + @ServiceThreadOnly + HdmiDeviceInfo getDeviceInfoByPort(int port) { + assertRunOnServiceThread(); + HdmiMhlLocalDeviceStub info = mMhlController.getLocalDevice(port); + if (info != null) { + return info.getInfo(); + } + return null; + } + /** * Returns version of CEC. */