Fix for nat policy settings

This commit is contained in:
Sylvain Berfini 2016-07-25 15:01:53 +02:00
parent f2c7048a0b
commit 30aab3cad8
6 changed files with 54 additions and 50 deletions

View file

@ -97,6 +97,7 @@
<string name="pref_codecs_key">pref_codecs_key</string>
<string name="pref_stun_server_key">pref_stun_server_key</string>
<string name="pref_ice_enable_key">pref_ice_enable_key</string>
<string name="pref_turn_enable_key">pref_turn_enable_key</string>
<string name="pref_video_codec_vp8_key">pref_video_codec_vp8_key</string>
<string name="pref_media_encryption_key">pref_media_encryption_key</string>
<string name="pref_media_encryption_key_none">none</string>

View file

@ -287,6 +287,7 @@
<string name="pref_wifi_only">Use WiFi only</string>
<string name="pref_stun_server">Stun server</string>
<string name="pref_ice_enable">Enable ICE</string>
<string name="pref_turn_enable">Enable TURN</string>
<string name="pref_upnp_enable">Enable UPNP</string>
<string name="pref_transport_use_random_ports">Use random ports</string>
<string name="pref_sip_port_title">SIP port to use</string>

View file

@ -259,6 +259,11 @@
android:key="@string/pref_ice_enable_key"
android:persistent="false"/>
<CheckBoxPreference
android:title="@string/pref_turn_enable"
android:key="@string/pref_turn_enable_key"
android:persistent="false"/>
<CheckBoxPreference
android:title="@string/pref_upnp_enable"
android:key="@string/pref_upnp_enable_key"

View file

@ -425,10 +425,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
isAnimationDisabled = !LinphonePreferences.instance().areAnimationsEnabled();
}
public boolean isAnimationDisabled() {
return isAnimationDisabled;
}
private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
FragmentManager fm = getFragmentManager();

View file

@ -910,46 +910,44 @@ public class LinphonePreferences {
return getConfig().getBool("app", "wifi_only", false);
}
public String getStunServer() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) return null;
return nat.getStunServer();
}
public void setStunServer(String stun) {
private LinphoneNatPolicy getOrCreateNatPolicy() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) {
nat = getLc().createNatPolicy();
}
return nat;
}
public String getStunServer() {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.getStunServer();
}
public void setStunServer(String stun) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.setStunServer(stun);
}
public void setIceEnabled(boolean enabled) {
LinphoneNatPolicy nat = getLc().createNatPolicy();
if (enabled) {
nat.enableIce(true);
} else {
String stun = getStunServer();
if (stun != null && stun.length() > 0) {
if (stun != null && !stun.isEmpty()) {
nat.enableStun(true);
}
}
getLc().setNatPolicy(nat);
}
public void setUpnpEnabled(boolean enabled) {
LinphoneNatPolicy nat = getLc().getNatPolicy();
public void setIceEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableIce(enabled);
getLc().setNatPolicy(nat);
}
if (enabled) {
nat.enableUpnp(true);
}
else {
String stun = getStunServer();
if (stun != null && stun.length() > 0) {
nat.enableStun(true);
}
public void setTurnEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableTurn(enabled);
getLc().setNatPolicy(nat);
}
public void setUpnpEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableUpnp(enabled);
getLc().setNatPolicy(nat);
}
public void useRandomPort(boolean enabled) {
@ -990,17 +988,20 @@ public class LinphonePreferences {
}
public boolean isUpnpEnabled() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) return false;
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.upnpEnabled();
}
public boolean isIceEnabled() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) return false;
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.iceEnabled();
}
public boolean isTurnEnabled() {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.turnEnabled();
}
public MediaEncryption getMediaEncryption() {
return getLc().getMediaEncryption();
}

View file

@ -949,16 +949,10 @@ public class SettingsFragment extends PreferencesListFragment {
// Disable UPnP if ICE si enabled, or disable ICE if UPnP is enabled
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
CheckBoxPreference turn = (CheckBoxPreference) findPreference(getString(R.string.pref_turn_enable_key));
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
ice.setChecked(mPrefs.isIceEnabled());
if (mPrefs.isIceEnabled()) {
upnp.setEnabled(false);
} else {
upnp.setChecked(mPrefs.isUpnpEnabled());
if (mPrefs.isUpnpEnabled()) {
ice.setEnabled(false);
}
}
turn.setChecked(mPrefs.isTurnEnabled());
CheckBoxPreference randomPort = (CheckBoxPreference) findPreference(getString(R.string.pref_transport_use_random_ports_key));
randomPort.setChecked(mPrefs.isUsingRandomPort());
@ -1000,20 +994,26 @@ public class SettingsFragment extends PreferencesListFragment {
public boolean onPreferenceChange(Preference preference, Object newValue) {
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
boolean value = (Boolean) newValue;
upnp.setChecked(false);
upnp.setEnabled(!value);
mPrefs.setIceEnabled((Boolean) newValue);
return true;
}
});
findPreference(getString(R.string.pref_turn_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
boolean value = (Boolean) newValue;
mPrefs.setTurnEnabled((Boolean) newValue);
return true;
}
});
findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
boolean value = (Boolean) newValue;
ice.setChecked(false);
ice.setEnabled(!value);
mPrefs.setUpnpEnabled(value);
return true;
}