Prevent double notification networkreachability up + fix for ethernet android devices

This commit is contained in:
Sylvain Berfini 2013-07-10 13:06:30 +02:00
parent aae7f2e8d0
commit 439b35a11d
2 changed files with 34 additions and 36 deletions

View file

@ -149,6 +149,7 @@ public class LinphoneManager implements LinphoneCoreListener {
private static boolean sExited;
private String contactParams;
private boolean mAudioFocused;
private boolean isNetworkReachable;
private WakeLock mIncallWakeLock;
@ -886,19 +887,42 @@ public class LinphoneManager implements LinphoneCoreListener {
initAccounts();
//init network state
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mServiceContext);
boolean wifiOnly = pref.getBoolean(getString(R.string.pref_wifi_only_key), mR.getBoolean(R.bool.pref_wifi_only_default));
boolean isConnected = false;
if (networkInfo != null) {
isConnected = networkInfo.getState() == NetworkInfo.State.CONNECTED && (networkInfo.getTypeName().equals("WIFI") || (networkInfo.getTypeName().equals("mobile") && !wifiOnly));
}
mLc.setNetworkReachable(isConnected);
updateNetworkReachability();
} catch (LinphoneCoreException e) {
throw new LinphoneConfigException(getString(R.string.wrong_settings),e);
}
}
public void updateNetworkReachability() {
ConnectivityManager cm = (ConnectivityManager) mServiceContext.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo eventInfo = cm.getActiveNetworkInfo();
if (eventInfo == null || eventInfo.getState() == NetworkInfo.State.DISCONNECTED) {
Log.i("No connectivity: setting network unreachable");
if (isNetworkReachable) {
isNetworkReachable = false;
mLc.setNetworkReachable(isNetworkReachable);
}
} else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){
manageTunnelServer(eventInfo);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mServiceContext);
boolean wifiOnly = pref.getBoolean(getString(R.string.pref_wifi_only_key), mR.getBoolean(R.bool.pref_wifi_only_default));
if ((eventInfo.getTypeName().equals("WIFI")) || (!eventInfo.getTypeName().equals("WIFI") && !wifiOnly)) {
if (!isNetworkReachable) {
isNetworkReachable = true;
mLc.setNetworkReachable(isNetworkReachable);
Log.i(eventInfo.getTypeName()," connected: setting network reachable (network = " + eventInfo.getTypeName() + ")");
}
} else {
if (isNetworkReachable) {
isNetworkReachable = false;
mLc.setNetworkReachable(isNetworkReachable);
Log.i(eventInfo.getTypeName()," connected: wifi only activated, setting network unreachable (network = " + eventInfo.getTypeName() + ")");
}
}
}
}
private void setSignalingTransportsFromConfiguration(Transports t) {
Transports ports = new Transports(t);
boolean useRandomPort = getPrefBoolean(R.string.pref_transport_use_random_ports_key, mR.getBoolean(R.bool.pref_transport_use_random_ports_default));
@ -1042,22 +1066,7 @@ public class LinphoneManager implements LinphoneCoreListener {
*/
public void connectivityChanged(ConnectivityManager cm, boolean noConnectivity) {
NetworkInfo eventInfo = cm.getActiveNetworkInfo();
if (noConnectivity || eventInfo == null || eventInfo.getState() == NetworkInfo.State.DISCONNECTED) {
Log.i("No connectivity: setting network unreachable");
mLc.setNetworkReachable(false);
} else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){
manageTunnelServer(eventInfo);
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mServiceContext);
boolean wifiOnly = pref.getBoolean(getString(R.string.pref_wifi_only_key), mR.getBoolean(R.bool.pref_wifi_only_default));
if (eventInfo.getTypeName().equals("WIFI") || (eventInfo.getTypeName().equals("mobile") && !wifiOnly)) {
mLc.setNetworkReachable(true);
Log.i(eventInfo.getTypeName()," connected: setting network reachable");
} else {
mLc.setNetworkReachable(false);
Log.i(eventInfo.getTypeName()," connected: wifi only activated, setting network unreachable");
}
}
updateNetworkReachability();
if (connectivityListener != null) {
connectivityListener.onConnectivityChanged(mServiceContext, eventInfo, cm);

View file

@ -50,8 +50,6 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.preference.CheckBoxPreference;
@ -233,16 +231,7 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa
wifiOnly.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean isSettingActivated = (Boolean) newValue;
ConnectivityManager cm = (ConnectivityManager) LinphoneActivity.instance().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo eventInfo = cm.getActiveNetworkInfo();
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (eventInfo != null && eventInfo.getTypeName() != null && eventInfo.getTypeName().equals("mobile") && lc != null) {
lc.setNetworkReachable(!isSettingActivated);
}
LinphoneManager.getInstance().updateNetworkReachability();
return true;
}
});