properly handle network connectivity changes.

This commit is contained in:
Simon Morlat 2013-11-28 18:24:17 +01:00
parent 84623b9474
commit 77c46c936a

View file

@ -138,7 +138,7 @@ public class LinphoneManager implements LinphoneCoreListener {
private String basePath; private String basePath;
private static boolean sExited; private static boolean sExited;
private boolean mAudioFocused; private boolean mAudioFocused;
private boolean isNetworkReachable; private int mLastNetworkType=-1;
private ConnectivityManager mConnectivityManager; private ConnectivityManager mConnectivityManager;
private WakeLock mIncallWakeLock; private WakeLock mIncallWakeLock;
@ -679,25 +679,29 @@ public class LinphoneManager implements LinphoneCoreListener {
if (eventInfo == null || eventInfo.getState() == NetworkInfo.State.DISCONNECTED) { if (eventInfo == null || eventInfo.getState() == NetworkInfo.State.DISCONNECTED) {
Log.i("No connectivity: setting network unreachable"); Log.i("No connectivity: setting network unreachable");
if (isNetworkReachable) { mLc.setNetworkReachable(false);
isNetworkReachable = false;
mLc.setNetworkReachable(isNetworkReachable);
}
} else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){ } else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){
manageTunnelServer(eventInfo); manageTunnelServer(eventInfo);
boolean wifiOnly = LinphonePreferences.instance().isWifiOnlyEnabled(); boolean wifiOnly = LinphonePreferences.instance().isWifiOnlyEnabled();
if ((eventInfo.getTypeName().equals("WIFI")) || (!eventInfo.getTypeName().equals("WIFI") && !wifiOnly)) { if (wifiOnly){
if (!isNetworkReachable) { if (eventInfo.getType()==ConnectivityManager.TYPE_WIFI)
isNetworkReachable = true; mLc.setNetworkReachable(true);
mLc.setNetworkReachable(isNetworkReachable); else {
Log.i(eventInfo.getTypeName()," connected: setting network reachable (network = " + eventInfo.getTypeName() + ")"); Log.i("Wifi-only mode, setting network not reachable");
mLc.setNetworkReachable(false);
} }
}else{ }else{
if (isNetworkReachable) { int curtype=eventInfo.getType();
isNetworkReachable = false;
mLc.setNetworkReachable(isNetworkReachable); if (curtype!=mLastNetworkType){
Log.i(eventInfo.getTypeName()," connected: wifi only activated, setting network unreachable (network = " + eventInfo.getTypeName() + ")"); //if kind of network has changed, we need to notify network_reachable(false) to make sure all current connections are destroyed.
//they will be re-created during setNetworkReachable(true).
Log.i("Connectivity has changed.");
mLc.setNetworkReachable(false);
} }
mLc.setNetworkReachable(true);
mLastNetworkType=curtype;
} }
} }
} }