CEC: Fix a regression bug
The HdmiControlService.getActiveSource() has a regression (exception) when calling getDeviceInfoByPath since method should be called on a service thread. Introduced a method that can be invoked safely from the main thread. Bug: 19170884 Change-Id: I393161e08c916270faf46147a97076bc573b808f
This commit is contained in:
@@ -1455,6 +1455,25 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the {@link HdmiDeviceInfo} instance whose physical address matches
|
||||||
|
* the given routing path. This is the version accessible safely from threads
|
||||||
|
* other than service thread.
|
||||||
|
*
|
||||||
|
* @param path routing path or physical address
|
||||||
|
* @return {@link HdmiDeviceInfo} if the matched info is found; otherwise null
|
||||||
|
*/
|
||||||
|
HdmiDeviceInfo getSafeDeviceInfoByPath(int path) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
for (HdmiDeviceInfo info : mSafeAllDeviceInfos) {
|
||||||
|
if (info.getPhysicalAddress() == path) {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether a device of the specified physical address and logical address exists
|
* Whether a device of the specified physical address and logical address exists
|
||||||
* in a device info list. However, both are minimal condition and it could
|
* in a device info list. However, both are minimal condition and it could
|
||||||
|
|||||||
@@ -1196,7 +1196,7 @@ public final class HdmiControlService extends SystemService {
|
|||||||
}
|
}
|
||||||
int activePath = tv.getActivePath();
|
int activePath = tv.getActivePath();
|
||||||
if (activePath != HdmiDeviceInfo.PATH_INVALID) {
|
if (activePath != HdmiDeviceInfo.PATH_INVALID) {
|
||||||
HdmiDeviceInfo info = tv.getDeviceInfoByPath(activePath);
|
HdmiDeviceInfo info = tv.getSafeDeviceInfoByPath(activePath);
|
||||||
return (info != null) ? info : new HdmiDeviceInfo(activePath, tv.getActivePortId());
|
return (info != null) ? info : new HdmiDeviceInfo(activePath, tv.getActivePortId());
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
Reference in New Issue
Block a user