Merge "Disable device when it's removed or disabled." into lmp-dev
diff --git a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
index d8da80e..7abea36 100644
--- a/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
+++ b/core/java/android/hardware/hdmi/HdmiDeviceInfo.java
@@ -416,7 +416,8 @@
switch (mHdmiDeviceType) {
case HDMI_DEVICE_TYPE_CEC:
s.append("CEC: ");
- s.append("logical_address: ").append(mLogicalAddress).append(" ");
+ s.append("logical_address: ").append(String.format("0x%02X", mLogicalAddress));
+ s.append(" ");
s.append("device_type: ").append(mDeviceType).append(" ");
s.append("vendor_id: ").append(mVendorId).append(" ");
s.append("display_name: ").append(mDisplayName).append(" ");
@@ -424,8 +425,8 @@
break;
case HDMI_DEVICE_TYPE_MHL:
s.append("MHL: ");
- s.append("device_id: ").append(mDeviceId).append(" ");
- s.append("adopter_id: ").append(mAdopterId).append(" ");
+ s.append("device_id: ").append(String.format("0x%04X", mDeviceId)).append(" ");
+ s.append("adopter_id: ").append(String.format("0x%04X", mAdopterId)).append(" ");
break;
case HDMI_DEVICE_TYPE_HARDWARE:
@@ -434,7 +435,8 @@
default:
return "";
}
- s.append("physical_address: ").append(String.format("0x04X", mPhysicalAddress)).append(" ");
+ s.append("physical_address: ").append(String.format("0x%04X", mPhysicalAddress));
+ s.append(" ");
s.append("port_id: ").append(mPortId);
return s.toString();
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 126a56d..850ff10 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -178,7 +178,6 @@
invokeCallback(callback, HdmiControlManager.RESULT_TARGET_NOT_AVAILABLE);
return;
}
- // TODO: Handle MHL device
int targetAddress = targetDevice.getLogicalAddress();
ActiveSource active = getActiveSource();
if (active.isValid() && targetAddress == active.logicalAddress) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 4f4c723..8bbc404 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -1005,6 +1005,17 @@
invokeCallback(callback, HdmiControlManager.RESULT_SOURCE_NOT_AVAILABLE);
return;
}
+ if (mMhlController != null) {
+ HdmiMhlLocalDevice device = mMhlController.getLocalDeviceById(deviceId);
+ if (device != null) {
+ // Upon selecting MHL device, we send RAP[Content On] to wake up
+ // the connected mobile device, start routing control to switch ports.
+ // callback is handled by MHL action.
+ device.turnOn(callback);
+ tv.doManualPortSwitching(device.getInfo().getPortId(), null);
+ return;
+ }
+ }
tv.deviceSelect(deviceId, callback);
}
});
diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
index 425eff3..fa991c2 100644
--- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java
+++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java
@@ -958,7 +958,7 @@
Object obj = null;
switch (status) {
case HdmiControlManager.DEVICE_EVENT_ADD_DEVICE: {
- if (!mHdmiDeviceList.contains(deviceInfo)) {
+ if (findHdmiDeviceInfo(deviceInfo.getId()) == null) {
mHdmiDeviceList.add(deviceInfo);
} else {
Slog.w(TAG, "The list already contains " + deviceInfo + "; ignoring.");
@@ -969,7 +969,8 @@
break;
}
case HdmiControlManager.DEVICE_EVENT_REMOVE_DEVICE: {
- if (!mHdmiDeviceList.remove(deviceInfo)) {
+ HdmiDeviceInfo originalDeviceInfo = findHdmiDeviceInfo(deviceInfo.getId());
+ if (!mHdmiDeviceList.remove(originalDeviceInfo)) {
Slog.w(TAG, "The list doesn't contain " + deviceInfo + "; ignoring.");
return;
}
@@ -978,13 +979,14 @@
break;
}
case HdmiControlManager.DEVICE_EVENT_UPDATE_DEVICE: {
- if (!mHdmiDeviceList.remove(deviceInfo)) {
+ HdmiDeviceInfo originalDeviceInfo = findHdmiDeviceInfo(deviceInfo.getId());
+ if (!mHdmiDeviceList.remove(originalDeviceInfo)) {
Slog.w(TAG, "The list doesn't contain " + deviceInfo + "; ignoring.");
return;
}
mHdmiDeviceList.add(deviceInfo);
messageType = ListenerHandler.HDMI_DEVICE_UPDATED;
- String inputId = mHdmiInputIdMap.get(deviceInfo.getLogicalAddress());
+ String inputId = mHdmiInputIdMap.get(deviceInfo.getId());
SomeArgs args = SomeArgs.obtain();
args.arg1 = inputId;
args.arg2 = deviceInfo;
@@ -1001,6 +1003,15 @@
}
}
}
+
+ private HdmiDeviceInfo findHdmiDeviceInfo(int id) {
+ for (HdmiDeviceInfo info : mHdmiDeviceList) {
+ if (info.getId() == id) {
+ return info;
+ }
+ }
+ return null;
+ }
}
private final class HdmiSystemAudioModeChangeListener extends