diff --git a/res/values/non_localizable_strings.xml b/res/values/non_localizable_strings.xml index e6dc6c6c7..7b0463d28 100644 --- a/res/values/non_localizable_strings.xml +++ b/res/values/non_localizable_strings.xml @@ -97,6 +97,7 @@ pref_codecs_key pref_stun_server_key pref_ice_enable_key + pref_turn_enable_key pref_video_codec_vp8_key pref_media_encryption_key none diff --git a/res/values/strings.xml b/res/values/strings.xml index 78714766e..4d311dc81 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -287,6 +287,7 @@ Use WiFi only Stun server Enable ICE + Enable TURN Enable UPNP Use random ports SIP port to use diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 369b4c548..d86fe403b 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -259,6 +259,11 @@ android:key="@string/pref_ice_enable_key" android:persistent="false"/> + + 0) { - nat.enableStun(true); - } + public String getStunServer() { + LinphoneNatPolicy nat = getOrCreateNatPolicy(); + return nat.getStunServer(); + } + + public void setStunServer(String stun) { + LinphoneNatPolicy nat = getOrCreateNatPolicy(); + nat.setStunServer(stun); + if (stun != null && !stun.isEmpty()) { + nat.enableStun(true); } getLc().setNatPolicy(nat); } + public void setIceEnabled(boolean enabled) { + LinphoneNatPolicy nat = getOrCreateNatPolicy(); + nat.enableIce(enabled); + getLc().setNatPolicy(nat); + } + + public void setTurnEnabled(boolean enabled) { + LinphoneNatPolicy nat = getOrCreateNatPolicy(); + nat.enableTurn(enabled); + getLc().setNatPolicy(nat); + } + public void setUpnpEnabled(boolean enabled) { - LinphoneNatPolicy nat = getLc().getNatPolicy(); - - if (enabled) { - nat.enableUpnp(true); - } - else { - String stun = getStunServer(); - if (stun != null && stun.length() > 0) { - nat.enableStun(true); - } - } + 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(); } diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index 8be70bf34..1ca547664 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -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; }