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 static boolean sExited;
|
||||||
private String contactParams;
|
private String contactParams;
|
||||||
private boolean mAudioFocused;
|
private boolean mAudioFocused;
|
||||||
|
private boolean isNetworkReachable;
|
||||||
|
|
||||||
private WakeLock mIncallWakeLock;
|
private WakeLock mIncallWakeLock;
|
||||||
|
|
||||||
|
@ -886,19 +887,42 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
initAccounts();
|
initAccounts();
|
||||||
|
|
||||||
//init network state
|
//init network state
|
||||||
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
|
updateNetworkReachability();
|
||||||
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);
|
|
||||||
} catch (LinphoneCoreException e) {
|
} catch (LinphoneCoreException e) {
|
||||||
throw new LinphoneConfigException(getString(R.string.wrong_settings),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) {
|
private void setSignalingTransportsFromConfiguration(Transports t) {
|
||||||
Transports ports = new 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));
|
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) {
|
public void connectivityChanged(ConnectivityManager cm, boolean noConnectivity) {
|
||||||
NetworkInfo eventInfo = cm.getActiveNetworkInfo();
|
NetworkInfo eventInfo = cm.getActiveNetworkInfo();
|
||||||
|
updateNetworkReachability();
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connectivityListener != null) {
|
if (connectivityListener != null) {
|
||||||
connectivityListener.onConnectivityChanged(mServiceContext, eventInfo, cm);
|
connectivityListener.onConnectivityChanged(mServiceContext, eventInfo, cm);
|
||||||
|
|
|
@ -50,8 +50,6 @@ import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.net.NetworkInfo;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.CheckBoxPreference;
|
import android.preference.CheckBoxPreference;
|
||||||
|
@ -233,16 +231,7 @@ public class PreferencesFragment extends PreferencesListFragment implements EcCa
|
||||||
wifiOnly.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
wifiOnly.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
boolean isSettingActivated = (Boolean) newValue;
|
LinphoneManager.getInstance().updateNetworkReachability();
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue