Loading src/java/com/android/internal/telephony/Call.java +13 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,19 @@ public abstract class Call { } } public static State stateFromDCState (DriverCall.State dcState) { switch (dcState) { case ACTIVE: return State.ACTIVE; case HOLDING: return State.HOLDING; case DIALING: return State.DIALING; case ALERTING: return State.ALERTING; case INCOMING: return State.INCOMING; case WAITING: return State.WAITING; default: throw new RuntimeException ("illegal call state:" + dcState); } } public enum SrvccState { NONE, STARTED, COMPLETED, FAILED, CANCELED; } Loading src/java/com/android/internal/telephony/CallTracker.java +28 −5 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import com.android.internal.telephony.CommandException; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; /** Loading @@ -41,7 +42,7 @@ public abstract class CallTracker extends Handler { protected int mPendingOperations; protected boolean mNeedsPoll; protected Message mLastRelevantPoll; protected Connection mHandoverConnection; protected ArrayList<Connection> mHandoverConnections = new ArrayList<Connection>(); public CommandsInterface mCi; Loading Loading @@ -93,12 +94,34 @@ public abstract class CallTracker extends Handler { protected abstract void handlePollCalls(AsyncResult ar); protected void notifySrvccState(Call.SrvccState state, Connection c) { if (state == Call.SrvccState.STARTED) { mHandoverConnection = c; protected Connection getHoConnection(DriverCall dc) { for (Connection hoConn : mHandoverConnections) { log("getHoConnection - compare number: hoConn= " + hoConn.toString()); if (hoConn.getAddress() != null && hoConn.getAddress().contains(dc.number)) { log("getHoConnection: Handover connection match found = " + hoConn.toString()); return hoConn; } } for (Connection hoConn : mHandoverConnections) { log("getHoConnection: compare state hoConn= " + hoConn.toString()); if (hoConn.getStateBeforeHandover() == Call.stateFromDCState(dc.state)) { log("getHoConnection: Handover connection match found = " + hoConn.toString()); return hoConn; } } return null; } protected void notifySrvccState(Call.SrvccState state, ArrayList<Connection> c) { if (state == Call.SrvccState.STARTED && c != null) { // SRVCC started. Prepare handover connections list mHandoverConnections.addAll(c); } else if (state != Call.SrvccState.COMPLETED) { mHandoverConnection = null; // SRVCC FAILED/CANCELED. Clear the handover connections list // Individual connections will be removed from the list in handlePollCalls() mHandoverConnections.clear(); } log("notifySrvccState: mHandoverConnections= " + mHandoverConnections.toString()); } protected void handleRadioAvailable() { Loading src/java/com/android/internal/telephony/Connection.java +9 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ public abstract class Connection { private boolean mRemoteVideoCapable; private int mAudioQuality; private android.telecom.Connection.VideoProvider mVideoProvider; public Call.State mPreHandoverState = Call.State.IDLE; /* Instance Methods */ Loading Loading @@ -258,6 +259,14 @@ public abstract class Connection { } } /** * If this connection went through handover return the state of the * call that contained this connection before handover. */ public Call.State getStateBeforeHandover() { return mPreHandoverState; } /** * isAlive() * Loading src/java/com/android/internal/telephony/PhoneBase.java +2 −1 Original line number Diff line number Diff line Loading @@ -591,7 +591,7 @@ public abstract class PhoneBase extends Handler implements Phone { private void handleSrvccStateChanged(int[] ret) { Rlog.d(LOG_TAG, "handleSrvccStateChanged"); Connection conn = null; ArrayList<Connection> conn = null; ImsPhone imsPhone = mImsPhone; Call.SrvccState srvccState = Call.SrvccState.NONE; if (ret != null && ret.length != 0) { Loading @@ -601,6 +601,7 @@ public abstract class PhoneBase extends Handler implements Phone { srvccState = Call.SrvccState.STARTED; if (imsPhone != null) { conn = imsPhone.getHandoverConnection(); migrateFrom(imsPhone); } else { Rlog.d(LOG_TAG, "HANDOVER_STARTED: mImsPhone null"); } Loading src/java/com/android/internal/telephony/cdma/CdmaCall.java +0 −16 Original line number Diff line number Diff line Loading @@ -32,22 +32,6 @@ public final class CdmaCall extends Call { /*package*/ CdmaCallTracker mOwner; /***************************** Class Methods *****************************/ static State stateFromDCState (DriverCall.State dcState) { switch (dcState) { case ACTIVE: return State.ACTIVE; case HOLDING: return State.HOLDING; case DIALING: return State.DIALING; case ALERTING: return State.ALERTING; case INCOMING: return State.INCOMING; case WAITING: return State.WAITING; default: throw new RuntimeException ("illegal call state:" + dcState); } } /****************************** Constructors *****************************/ /*package*/ CdmaCall (CdmaCallTracker owner) { Loading Loading
src/java/com/android/internal/telephony/Call.java +13 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,19 @@ public abstract class Call { } } public static State stateFromDCState (DriverCall.State dcState) { switch (dcState) { case ACTIVE: return State.ACTIVE; case HOLDING: return State.HOLDING; case DIALING: return State.DIALING; case ALERTING: return State.ALERTING; case INCOMING: return State.INCOMING; case WAITING: return State.WAITING; default: throw new RuntimeException ("illegal call state:" + dcState); } } public enum SrvccState { NONE, STARTED, COMPLETED, FAILED, CANCELED; } Loading
src/java/com/android/internal/telephony/CallTracker.java +28 −5 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import com.android.internal.telephony.CommandException; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; /** Loading @@ -41,7 +42,7 @@ public abstract class CallTracker extends Handler { protected int mPendingOperations; protected boolean mNeedsPoll; protected Message mLastRelevantPoll; protected Connection mHandoverConnection; protected ArrayList<Connection> mHandoverConnections = new ArrayList<Connection>(); public CommandsInterface mCi; Loading Loading @@ -93,12 +94,34 @@ public abstract class CallTracker extends Handler { protected abstract void handlePollCalls(AsyncResult ar); protected void notifySrvccState(Call.SrvccState state, Connection c) { if (state == Call.SrvccState.STARTED) { mHandoverConnection = c; protected Connection getHoConnection(DriverCall dc) { for (Connection hoConn : mHandoverConnections) { log("getHoConnection - compare number: hoConn= " + hoConn.toString()); if (hoConn.getAddress() != null && hoConn.getAddress().contains(dc.number)) { log("getHoConnection: Handover connection match found = " + hoConn.toString()); return hoConn; } } for (Connection hoConn : mHandoverConnections) { log("getHoConnection: compare state hoConn= " + hoConn.toString()); if (hoConn.getStateBeforeHandover() == Call.stateFromDCState(dc.state)) { log("getHoConnection: Handover connection match found = " + hoConn.toString()); return hoConn; } } return null; } protected void notifySrvccState(Call.SrvccState state, ArrayList<Connection> c) { if (state == Call.SrvccState.STARTED && c != null) { // SRVCC started. Prepare handover connections list mHandoverConnections.addAll(c); } else if (state != Call.SrvccState.COMPLETED) { mHandoverConnection = null; // SRVCC FAILED/CANCELED. Clear the handover connections list // Individual connections will be removed from the list in handlePollCalls() mHandoverConnections.clear(); } log("notifySrvccState: mHandoverConnections= " + mHandoverConnections.toString()); } protected void handleRadioAvailable() { Loading
src/java/com/android/internal/telephony/Connection.java +9 −0 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ public abstract class Connection { private boolean mRemoteVideoCapable; private int mAudioQuality; private android.telecom.Connection.VideoProvider mVideoProvider; public Call.State mPreHandoverState = Call.State.IDLE; /* Instance Methods */ Loading Loading @@ -258,6 +259,14 @@ public abstract class Connection { } } /** * If this connection went through handover return the state of the * call that contained this connection before handover. */ public Call.State getStateBeforeHandover() { return mPreHandoverState; } /** * isAlive() * Loading
src/java/com/android/internal/telephony/PhoneBase.java +2 −1 Original line number Diff line number Diff line Loading @@ -591,7 +591,7 @@ public abstract class PhoneBase extends Handler implements Phone { private void handleSrvccStateChanged(int[] ret) { Rlog.d(LOG_TAG, "handleSrvccStateChanged"); Connection conn = null; ArrayList<Connection> conn = null; ImsPhone imsPhone = mImsPhone; Call.SrvccState srvccState = Call.SrvccState.NONE; if (ret != null && ret.length != 0) { Loading @@ -601,6 +601,7 @@ public abstract class PhoneBase extends Handler implements Phone { srvccState = Call.SrvccState.STARTED; if (imsPhone != null) { conn = imsPhone.getHandoverConnection(); migrateFrom(imsPhone); } else { Rlog.d(LOG_TAG, "HANDOVER_STARTED: mImsPhone null"); } Loading
src/java/com/android/internal/telephony/cdma/CdmaCall.java +0 −16 Original line number Diff line number Diff line Loading @@ -32,22 +32,6 @@ public final class CdmaCall extends Call { /*package*/ CdmaCallTracker mOwner; /***************************** Class Methods *****************************/ static State stateFromDCState (DriverCall.State dcState) { switch (dcState) { case ACTIVE: return State.ACTIVE; case HOLDING: return State.HOLDING; case DIALING: return State.DIALING; case ALERTING: return State.ALERTING; case INCOMING: return State.INCOMING; case WAITING: return State.WAITING; default: throw new RuntimeException ("illegal call state:" + dcState); } } /****************************** Constructors *****************************/ /*package*/ CdmaCall (CdmaCallTracker owner) { Loading