summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hung-ying Tyan <tyanh@google.com> 2010-09-14 09:44:03 -0700
committer Android Git Automerger <android-git-automerger@android.com> 2010-09-14 09:44:03 -0700
commitae83faa3eeb26b1983fb1b8b663eebfe1f1f61d5 (patch)
tree9ab98f9a506fe63e8914b6e67382ec96d12a0fec
parent3692af92ab290a561a927079cbf1f778f57fe5f9 (diff)
parent13f6270eb14b409709c936b828e2a2fd40e427c4 (diff)
am 13f6270e: SipAudioCall: use SipErrorCode instead of string in onError()
Merge commit '13f6270eb14b409709c936b828e2a2fd40e427c4' into gingerbread-plus-aosp * commit '13f6270eb14b409709c936b828e2a2fd40e427c4': SipAudioCall: use SipErrorCode instead of string in onError()
-rwxr-xr-xtelephony/java/com/android/internal/telephony/sip/SipPhone.java4
-rw-r--r--voip/java/android/net/sip/SipAudioCall.java7
-rw-r--r--voip/java/android/net/sip/SipAudioCallImpl.java69
3 files changed, 54 insertions, 26 deletions
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
index 7fe76cd80b00..943f21c9e546 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
@@ -819,9 +819,9 @@ public class SipPhone extends SipPhoneBase {
}
@Override
- public void onError(SipAudioCall call, String errorCode,
+ public void onError(SipAudioCall call, SipErrorCode errorCode,
String errorMessage) {
- switch (Enum.valueOf(SipErrorCode.class, errorCode)) {
+ switch (errorCode) {
case INVALID_REMOTE_URI:
onError(Connection.DisconnectCause.INVALID_NUMBER);
break;
diff --git a/voip/java/android/net/sip/SipAudioCall.java b/voip/java/android/net/sip/SipAudioCall.java
index 39083a5b08b2..1d1be69f0952 100644
--- a/voip/java/android/net/sip/SipAudioCall.java
+++ b/voip/java/android/net/sip/SipAudioCall.java
@@ -88,10 +88,11 @@ public interface SipAudioCall {
* Called when an error occurs.
*
* @param call the call object that carries out the audio call
- * @param errorCode error code defined in {@link SipErrorCode}
+ * @param errorCode error code of this error
* @param errorMessage error message
*/
- void onError(SipAudioCall call, String errorCode, String errorMessage);
+ void onError(SipAudioCall call, SipErrorCode errorCode,
+ String errorMessage);
}
/**
@@ -125,7 +126,7 @@ public interface SipAudioCall {
public void onCallHeld(SipAudioCall call) {
onChanged(call);
}
- public void onError(SipAudioCall call, String errorCode,
+ public void onError(SipAudioCall call, SipErrorCode errorCode,
String errorMessage) {
onChanged(call);
}
diff --git a/voip/java/android/net/sip/SipAudioCallImpl.java b/voip/java/android/net/sip/SipAudioCallImpl.java
index 67ba97fb4332..484eb1e93411 100644
--- a/voip/java/android/net/sip/SipAudioCallImpl.java
+++ b/voip/java/android/net/sip/SipAudioCallImpl.java
@@ -79,6 +79,9 @@ public class SipAudioCallImpl extends SipSessionAdapter
private WifiManager mWm;
private WifiManager.WifiLock mWifiHighPerfLock;
+ private SipErrorCode mErrorCode;
+ private String mErrorMessage;
+
public SipAudioCallImpl(Context context, SipProfile localProfile) {
mContext = context;
mLocalProfile = localProfile;
@@ -92,23 +95,33 @@ public class SipAudioCallImpl extends SipSessionAdapter
public void setListener(SipAudioCall.Listener listener,
boolean callbackImmediately) {
mListener = listener;
- if ((listener == null) || !callbackImmediately) return;
try {
- SipSessionState state = getState();
- switch (state) {
- case READY_TO_CALL:
- listener.onReadyToCall(this);
- break;
- case INCOMING_CALL:
- listener.onRinging(this, getPeerProfile(mSipSession));
- startRinging();
- break;
- case OUTGOING_CALL:
- listener.onCalling(this);
- break;
- default:
- listener.onError(this, SipErrorCode.CLIENT_ERROR.toString(),
- "wrong state to attach call: " + state);
+ if ((listener == null) || !callbackImmediately) {
+ // do nothing
+ } else if (mErrorCode != null) {
+ listener.onError(this, mErrorCode, mErrorMessage);
+ } else if (mInCall) {
+ if (mHold) {
+ listener.onCallHeld(this);
+ } else {
+ listener.onCallEstablished(this);
+ }
+ } else {
+ SipSessionState state = getState();
+ switch (state) {
+ case READY_TO_CALL:
+ listener.onReadyToCall(this);
+ break;
+ case INCOMING_CALL:
+ listener.onRinging(this, getPeerProfile(mSipSession));
+ break;
+ case OUTGOING_CALL:
+ listener.onCalling(this);
+ break;
+ case OUTGOING_CALL_RING_BACK:
+ listener.onRingingBack(this);
+ break;
+ }
}
} catch (Throwable t) {
Log.e(TAG, "setListener()", t);
@@ -135,6 +148,8 @@ public class SipAudioCallImpl extends SipSessionAdapter
mInCall = false;
mHold = false;
mSessionId = -1L;
+ mErrorCode = null;
+ mErrorMessage = null;
}
public synchronized SipProfile getLocalProfile() {
@@ -274,14 +289,20 @@ public class SipAudioCallImpl extends SipSessionAdapter
}
}
+ private SipErrorCode getErrorCode(String errorCode) {
+ return Enum.valueOf(SipErrorCode.class, errorCode);
+ }
+
@Override
public void onCallChangeFailed(ISipSession session, String errorCode,
String message) {
Log.d(TAG, "sip call change failed: " + message);
+ mErrorCode = getErrorCode(errorCode);
+ mErrorMessage = message;
Listener listener = mListener;
if (listener != null) {
try {
- listener.onError(SipAudioCallImpl.this, errorCode, message);
+ listener.onError(SipAudioCallImpl.this, mErrorCode, message);
} catch (Throwable t) {
Log.e(TAG, "onCallBusy()", t);
}
@@ -289,16 +310,20 @@ public class SipAudioCallImpl extends SipSessionAdapter
}
@Override
- public void onError(ISipSession session, String errorCode,
- String message) {
+ public void onError(ISipSession session, String errorCode, String message) {
Log.d(TAG, "sip session error: " + errorCode + ": " + message);
+ mErrorCode = getErrorCode(errorCode);
+ mErrorMessage = message;
synchronized (this) {
- if (!isInCall()) close(true);
+ if ((mErrorCode == SipErrorCode.DATA_CONNECTION_LOST)
+ || !isInCall()) {
+ close(true);
+ }
}
Listener listener = mListener;
if (listener != null) {
try {
- listener.onError(SipAudioCallImpl.this, errorCode, message);
+ listener.onError(SipAudioCallImpl.this, mErrorCode, message);
} catch (Throwable t) {
Log.e(TAG, "onError()", t);
}
@@ -311,6 +336,8 @@ public class SipAudioCallImpl extends SipSessionAdapter
try {
mPeerSd = new SdpSessionDescription(sessionDescription);
session.setListener(this);
+
+ if (getState() == SipSessionState.INCOMING_CALL) startRinging();
} catch (Throwable e) {
Log.e(TAG, "attachCall()", e);
throwSipException(e);