diff --git a/res/xml/account_preferences.xml b/res/xml/account_preferences.xml
index 7fff9fedd..0fed008e5 100644
--- a/res/xml/account_preferences.xml
+++ b/res/xml/account_preferences.xml
@@ -36,6 +36,11 @@
android:dialogMessage="@string/pref_help_outbound_proxy"
android:summary="@string/pref_help_outbound_proxy"
android:persistent="true"/>
+
+
-
-
= prxCfgs.length)
@@ -187,6 +121,7 @@ public class LinphonePreferences {
private String tempProxy;
private boolean tempOutboundProxy;
private String tempContactsParams;
+ private String tempExpire;
/**
* Creates a new account using values previously set using setNew* functions
@@ -201,6 +136,11 @@ public class LinphonePreferences {
LinphoneProxyConfig prxCfg = LinphoneCoreFactory.instance().createProxyConfig(identity, proxy, route, true);
if (tempContactsParams != null)
prxCfg.setContactParameters(tempContactsParams);
+ if (tempExpire != null) {
+ try {
+ prxCfg.setExpires(Integer.parseInt(tempExpire));
+ } catch (NumberFormatException nfe) { }
+ }
LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, null, null);
@@ -217,6 +157,7 @@ public class LinphonePreferences {
tempProxy = null;
tempOutboundProxy = false;
tempContactsParams = null;
+ tempExpire = null;
}
public void setNewAccountUsername(String username) {
@@ -295,6 +236,20 @@ public class LinphonePreferences {
return getProxyConfig(n).getRoute() != null;
}
+ public String getExpires(int n) {
+ return String.valueOf(getProxyConfig(n).getExpires());
+ }
+
+ public void setNewAccountExpires(String expire) {
+ tempExpire = expire;
+ }
+
+ public void setExpires(int n, String expire) {
+ try {
+ getProxyConfig(n).setExpires(Integer.parseInt(expire));
+ } catch (NumberFormatException nfe) { }
+ }
+
public void setDefaultAccount(int accountIndex) {
LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
if (accountIndex >= 0 && accountIndex < prxCfgs.length)
@@ -341,18 +296,124 @@ public class LinphonePreferences {
if (authInfo != null)
getLc().removeAuthInfo(authInfo);
}
- // End of Accounts
+ // End of accounts settings
- public MediaEncryption getMediaEncryption() {
- return getLc().getMediaEncryption();
+ // Audio settings
+
+ // End of audio settings
+
+ // Video settings
+ public boolean useFrontCam() {
+ return false; //TODO
+ }
+
+ public boolean isVideoEnabled() {
+ return false; //TODO
+ }
+
+ public boolean shouldInitiateVideoCall() {
+ return false; //TODO
+ }
+
+ public boolean shouldAutomaticallyAcceptVideoRequests() {
+ return false; //TODO
+ }
+ // End of video settings
+
+ // Call settings
+
+ // End of call settings
+
+ // Network settings
+ public void setWifiOnlyEnabled(Boolean enable) {
+ getConfig().setBool("app", "wifi_only", enable);
+ }
+
+ public boolean isWifiOnlyEnabled() {
+ return getConfig().getBool("app", "wifi_only", false);
}
- public void setMediaEncryption(MediaEncryption menc) {
- if (menc == null)
+ public String getStunServer() {
+ return getLc().getStunServer();
+ }
+
+ public void setStunServer(String stun) {
+ getLc().setStunServer(stun);
+ }
+
+ public void setIceEnabled(boolean enabled) {
+ if (enabled) {
+ getLc().setFirewallPolicy(FirewallPolicy.UseIce);
+ } else {
+ String stun = getStunServer();
+ if (stun != null && stun.length() > 0) {
+ getLc().setFirewallPolicy(FirewallPolicy.UseStun);
+ } else {
+ getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
+ }
+ }
+ }
+
+ public void setUpnpEnabled(boolean enabled) {
+ if (enabled) {
+ if (isIceEnabled()) {
+ Log.e("Cannot have both ice and upnp enabled, disabling upnp");
+ } else {
+ getLc().setFirewallPolicy(FirewallPolicy.UseUpnp);
+ }
+ }
+ else {
+ String stun = getStunServer();
+ if (stun != null && stun.length() > 0) {
+ getLc().setFirewallPolicy(FirewallPolicy.UseStun);
+ } else {
+ getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
+ }
+ }
+ }
+
+ public boolean isUpnpEnabled() {
+ return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
+ }
+
+ public boolean isIceEnabled() {
+ return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
+ }
+
+ public void useRandomPort(boolean enabled) {
+ getConfig().setBool("sip", "sip_random_port", enabled); //FIXME
+ }
+
+ public boolean isUsingRandomPort() {
+ return getConfig().getBool("sip", "sip_random_port", true); //FIXME
+ }
+
+ public String getSipPort() {
+ Transports transports = getLc().getSignalingTransportPorts();
+ int port;
+ if (transports.udp > 0)
+ port = transports.udp;
+ else if (transports.tcp > 0)
+ port = transports.tcp;
+ else
+ port = transports.tls;
+ return String.valueOf(port);
+ }
+
+ public void setSipPort(int port) {
+ if (port <= 0)
return;
- getLc().setMediaEncryption(menc);
+ Transports transports = getLc().getSignalingTransportPorts();
+ if (transports.udp > 0)
+ transports.udp = port;
+ else if (transports.tcp > 0)
+ transports.tcp = port;
+ else
+ transports.tls = port;
+ getLc().setSignalingTransportPorts(transports);
}
+
public String getTransport() {
Transports transports = getLc().getSignalingTransportPorts();
@@ -396,88 +457,18 @@ public class LinphonePreferences {
}
getLc().setSignalingTransportPorts(transports);
}
-
- public String getStunServer() {
- return getLc().getStunServer();
+
+ public MediaEncryption getMediaEncryption() {
+ return getLc().getMediaEncryption();
}
- public void setStunServer(String stun) {
- getLc().setStunServer(stun);
- }
-
- public String getExpire() {
- return null; //TODO
- }
-
- public void setExpire(String expire) {
- //TODO
- }
-
- public String getSipPortIfNotRandom() {
- Transports transports = getLc().getSignalingTransportPorts();
- int port;
- if (transports.udp > 0)
- port = transports.udp;
- else if (transports.tcp > 0)
- port = transports.tcp;
- else
- port = transports.tls;
- return String.valueOf(port);
- }
-
- public void setSipPortIfNotRandom(int port) {
- if (port <= 0)
+ public void setMediaEncryption(MediaEncryption menc) {
+ if (menc == null)
return;
- Transports transports = getLc().getSignalingTransportPorts();
- if (transports.udp > 0)
- transports.udp = port;
- else if (transports.tcp > 0)
- transports.tcp = port;
- else
- transports.udp = port;
- getLc().setSignalingTransportPorts(transports);
- }
-
- public void setIceEnabled(boolean enabled) {
- if (enabled) {
- getLc().setFirewallPolicy(FirewallPolicy.UseIce);
- } else {
- String stun = getStunServer();
- if (stun != null && stun.length() > 0) {
- getLc().setFirewallPolicy(FirewallPolicy.UseStun);
- } else {
- getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
- }
- }
+ getLc().setMediaEncryption(menc);
}
- public boolean isIceEnabled() {
- return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
- }
-
- public void setUpnpEnabled(boolean enabled) {
- if (enabled) {
- if (isIceEnabled()) {
- Log.e("Cannot have both ice and upnp enabled, disabling upnp");
- } else {
- getLc().setFirewallPolicy(FirewallPolicy.UseUpnp);
- }
- }
- else {
- String stun = getStunServer();
- if (stun != null && stun.length() > 0) {
- getLc().setFirewallPolicy(FirewallPolicy.UseStun);
- } else {
- getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
- }
- }
- }
-
- public boolean isUpnpEnabled() {
- return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
- }
-
// Push Notifications
public void setPushNotificationEnabled(boolean enable) {
getConfig().setBool("app", "push_notification", enable);
@@ -496,27 +487,86 @@ public class LinphonePreferences {
}
// End of Push Notifications
- public void useRandomPort(boolean enabled) {
- //TODO
- }
-
- public boolean isUsingRandomPort() {
- return false; //TODO
- }
-
public void useIpv6(Boolean enable) {
getLc().enableIpv6(enable);
}
public boolean isUsingIpv6() {
- return false; //TODO
+ return getLc().isIpv6Enabled();
}
- public void setWifiOnlyEnabled(Boolean enable) {
- getConfig().setBool("app", "wifi_only", enable);
+ // End of network settings
+
+ // Advanced settings
+ public void setDebugEnabled(boolean enabled) {
+ getConfig().setBool("app", "debug", enabled);
+ LinphoneCoreFactory.instance().setDebugMode(enabled, getString(R.string.app_name));
}
- public boolean isWifiOnlyEnabled() {
- return getConfig().getBool("app", "wifi_only", false);
+ public boolean isDebugEnabled() {
+ return getConfig().getBool("app", "debug", false);
}
+
+ public void setBackgroundModeEnabled(boolean enabled) {
+ getConfig().setBool("app", "background_mode", enabled);
+ }
+
+ public boolean isBackgroundModeEnabled() {
+ return getConfig().getBool("app", "background_mode", true);
+ }
+
+ public void setAnimationsEnabled(boolean enabled) {
+ getConfig().setBool("app", "animations", enabled);
+ }
+
+ public boolean areAnimationsEnabled() {
+ return getConfig().getBool("app", "animations", false);
+ }
+
+ public boolean isAutoStartEnabled() {
+ return getConfig().getBool("app", "auto_start", false);
+ }
+
+ public void setAutoStart(boolean autoStartEnabled) {
+ getConfig().setBool("app", "auto_start", autoStartEnabled);
+ }
+
+ public String getSharingPictureServerUrl() {
+ return getConfig().getString("app", "sharing_server", null);
+ }
+
+ public void setSharingPictureServerUrl(String url) {
+ getConfig().setString("app", "sharing_server", url);
+ }
+
+ public void setRemoteProvisioningUrl(String url) {
+ getConfig().setString("app", "remote_provisioning", url);
+ }
+
+ public String getRemoteProvisioningUrl() {
+ return getConfig().getString("app", "remote_provisioning", null);
+ }
+
+ public void setDefaultDisplayName(String displayName) {
+ getLc().setPrimaryContact(displayName, getDefaultUsername());
+ }
+
+ public String getDefaultDisplayName() {
+ return getLc().getPrimaryContactDisplayName();
+ }
+
+ public void setDefaultUsername(String username) {
+ getLc().setPrimaryContact(getDefaultDisplayName(), username);
+ }
+
+ public String getDefaultUsername() {
+ return getLc().getPrimaryContactUsername();
+ }
+ // End of advanced settings
+
+ // Tunnel settings
+ public String getTunnelMode() {
+ return null; //TODO
+ }
+ // End of tunnel settings
}
diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java
index 84751c6b1..78a5906d7 100644
--- a/src/org/linphone/SettingsFragment.java
+++ b/src/org/linphone/SettingsFragment.java
@@ -50,9 +50,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
initNetworkSettings();
initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_key)));
- findPreference(getString(R.string.pref_image_sharing_server_key)).setSummary(mPrefs.getSharingPictureServerUrl());
- findPreference(getString(R.string.pref_remote_provisioning_key)).setSummary(mPrefs.getRemoteProvisioningUrl());
- findPreference(getString(R.string.pref_expire_key)).setSummary(mPrefs.getExpire());
+ initAdvancedSettings();
// Add action on About button
findPreference(getString(R.string.menu_about_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@@ -96,6 +94,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
// Sets listener for each preference to update the matching value in linphonecore
private void setListeners() {
setNetworkPreferencesListener();
+ setAdvancedPreferencesListener();
}
// Read the values set in resources and hides the settings accordingly
@@ -205,6 +204,11 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
preference.setLayoutResource(R.layout.hidden);
}
+ private void setPreferenceDefaultValueAndSummary(int pref, String value) {
+ findPreference(getString(pref)).setDefaultValue(value);
+ findPreference(getString(pref)).setSummary(value);
+ }
+
private void initAccounts() {
PreferenceCategory accounts = (PreferenceCategory) findPreference(getString(R.string.pref_sipaccounts_key));
accounts.removeAll();
@@ -351,8 +355,8 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
// Disable sip port choice if port is random
Preference sipPort = findPreference(getString(R.string.pref_sip_port_key));
sipPort.setEnabled(!randomPort.isChecked());
- sipPort.setSummary(mPrefs.getSipPortIfNotRandom());
- sipPort.setDefaultValue(mPrefs.getSipPortIfNotRandom());
+ sipPort.setSummary(mPrefs.getSipPort());
+ sipPort.setDefaultValue(mPrefs.getSipPort());
Preference stun = findPreference(getString(R.string.pref_stun_server_key));
stun.setSummary(mPrefs.getStunServer());
@@ -407,7 +411,9 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
findPreference(getString(R.string.pref_transport_use_random_ports_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean randomPort = (Boolean) newValue;
mPrefs.useRandomPort((Boolean) newValue);
+ findPreference(getString(R.string.pref_sip_port_key)).setEnabled(!randomPort);
return true;
}
});
@@ -415,7 +421,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
findPreference(getString(R.string.pref_sip_port_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- mPrefs.setSipPortIfNotRandom((Integer) newValue);
+ mPrefs.setSipPort((Integer) newValue);
preference.setSummary(newValue.toString());
return true;
}
@@ -463,6 +469,95 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
});
}
+ private void initAdvancedSettings() {
+ ((CheckBoxPreference)findPreference(getString(R.string.pref_debug_key))).setChecked(mPrefs.isDebugEnabled());
+ ((CheckBoxPreference)findPreference(getString(R.string.pref_background_mode_key))).setChecked(mPrefs.isBackgroundModeEnabled());
+ ((CheckBoxPreference)findPreference(getString(R.string.pref_animation_enable_key))).setChecked(mPrefs.areAnimationsEnabled());
+ ((CheckBoxPreference)findPreference(getString(R.string.pref_autostart_key))).setChecked(mPrefs.isAutoStartEnabled());
+ setPreferenceDefaultValueAndSummary(R.string.pref_image_sharing_server_key, mPrefs.getSharingPictureServerUrl());
+ setPreferenceDefaultValueAndSummary(R.string.pref_remote_provisioning_key, mPrefs.getRemoteProvisioningUrl());
+ setPreferenceDefaultValueAndSummary(R.string.pref_display_name_key, mPrefs.getDefaultDisplayName());
+ setPreferenceDefaultValueAndSummary(R.string.pref_user_name_key, mPrefs.getDefaultUsername());
+ }
+
+ private void setAdvancedPreferencesListener() {
+ findPreference(getString(R.string.pref_debug_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ mPrefs.setDebugEnabled(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_background_mode_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ mPrefs.setBackgroundModeEnabled(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_animation_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ mPrefs.setAnimationsEnabled(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_autostart_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean value = (Boolean) newValue;
+ mPrefs.setAutoStart(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_image_sharing_server_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ String value = (String) newValue;
+ mPrefs.setSharingPictureServerUrl(value);
+ preference.setSummary(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_remote_provisioning_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ String value = (String) newValue;
+ mPrefs.setRemoteProvisioningUrl(value);
+ preference.setSummary(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_display_name_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ String value = (String) newValue;
+ mPrefs.setDefaultDisplayName(value);
+ preference.setSummary(value);
+ return true;
+ }
+ });
+
+ findPreference(getString(R.string.pref_user_name_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ String value = (String) newValue;
+ mPrefs.setDefaultUsername(value);
+ preference.setSummary(value);
+ return true;
+ }
+ });
+ }
+
@Override
public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) {
diff --git a/src/org/linphone/setup/SetupActivity.java b/src/org/linphone/setup/SetupActivity.java
index 04e4b96bf..0da73db4a 100644
--- a/src/org/linphone/setup/SetupActivity.java
+++ b/src/org/linphone/setup/SetupActivity.java
@@ -289,7 +289,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
mPrefs.setTransport(getString(R.string.pref_transport_tls_key));
}
- mPrefs.setExpire("604800");
+ mPrefs.setNewAccountExpires("604800");
mPrefs.setNewAccountOutboundProxyEnabled(true);
mPrefs.setStunServer(getString(R.string.default_stun));
mPrefs.setIceEnabled(true);
diff --git a/submodules/belle-sip b/submodules/belle-sip
index 3184f1537..a0b22b83b 160000
--- a/submodules/belle-sip
+++ b/submodules/belle-sip
@@ -1 +1 @@
-Subproject commit 3184f1537672d54d16c219ba1351149ca7c2b104
+Subproject commit a0b22b83b56385234d1facfd9fbd4a2a961668f2
diff --git a/submodules/linphone b/submodules/linphone
index bcd22f8a7..fc61fbd1a 160000
--- a/submodules/linphone
+++ b/submodules/linphone
@@ -1 +1 @@
-Subproject commit bcd22f8a741f83a78631b547c71ead9d26d065bb
+Subproject commit fc61fbd1aab9d5cf715682bd16d30399df46da48