CEC: Generate hotplug events upon adding listener
CEC HAL does not report initial connection state of the HDMI port but does it only when the state is updated. For the listeners which want to get the initial state of the ports, this CL generates hotplug event per each port when a new listener is added. Bug: 18488079 Change-Id: I6915a96e3c14ee0db1bfb6912ab77d3ea1bd2f07
This commit is contained in:
@@ -993,6 +993,19 @@ public final class HdmiControlService extends SystemService {
|
||||
mHotplugEventListenerRecords.remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (!(obj instanceof HotplugEventListenerRecord)) return false;
|
||||
if (obj == this) return true;
|
||||
HotplugEventListenerRecord other = (HotplugEventListenerRecord) obj;
|
||||
return other.mListener == this.mListener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return mListener.hashCode();
|
||||
}
|
||||
}
|
||||
|
||||
private final class DeviceEventListenerRecord implements IBinder.DeathRecipient {
|
||||
@@ -1549,8 +1562,8 @@ public final class HdmiControlService extends SystemService {
|
||||
source.queryDisplayStatus(callback);
|
||||
}
|
||||
|
||||
private void addHotplugEventListener(IHdmiHotplugEventListener listener) {
|
||||
HotplugEventListenerRecord record = new HotplugEventListenerRecord(listener);
|
||||
private void addHotplugEventListener(final IHdmiHotplugEventListener listener) {
|
||||
final HotplugEventListenerRecord record = new HotplugEventListenerRecord(listener);
|
||||
try {
|
||||
listener.asBinder().linkToDeath(record, 0);
|
||||
} catch (RemoteException e) {
|
||||
@@ -1560,6 +1573,24 @@ public final class HdmiControlService extends SystemService {
|
||||
synchronized (mLock) {
|
||||
mHotplugEventListenerRecords.add(record);
|
||||
}
|
||||
|
||||
// Inform the listener of the initial state of each HDMI port by generating
|
||||
// hotplug events.
|
||||
runOnServiceThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
synchronized (mLock) {
|
||||
if (!mHotplugEventListenerRecords.contains(record)) return;
|
||||
}
|
||||
for (HdmiPortInfo port : mPortInfo) {
|
||||
HdmiHotplugEvent event = new HdmiHotplugEvent(port.getId(),
|
||||
mCecController.isConnected(port.getId()));
|
||||
synchronized (mLock) {
|
||||
invokeHotplugEventListenerLocked(listener, event);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void removeHotplugEventListener(IHdmiHotplugEventListener listener) {
|
||||
|
||||
Reference in New Issue
Block a user