diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 800ed1386c728..b48a2a8dea8e6 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -357,4 +357,6 @@
2
+
+ false
diff --git a/services/java/com/android/server/sip/SipService.java b/services/java/com/android/server/sip/SipService.java
index d7747fb59f7ed..7e13d653d3bb5 100644
--- a/services/java/com/android/server/sip/SipService.java
+++ b/services/java/com/android/server/sip/SipService.java
@@ -71,6 +71,7 @@ public final class SipService extends ISipService.Stub {
private boolean mConnected;
private WakeupTimer mTimer;
private WifiManager.WifiLock mWifiLock;
+ private boolean mWifiOnly;
// SipProfile URI --> group
private Map mSipGroups =
@@ -99,6 +100,7 @@ public final class SipService extends ISipService.Stub {
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
mTimer = new WakeupTimer(context);
+ mWifiOnly = SipManager.isSipWifiOnly(context);
}
public synchronized SipProfile[] getListOfProfiles() {
@@ -774,6 +776,15 @@ public final class SipService extends ISipService.Stub {
String type = netInfo.getTypeName();
NetworkInfo.State state = netInfo.getState();
+ if (mWifiOnly && (netInfo.getType() !=
+ ConnectivityManager.TYPE_WIFI)) {
+ if (DEBUG) {
+ Log.d(TAG, "Wifi only, other connectivity ignored: "
+ + type);
+ }
+ return;
+ }
+
NetworkInfo activeNetInfo = getActiveNetworkInfo();
if (DEBUG) {
if (activeNetInfo != null) {
diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java
index 36895cd66ae2c..9ee6f34c407e0 100644
--- a/voip/java/android/net/sip/SipManager.java
+++ b/voip/java/android/net/sip/SipManager.java
@@ -97,6 +97,14 @@ public class SipManager {
*/
}
+ /**
+ * Returns true if SIP is only available on WIFI.
+ */
+ public static boolean isSipWifiOnly(Context context) {
+ return context.getResources().getBoolean(
+ com.android.internal.R.bool.config_sip_wifi_only);
+ }
+
private SipManager() {
createSipService();
}