am 89a7180a: Merge "SipService: ignore connect event for non-active networks." into gingerbread

Merge commit '89a7180a242043a0b4d6695bf386c93365bf6797' into gingerbread-plus-aosp

* commit '89a7180a242043a0b4d6695bf386c93365bf6797':
  SipService: ignore connect event for non-active networks.
diff --git a/services/java/com/android/server/sip/SipService.java b/services/java/com/android/server/sip/SipService.java
index 803cc96..c1841f6 100644
--- a/services/java/com/android/server/sip/SipService.java
+++ b/services/java/com/android/server/sip/SipService.java
@@ -771,6 +771,23 @@
                             b.get(ConnectivityManager.EXTRA_NETWORK_INFO);
                     String type = netInfo.getTypeName();
                     NetworkInfo.State state = netInfo.getState();
+
+                    NetworkInfo activeNetInfo = getActiveNetworkInfo();
+                    if (activeNetInfo != null) {
+                        Log.v(TAG, "active network: " + activeNetInfo.getTypeName()
+                                + ((activeNetInfo.getState() == NetworkInfo.State.CONNECTED)
+                                        ? " CONNECTED" : " DISCONNECTED"));
+                    } else {
+                        Log.v(TAG, "active network: null");
+                    }
+                    if ((state == NetworkInfo.State.CONNECTED)
+                            && (activeNetInfo != null)
+                            && (activeNetInfo.getType() != netInfo.getType())) {
+                        Log.d(TAG, "ignore connect event: " + type
+                                + ", active: " + activeNetInfo.getTypeName());
+                        return;
+                    }
+
                     if (state == NetworkInfo.State.CONNECTED) {
                         Log.v(TAG, "Connectivity alert: CONNECTED " + type);
                         onChanged(type, true);
@@ -785,6 +802,12 @@
             }
         }
 
+        private NetworkInfo getActiveNetworkInfo() {
+            ConnectivityManager cm = (ConnectivityManager)
+                    mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
+            return cm.getActiveNetworkInfo();
+        }
+
         private void onChanged(String type, boolean connected) {
             synchronized (SipService.this) {
                 // When turning on WIFI, it needs some time for network
diff --git a/voip/java/android/net/sip/SipAudioCallImpl.java b/voip/java/android/net/sip/SipAudioCallImpl.java
index 484eb1e..8bf486a 100644
--- a/voip/java/android/net/sip/SipAudioCallImpl.java
+++ b/voip/java/android/net/sip/SipAudioCallImpl.java
@@ -184,7 +184,7 @@
         Listener listener = mListener;
         if (listener != null) {
             try {
-                listener.onCalling(SipAudioCallImpl.this);
+                listener.onCalling(this);
             } catch (Throwable t) {
                 Log.e(TAG, "onCalling()", t);
             }
@@ -198,7 +198,7 @@
         Listener listener = mListener;
         if (listener != null) {
             try {
-                listener.onRingingBack(SipAudioCallImpl.this);
+                listener.onRingingBack(this);
             } catch (Throwable t) {
                 Log.e(TAG, "onRingingBack()", t);
             }
@@ -251,9 +251,9 @@
         if (listener != null) {
             try {
                 if (mHold) {
-                    listener.onCallHeld(SipAudioCallImpl.this);
+                    listener.onCallHeld(this);
                 } else {
-                    listener.onCallEstablished(SipAudioCallImpl.this);
+                    listener.onCallEstablished(this);
                 }
             } catch (Throwable t) {
                 Log.e(TAG, "onCallEstablished()", t);
@@ -268,7 +268,7 @@
         Listener listener = mListener;
         if (listener != null) {
             try {
-                listener.onCallEnded(SipAudioCallImpl.this);
+                listener.onCallEnded(this);
             } catch (Throwable t) {
                 Log.e(TAG, "onCallEnded()", t);
             }
@@ -282,7 +282,7 @@
         Listener listener = mListener;
         if (listener != null) {
             try {
-                listener.onCallBusy(SipAudioCallImpl.this);
+                listener.onCallBusy(this);
             } catch (Throwable t) {
                 Log.e(TAG, "onCallBusy()", t);
             }
@@ -302,7 +302,7 @@
         Listener listener = mListener;
         if (listener != null) {
             try {
-                listener.onError(SipAudioCallImpl.this, mErrorCode, message);
+                listener.onError(this, mErrorCode, message);
             } catch (Throwable t) {
                 Log.e(TAG, "onCallBusy()", t);
             }
@@ -310,9 +310,10 @@
     }
 
     @Override
-    public void onError(ISipSession session, String errorCode, String message) {
-        Log.d(TAG, "sip session error: " + errorCode + ": " + message);
-        mErrorCode = getErrorCode(errorCode);
+    public void onError(ISipSession session, String errorCodeString,
+            String message) {
+        Log.d(TAG, "sip session error: " + errorCodeString + ": " + message);
+        SipErrorCode errorCode = mErrorCode = getErrorCode(errorCodeString);
         mErrorMessage = message;
         synchronized (this) {
             if ((mErrorCode == SipErrorCode.DATA_CONNECTION_LOST)
@@ -323,7 +324,7 @@
         Listener listener = mListener;
         if (listener != null) {
             try {
-                listener.onError(SipAudioCallImpl.this, mErrorCode, message);
+                listener.onError(this, errorCode, message);
             } catch (Throwable t) {
                 Log.e(TAG, "onError()", t);
             }