Move call-related SystemAPIs to TelecommManager.  (2/3)

Bug: 15672803
Change-Id: I46e448fe93a9c5b4ae013e8b2fd6f0ce89b94e69
diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 26f627f..8ccc0e3 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -30,6 +30,9 @@
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableList;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
@@ -588,22 +591,11 @@
     }
 
     boolean hasActiveOrHoldingCall() {
-        for (Call call : mCalls) {
-            CallState state = call.getState();
-            if (state == CallState.ACTIVE || state == CallState.ON_HOLD) {
-                return true;
-            }
-        }
-        return false;
+        return getFirstCallWithState(CallState.ACTIVE, CallState.ON_HOLD) != null;
     }
 
     boolean hasRingingCall() {
-        for (Call call : mCalls) {
-            if (call.getState() == CallState.RINGING) {
-                return true;
-            }
-        }
-        return false;
+        return getFirstCallWithState(CallState.RINGING) != null;
     }
 
     boolean onMediaButton(int type) {
@@ -658,8 +650,13 @@
      * priority order so that any call with the first state will be returned before any call with
      * states listed later in the parameter list.
      */
-    private Call getFirstCallWithState(CallState... states) {
+    Call getFirstCallWithState(CallState... states) {
         for (CallState currentState : states) {
+            // check the foreground first
+            if (mForegroundCall != null && mForegroundCall.getState() == currentState) {
+                return mForegroundCall;
+            }
+
             for (Call call : mCalls) {
                 if (currentState == call.getState()) {
                     return call;