Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b157e05 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 4813226 from 7dfa2ab2 to pi-release

Change-Id: I4e51f23b5b7aa9e3466f843f87cf03ae06a29300
parents e5edc0e6 7dfa2ab2
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -1915,12 +1915,28 @@ public class CallsManager extends Call.ListenerBase
            if (canHold(activeCall)) {
                activeCall.hold();
                return true;
            } else if (supportsHold(call)) {
            } else if (supportsHold(activeCall)
                    && activeCall.getConnectionService() == call.getConnectionService()) {

                // Handle the case where the active call and the new call are from the same CS, and
                // the currently active call supports hold but cannot currently be held.
                // In this case we'll look for the other held call for this connectionService and
                // disconnect it prior to holding the active call.
                // E.g.
                // Call A - Held   (Supports hold, can't hold)
                // Call B - Active (Supports hold, can't hold)
                // Call C - Incoming
                // Here we need to disconnect A prior to holding B so that C can be answered.
                // This case is driven by telephony requirements ultimately.
                Call heldCall = getHeldCallByConnectionService(call.getConnectionService());
                if (heldCall != null) {
                    heldCall.disconnect();
                    Log.i(this, "Disconnecting held call %s before holding active call.", heldCall);
                    Log.i(this, "holdActiveCallForNewCall: Disconnect held call %s before "
                                    + "holding active call %s.",
                            heldCall.getId(), activeCall.getId());
                }
                Log.i(this, "holdActiveCallForNewCall: Holding active %s before making %s active.",
                        activeCall.getId(), call.getId());
                activeCall.hold();
                return true;
            } else {
@@ -1928,6 +1944,8 @@ public class CallsManager extends Call.ListenerBase
                // service, then disconnect it, otherwise allow the connection service to
                // figure out the right states.
                if (activeCall.getConnectionService() != call.getConnectionService()) {
                    Log.i(this, "holdActiveCallForNewCall: disconnecting %s so that %s can be "
                            + "made active.", activeCall.getId(), call.getId());
                    activeCall.disconnect();
                }
            }