Throw proper exceptions in SipManager
instead of silently returning null and causing NPE in applications as returning null is not documented in the javadoc. Add connection to the connection list in SipCall after dial() succeeds so that we don't need to clean up if it fails. The original code will cause the failed connection to continue to live in the SipCall and in next dial() attempt, a new connection is created and the in-call screen sees two connections in the call and thus shows conference call UI. Bug: 3157234, 3157387 Change-Id: Iabc3235f781c4f1e09384a67ad56b09ad2c12e5e
This commit is contained in:
@@ -390,12 +390,11 @@ public class SipPhone extends SipPhoneBase {
|
||||
new SipProfile.Builder(calleeSipUri).build();
|
||||
SipConnection c = new SipConnection(this, callee,
|
||||
originalNumber);
|
||||
connections.add(c);
|
||||
c.dial();
|
||||
connections.add(c);
|
||||
setState(Call.State.DIALING);
|
||||
return c;
|
||||
} catch (ParseException e) {
|
||||
// TODO: notify someone
|
||||
throw new SipException("dial", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,10 +314,6 @@ public class SipManager {
|
||||
SipAudioCall call = new SipAudioCall(mContext, localProfile);
|
||||
call.setListener(listener);
|
||||
SipSession s = createSipSession(localProfile, null);
|
||||
if (s == null) {
|
||||
throw new SipException(
|
||||
"Failed to create SipSession; network available?");
|
||||
}
|
||||
call.makeCall(peerProfile, s, timeout);
|
||||
return call;
|
||||
}
|
||||
@@ -366,7 +362,9 @@ public class SipManager {
|
||||
*/
|
||||
public SipAudioCall takeAudioCall(Intent incomingCallIntent,
|
||||
SipAudioCall.Listener listener) throws SipException {
|
||||
if (incomingCallIntent == null) return null;
|
||||
if (incomingCallIntent == null) {
|
||||
throw new SipException("Cannot retrieve session with null intent");
|
||||
}
|
||||
|
||||
String callId = getCallId(incomingCallIntent);
|
||||
if (callId == null) {
|
||||
@@ -381,7 +379,9 @@ public class SipManager {
|
||||
|
||||
try {
|
||||
ISipSession session = mSipService.getPendingSession(callId);
|
||||
if (session == null) return null;
|
||||
if (session == null) {
|
||||
throw new SipException("No pending session for the call");
|
||||
}
|
||||
SipAudioCall call = new SipAudioCall(
|
||||
mContext, session.getLocalProfile());
|
||||
call.attachCall(new SipSession(session), offerSd);
|
||||
@@ -526,6 +526,10 @@ public class SipManager {
|
||||
SipSession.Listener listener) throws SipException {
|
||||
try {
|
||||
ISipSession s = mSipService.createSession(localProfile, null);
|
||||
if (s == null) {
|
||||
throw new SipException(
|
||||
"Failed to create SipSession; network unavailable?");
|
||||
}
|
||||
return new SipSession(s, listener);
|
||||
} catch (RemoteException e) {
|
||||
throw new SipException("createSipSession()", e);
|
||||
@@ -541,7 +545,7 @@ public class SipManager {
|
||||
try {
|
||||
return mSipService.getListOfProfiles();
|
||||
} catch (RemoteException e) {
|
||||
return null;
|
||||
return new SipProfile[0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user