From 81a2b89243aa6895f268749f653ae23d7810e9b4 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 14 Oct 2013 14:42:45 +0200 Subject: [PATCH] More settings binded (advanced) --- res/xml/account_preferences.xml | 5 + res/xml/preferences.xml | 5 - .../linphone/AccountPreferencesFragment.java | 37 +- src/org/linphone/LinphoneManager.java | 2 +- src/org/linphone/LinphonePreferences.java | 394 ++++++++++-------- src/org/linphone/SettingsFragment.java | 107 ++++- src/org/linphone/setup/SetupActivity.java | 2 +- submodules/belle-sip | 2 +- submodules/linphone | 2 +- 9 files changed, 357 insertions(+), 199 deletions(-) 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