Merge "Throw proper exceptions in SipManager" into gingerbread
diff --git a/telephony/java/com/android/internal/telephony/sip/SipPhone.java b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
index b154c91..818605a 100755
--- a/telephony/java/com/android/internal/telephony/sip/SipPhone.java
+++ b/telephony/java/com/android/internal/telephony/sip/SipPhone.java
@@ -390,12 +390,11 @@
                         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);
             }
         }
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java
index 8aaa805..2e386620 100644
--- a/voip/java/android/net/sip/SipManager.java
+++ b/voip/java/android/net/sip/SipManager.java
@@ -314,10 +314,6 @@
         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 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 @@
 
         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 @@
             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 @@
         try {
             return mSipService.getListOfProfiles();
         } catch (RemoteException e) {
-            return null;
+            return new SipProfile[0];
         }
     }