summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/hdmi/ActiveSourceHandler.java7
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java30
2 files changed, 17 insertions, 20 deletions
diff --git a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
index 9593a9c..59d5605 100644
--- a/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
+++ b/services/core/java/com/android/server/hdmi/ActiveSourceHandler.java
@@ -89,11 +89,8 @@ final class ActiveSourceHandler {
tv.updateActiveSource(current);
invokeCallback(HdmiControlManager.RESULT_SUCCESS);
} else {
- HdmiCecMessage routingChange = HdmiCecMessageBuilder.buildRoutingChange(
- getSourceAddress(), newActive.physicalAddress, current.physicalAddress);
- mService.sendCecCommand(routingChange);
- tv.addAndStartAction(
- new RoutingControlAction(tv, current.physicalAddress, true, mCallback));
+ tv.startRoutingControl(newActive.physicalAddress, current.physicalAddress, true,
+ mCallback);
}
}
}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index ec38124..3f78949 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -362,11 +362,22 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
return;
}
int newPath = mService.portIdToPath(portId);
+ startRoutingControl(oldPath, newPath, true, callback);
+ }
+
+ @ServiceThreadOnly
+ void startRoutingControl(int oldPath, int newPath, boolean queryDevicePowerStatus,
+ IHdmiControlCallback callback) {
+ assertRunOnServiceThread();
+ if (oldPath == newPath) {
+ return;
+ }
HdmiCecMessage routingChange =
HdmiCecMessageBuilder.buildRoutingChange(mAddress, oldPath, newPath);
mService.sendCecCommand(routingChange);
removeAction(RoutingControlAction.class);
- addAndStartAction(new RoutingControlAction(this, newPath, true, callback));
+ addAndStartAction(
+ new RoutingControlAction(this, newPath, queryDevicePowerStatus, callback));
}
@ServiceThreadOnly
@@ -587,12 +598,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
private boolean handleNewDeviceAtTheTailOfActivePath(int path) {
// Seq #22
if (isTailOfActivePath(path, getActivePath())) {
- removeAction(RoutingControlAction.class);
int newPath = mService.portIdToPath(getActivePortId());
setActivePath(newPath);
- mService.sendCecCommand(HdmiCecMessageBuilder.buildRoutingChange(
- mAddress, getActivePath(), newPath));
- addAndStartAction(new RoutingControlAction(this, newPath, false, null));
+ startRoutingControl(getActivePath(), newPath, false, null);
return true;
}
return false;
@@ -1346,12 +1354,8 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
assertRunOnServiceThread();
// Seq #23
if (isTailOfActivePath(path, getActivePath())) {
- removeAction(RoutingControlAction.class);
int newPath = mService.portIdToPath(getActivePortId());
- mService.sendCecCommand(HdmiCecMessageBuilder.buildRoutingChange(
- mAddress, getActivePath(), newPath));
- mActiveSource.invalidate();
- addAndStartAction(new RoutingControlAction(this, getActivePath(), true, null));
+ startRoutingControl(getActivePath(), newPath, true, null);
}
}
@@ -1367,13 +1371,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
// Seq #24
if (getActivePortId() != Constants.INVALID_PORT_ID) {
if (!routingForBootup && !isProhibitMode()) {
- removeAction(RoutingControlAction.class);
int newPath = mService.portIdToPath(getActivePortId());
setActivePath(newPath);
- mService.sendCecCommand(HdmiCecMessageBuilder.buildRoutingChange(mAddress,
- getActivePath(), newPath));
- addAndStartAction(new RoutingControlAction(this, getActivePortId(),
- routingForBootup, null));
+ startRoutingControl(getActivePath(), newPath, routingForBootup, null);
}
} else {
int activePath = mService.getPhysicalAddress();