CEC: Fix two bugs

- <Routing Change> goes out with invalid parameter (F.F.F.F) for
  old path if the active source/path is not set. Should have been
  set to internal path (0.0.0.0)
- <User Control Pressed> was still sent when active source was not
  set. Fixed to discard it.

Bug: 16966486
Bug: 16965446
Change-Id: I5abb062be42c17514b3ed7ac930d7a3535fc9132
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
index 4810650..334107e 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java
@@ -309,7 +309,8 @@
         // TODO: Return immediately if the operation is triggered by <Text/Image View On>
         // and this is the first notification about the active input after power-on
         // (switch to HDMI didn't happen so far but is expected to happen soon).
-        int oldPath = mService.portIdToPath(getActivePortId());
+        int oldPath = getActivePortId() != Constants.INVALID_PORT_ID
+                ? mService.portIdToPath(getActivePortId()) : getDeviceInfo().getPhysicalAddress();
         int newPath = mService.portIdToPath(portId);
         HdmiCecMessage routingChange =
                 HdmiCecMessageBuilder.buildRoutingChange(mAddress, oldPath, newPath);
@@ -336,11 +337,11 @@
         if (!action.isEmpty()) {
             action.get(0).processKeyEvent(keyCode, isPressed);
         } else {
-            if (isPressed) {
+            if (isPressed && getActiveSource().isValid()) {
                 int logicalAddress = getActiveSource().logicalAddress;
                 addAndStartAction(new SendKeyAction(this, logicalAddress, keyCode));
             } else {
-                Slog.w(TAG, "Discard key release event");
+                Slog.w(TAG, "Discard key event: " + keyCode + " pressed:" + isPressed);
             }
         }
     }