Prevent double notification networkreachability up + fix for ethernet android devices
This commit is contained in:
parent
aae7f2e8d0
commit
439b35a11d
2 changed files with 34 additions and 36 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue