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(); }