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;
}