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;
}