OSDN Git Service

CEC: Make sure CEC switch info is always updated
authorJinsuk Kim <jinsukkim@google.com>
Mon, 11 Aug 2014 02:56:58 +0000 (11:56 +0900)
committerJinsuk Kim <jinsukkim@google.com>
Mon, 11 Aug 2014 22:54:58 +0000 (07:54 +0900)
The CEC switch information was not updated as expected if
Device Discovery action is in progress. Refactored to have the
update routine gets called regardless of the presence of action.

Conflicts:
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java

Bug: 16931883
Change-Id: I629e8b646bef54599c1a706bf1c797ecebf8616b

services/core/java/com/android/server/hdmi/DeviceDiscoveryAction.java
services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java

index d67b8f1..2ec9778 100644 (file)
@@ -256,6 +256,9 @@ final class DeviceDiscoveryAction extends HdmiCecFeatureAction {
         current.mPortId = getPortId(current.mPhysicalAddress);
         current.mDeviceType = params[2] & 0xFF;
 
+        tv().updateCecSwitchInfo(current.mLogicalAddress, current.mDeviceType,
+                    current.mPhysicalAddress);
+
         increaseProcessedDeviceCount();
         checkAndProceedStage();
     }
index 4810650..2ff657f 100644 (file)
@@ -436,18 +436,9 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
         assertRunOnServiceThread();
         int path = HdmiUtils.twoBytesToInt(message.getParams());
         int address = message.getSource();
+        int type = message.getParams()[2];
 
-        // Build cec switch list with pure CEC switch, AVR.
-        if (address == Constants.ADDR_UNREGISTERED) {
-            int type = message.getParams()[2];
-            if (type == HdmiDeviceInfo.DEVICE_PURE_CEC_SWITCH) {
-                mCecSwitches.add(path);
-                updateSafeDeviceInfoList();
-                return true;  // Pure switch does not need further processing. Return here.
-            } else if (type == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
-                mCecSwitches.add(path);
-            }
-        }
+        if (updateCecSwitchInfo(address, type, path)) return true;
 
         // Ignore if [Device Discovery Action] is going on.
         if (hasAction(DeviceDiscoveryAction.class)) {
@@ -462,6 +453,19 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
         return true;
     }
 
+    boolean updateCecSwitchInfo(int address, int type, int path) {
+        if (address == Constants.ADDR_UNREGISTERED
+                && type == HdmiDeviceInfo.DEVICE_PURE_CEC_SWITCH) {
+            mCecSwitches.add(path);
+            updateSafeDeviceInfoList();
+            return true;  // Pure switch does not need further processing. Return here.
+        }
+        if (type == HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) {
+            mCecSwitches.add(path);
+        }
+        return false;
+    }
+
     void startNewDeviceAction(ActiveSource activeSource) {
         for (NewDeviceAction action : getActions(NewDeviceAction.class)) {
             // If there is new device action which has the same logical address and path
@@ -1071,7 +1075,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice {
     }
 
     private void invokeDeviceEventListener(HdmiDeviceInfo info, int status) {
-        if (!hideDevicesBehindLegacySwitch(info)) {
+        if (info.isSourceType() && !hideDevicesBehindLegacySwitch(info)) {
             mService.invokeDeviceEventListeners(info, status);
         }
     }