Loading telephony/java/com/android/internal/telephony/sip/SipPhone.java +20 −3 Original line number Diff line number Diff line Loading @@ -481,7 +481,12 @@ public class SipPhone extends SipPhoneBase { void merge(SipCall that) throws CallStateException { AudioGroup audioGroup = getAudioGroup(); for (Connection c : that.connections) { // copy to an array to avoid concurrent modification as connections // in that.connections will be removed in add(SipConnection). Connection[] cc = that.connections.toArray( new Connection[that.connections.size()]); for (Connection c : cc) { SipConnection conn = (SipConnection) c; add(conn); if (conn.getState() == Call.State.HOLDING) { Loading Loading @@ -798,7 +803,9 @@ public class SipPhone extends SipPhoneBase { @Override public void separate() throws CallStateException { synchronized (SipPhone.class) { SipCall call = (SipCall) SipPhone.this.getBackgroundCall(); SipCall call = (getPhone() == SipPhone.this) ? (SipCall) SipPhone.this.getBackgroundCall() : (SipCall) SipPhone.this.getForegroundCall(); if (call.getState() != Call.State.IDLE) { throw new CallStateException( "cannot put conn back to a call in non-idle state: " Loading @@ -808,10 +815,20 @@ public class SipPhone extends SipPhoneBase { + mPeer.getUriString() + " from " + mOwner + " back to " + call); // separate the AudioGroup and connection from the original call Phone originalPhone = getPhone(); AudioGroup audioGroup = call.getAudioGroup(); // may be null call.add(this); mSipAudioCall.setAudioGroup(audioGroup); call.hold(); // put the original call to bg; and the separated call becomes // fg if it was in bg originalPhone.switchHoldingAndActive(); // start audio and notify the phone app of the state change call = (SipCall) SipPhone.this.getForegroundCall(); mSipAudioCall.startAudio(); call.onConnectionStateChanged(this); } } Loading Loading
telephony/java/com/android/internal/telephony/sip/SipPhone.java +20 −3 Original line number Diff line number Diff line Loading @@ -481,7 +481,12 @@ public class SipPhone extends SipPhoneBase { void merge(SipCall that) throws CallStateException { AudioGroup audioGroup = getAudioGroup(); for (Connection c : that.connections) { // copy to an array to avoid concurrent modification as connections // in that.connections will be removed in add(SipConnection). Connection[] cc = that.connections.toArray( new Connection[that.connections.size()]); for (Connection c : cc) { SipConnection conn = (SipConnection) c; add(conn); if (conn.getState() == Call.State.HOLDING) { Loading Loading @@ -798,7 +803,9 @@ public class SipPhone extends SipPhoneBase { @Override public void separate() throws CallStateException { synchronized (SipPhone.class) { SipCall call = (SipCall) SipPhone.this.getBackgroundCall(); SipCall call = (getPhone() == SipPhone.this) ? (SipCall) SipPhone.this.getBackgroundCall() : (SipCall) SipPhone.this.getForegroundCall(); if (call.getState() != Call.State.IDLE) { throw new CallStateException( "cannot put conn back to a call in non-idle state: " Loading @@ -808,10 +815,20 @@ public class SipPhone extends SipPhoneBase { + mPeer.getUriString() + " from " + mOwner + " back to " + call); // separate the AudioGroup and connection from the original call Phone originalPhone = getPhone(); AudioGroup audioGroup = call.getAudioGroup(); // may be null call.add(this); mSipAudioCall.setAudioGroup(audioGroup); call.hold(); // put the original call to bg; and the separated call becomes // fg if it was in bg originalPhone.switchHoldingAndActive(); // start audio and notify the phone app of the state change call = (SipCall) SipPhone.this.getForegroundCall(); mSipAudioCall.startAudio(); call.onConnectionStateChanged(this); } } Loading