Fix a bug where conference call does not automatically resume.

The scenario is a background conference call and a foreground call
in dialing state. When user cancels the foreground call, the
background conference call is not automically resumed. This is
because the logic for making a held call as the foreground call
depends on there being only one call in the list of calls
maintained by CallsManager. However, in a conference scenario there
is more than one call object which are children of a top level
conference call. The fix is to check the number of top level calls
in held state.

Change-Id: I4092e8c38ac6217002ef426d7674f8a6e4c837ab
CRs-Fixed: 946284
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index ef9793a..c383745 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -1313,6 +1313,16 @@
         return count;
     }
 
+    int getNumTopLevelCalls() {
+        int count = 0;
+        for (Call call : mCalls) {
+            if (call.getParentCall() == null) {
+                count++;
+            }
+        }
+        return count;
+    }
+
     Call getOutgoingCall() {
         return getFirstCallWithState(OUTGOING_CALL_STATES);
     }
@@ -1582,7 +1592,7 @@
                 }
 
                 // If only call in call list is held call it's also a foreground call
-                if (mCalls.size() == 1 && call.getState() == CallState.ON_HOLD) {
+                if (getNumTopLevelCalls() == 1 && call.getState() == CallState.ON_HOLD) {
                     newForegroundCall = call;
                 }
 
@@ -1615,7 +1625,7 @@
                 }
 
                 // If only call in call list is held call it's also a foreground call
-                if (mCalls.size() == 1 && call.getState() == CallState.ON_HOLD) {
+                if (getNumTopLevelCalls() == 1 && call.getState() == CallState.ON_HOLD) {
                     newForegroundCall = call;
                 }