diff --git a/src/org/linphone/BootReceiver.java b/src/org/linphone/BootReceiver.java index 6acb5a4e0..c114661e9 100644 --- a/src/org/linphone/BootReceiver.java +++ b/src/org/linphone/BootReceiver.java @@ -27,7 +27,7 @@ public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - if (LinphonePreferences.instance().shouldStartAtStartup()) { + if (LinphonePreferences.instance().isAutoStartEnabled()) { Intent lLinphoneServiceIntent = new Intent(Intent.ACTION_MAIN); lLinphoneServiceIntent.setClass(context, LinphoneService.class); context.startService(lLinphoneServiceIntent);; diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java index 41af8096d..6a0bdac47 100644 --- a/src/org/linphone/LinphonePreferences.java +++ b/src/org/linphone/LinphonePreferences.java @@ -1,4 +1,11 @@ package org.linphone; + +import org.linphone.core.LinphoneCore.MediaEncryption; +import org.linphone.core.LinphoneCore.Transports; +import org.linphone.core.LinphoneCoreFactory; + +import android.content.Context; + /* ChatListFragment.java Copyright (C) 2012 Belledonne Communications, Grenoble, France @@ -23,6 +30,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ public class LinphonePreferences { private static LinphonePreferences instance; + private Context mContext; public static final synchronized LinphonePreferences instance() { if (instance == null) { @@ -35,6 +43,14 @@ public class LinphonePreferences { } + private String getString(int key) { + if (mContext == null) { + mContext = LinphoneService.instance(); + } + + return mContext.getString(key); + } + public boolean isFirstLaunch() { return false; } @@ -46,8 +62,12 @@ public class LinphonePreferences { return false; } + public void setRemoteProvisioningUrl(String url) { + LinphoneManager.getLcIfManagerNotDestroyedOrNull().getConfig().setString("app", "remote_provisioning", url); + } + public String getRemoteProvisioningUrl() { - return null; + return LinphoneCoreFactory.instance().createLpConfig(LinphoneManager.getInstance().mLinphoneConfigFile).getString("app", "remote_provisioning", null); } public String getTunnelMode() { @@ -78,12 +98,20 @@ public class LinphonePreferences { return null; } - public boolean shouldStartAtStartup() { - return false; + public boolean isAutoStartEnabled() { + return LinphoneManager.getLcIfManagerNotDestroyedOrNull().getConfig().getBool("app", "auto_start", false); + } + + public void setAutoStart(boolean autoStartEnabled) { + LinphoneManager.getLcIfManagerNotDestroyedOrNull().getConfig().setBool("app", "auto_start", autoStartEnabled); } public String getSharingPictureServerUrl() { - return null; + return LinphoneManager.getLcIfManagerNotDestroyedOrNull().getConfig().getString("app", "sharing_server", null); + } + + public void setSharingPictureServerUrl(String url) { + LinphoneManager.getLcIfManagerNotDestroyedOrNull().getConfig().setString("app", "sharing_server", url); } public boolean shouldUseLinphoneToStoreChatHistory() { @@ -195,4 +223,100 @@ public class LinphonePreferences { } // End of Accounts + + public MediaEncryption getMediaEncryption() { + return LinphoneManager.getLcIfManagerNotDestroyedOrNull().getMediaEncryption(); + } + + public void setMediaEncryption(MediaEncryption menc) { + if (menc == null) + return; + + LinphoneManager.getLcIfManagerNotDestroyedOrNull().setMediaEncryption(menc); + } + + public String getTransport() { + Transports transports = LinphoneManager.getLcIfManagerNotDestroyedOrNull().getSignalingTransportPorts(); + String transport = getString(R.string.pref_transport_udp); + if (transports.tcp > 0) + transport = getString(R.string.pref_transport_tcp_key); + else if (transports.tls > 0) + transport = getString(R.string.pref_transport_tls_key); + return transport; + } + + public void setTransport(String transportKey) { + if (transportKey == null) + return; + + Transports transports = LinphoneManager.getLcIfManagerNotDestroyedOrNull().getSignalingTransportPorts(); + if (transports.udp > 0) { + if (transportKey.equals(getString(R.string.pref_transport_tcp_key))) { + transports.tcp = transports.udp; + transports.udp = transports.tls; + } else if (transportKey.equals(getString(R.string.pref_transport_tls_key))) { + transports.tls = transports.udp; + transports.udp = transports.tcp; + } + } else if (transports.tcp > 0) { + if (transportKey.equals(getString(R.string.pref_transport_udp_key))) { + transports.udp = transports.tcp; + transports.tcp = transports.tls; + } else if (transportKey.equals(getString(R.string.pref_transport_tls_key))) { + transports.tls = transports.tcp; + transports.tcp = transports.udp; + } + } else if (transports.tls > 0) { + if (transportKey.equals(getString(R.string.pref_transport_udp_key))) { + transports.udp = transports.tls; + transports.tls = transports.tcp; + } else if (transportKey.equals(getString(R.string.pref_transport_tcp_key))) { + transports.tcp = transports.tls; + transports.tls = transports.udp; + } + } + LinphoneManager.getLcIfManagerNotDestroyedOrNull().setSignalingTransportPorts(transports); + } + + public String getStunServer() { + return LinphoneManager.getLcIfManagerNotDestroyedOrNull().getStunServer(); + } + + public void setStunServer(String stun) { + LinphoneManager.getLcIfManagerNotDestroyedOrNull().setStunServer(stun); + } + + public String getExpire() { + return null; + } + + public void setExpire(String expire) { + + } + + public String getSipPortIfNotRandom() { + Transports transports = LinphoneManager.getLcIfManagerNotDestroyedOrNull().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) + return; + + Transports transports = LinphoneManager.getLcIfManagerNotDestroyedOrNull().getSignalingTransportPorts(); + if (transports.udp > 0) + transports.udp = port; + else if (transports.tcp > 0) + transports.tcp = port; + else + transports.udp = port; + LinphoneManager.getLcIfManagerNotDestroyedOrNull().setSignalingTransportPorts(transports); + } } diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index 3cf38ca02..d554c3bd9 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -17,13 +17,17 @@ import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; -import android.preference.PreferenceScreen; +import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceCategory; +import android.preference.PreferenceScreen; public class SettingsFragment extends PreferencesListFragment implements EcCalibrationListener { + private LinphonePreferences mPrefs; + public SettingsFragment() { super(R.xml.preferences); + mPrefs = LinphonePreferences.instance(); } @Override @@ -41,6 +45,11 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key))); initializeTransportPreferences((ListPreference) findPreference(getString(R.string.pref_transport_key))); + findPreference(getString(R.string.pref_stun_server_key)).setSummary(mPrefs.getStunServer()); + 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()); + // Add action on About button findPreference(getString(R.string.menu_about_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override @@ -54,8 +63,10 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib }); // Disable sip port choice if port is random - findPreference(getString(R.string.pref_sip_port_key)).setEnabled(!((CheckBoxPreference)findPreference(getString(R.string.pref_transport_use_random_ports_key))).isChecked()); - + Preference sipPort = findPreference(getString(R.string.pref_sip_port_key)); + sipPort.setEnabled(!((CheckBoxPreference)findPreference(getString(R.string.pref_transport_use_random_ports_key))).isChecked()); + sipPort.setSummary(mPrefs.getSipPortIfNotRandom()); + if (getResources().getBoolean(R.bool.disable_all_patented_codecs_for_markets)) { Preference prefH264 = findPreference(getString(R.string.pref_video_codec_h264_key)); prefH264.setEnabled(false); @@ -75,8 +86,16 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib } } + // Sets listener for each preference to update the matching value in linphonecore private void setListeners() { - + findPreference(getString(R.string.pref_stun_server_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setStunServer(newValue.toString()); + preference.setSummary(newValue.toString()); + return true; + } + }); } // Read the values set in resources and hides the settings accordingly @@ -187,16 +206,12 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib } private void initMediaEncryptionPreference(ListPreference pref) { - LinphoneCore lc = null; - try { - lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - } catch (Exception e) {} - List mencEntries = new ArrayList(); List mencEntryValues = new ArrayList(); mencEntries.add(getString(R.string.media_encryption_none)); mencEntryValues.add(getString(R.string.pref_media_encryption_key_none)); - + + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null || getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) { setListPreferenceValues(pref, mencEntries, mencEntryValues); return; @@ -217,6 +232,8 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib } setListPreferenceValues(pref, mencEntries, mencEntryValues); } + + pref.setSummary(mPrefs.getMediaEncryption().toString()); } private void initializeTransportPreferences(ListPreference pref) { @@ -232,6 +249,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib mencEntryValues.add(getString(R.string.pref_transport_tls_key)); } setListPreferenceValues(pref, mencEntries, mencEntryValues); + pref.setSummary(mPrefs.getTransport()); } private static void setListPreferenceValues(ListPreference pref, List entries, List values) {