From cbb8641c916b6679aba544a1aeeceee4d623eb14 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 10 Oct 2013 15:56:06 +0200 Subject: [PATCH] More settings working (accounts and network mostly) --- .../linphone/AccountPreferencesFragment.java | 31 ++-- src/org/linphone/LinphoneManager.java | 1 - src/org/linphone/LinphonePreferences.java | 123 +++++++++---- src/org/linphone/SettingsFragment.java | 173 +++++++++++++++--- src/org/linphone/StatusFragment.java | 16 +- 5 files changed, 261 insertions(+), 83 deletions(-) diff --git a/src/org/linphone/AccountPreferencesFragment.java b/src/org/linphone/AccountPreferencesFragment.java index 8a98023f2..909acdc58 100644 --- a/src/org/linphone/AccountPreferencesFragment.java +++ b/src/org/linphone/AccountPreferencesFragment.java @@ -18,10 +18,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -import org.linphone.compatibility.Compatibility; import org.linphone.ui.PreferencesListFragment; import android.os.Bundle; +import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; @@ -92,19 +92,27 @@ public class AccountPreferencesFragment extends PreferencesListFragment { OnPreferenceChangeListener outboundProxyChangedListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - LinphonePreferences.instance().setAccountOutboundProxyEnabled(n, (Boolean)newValue); + LinphonePreferences.instance().setAccountOutboundProxyEnabled(n, (Boolean) newValue); return true; } }; OnPreferenceChangeListener disableChangedListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - LinphonePreferences.instance().setAccountEnabled(n, (Boolean)newValue); + LinphonePreferences.instance().setAccountEnabled(n, (Boolean) newValue); + return true; + } + }; + OnPreferenceChangeListener deleteChangedListener = new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { return true; } }; private void manageAccountPreferencesFields(PreferenceScreen parent) { + boolean isDefaultAccount = LinphonePreferences.instance().getDefaultAccountIndex() == n; + PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().getPreference(0); EditTextPreference username = (EditTextPreference) account.getPreference(0); username.setText(LinphonePreferences.instance().getAccountUsername(n)); @@ -136,13 +144,14 @@ public class AccountPreferencesFragment extends PreferencesListFragment { proxy.setOnPreferenceChangeListener(proxyChangedListener); proxy.setSummary("".equals(proxy.getText()) || (proxy.getText() == null) ? getString(R.string.pref_help_proxy) : proxy.getText()); - Preference outboundProxy = advanced.getPreference(1); - Compatibility.setPreferenceChecked(outboundProxy, LinphonePreferences.instance().isAccountOutboundProxySet(n)); + CheckBoxPreference outboundProxy = (CheckBoxPreference) advanced.getPreference(1); + outboundProxy.setChecked(LinphonePreferences.instance().isAccountOutboundProxySet(n)); outboundProxy.setOnPreferenceChangeListener(outboundProxyChangedListener); - final Preference disable = advanced.getPreference(2); + final CheckBoxPreference disable = (CheckBoxPreference) advanced.getPreference(2); disable.setEnabled(true); - Compatibility.setPreferenceChecked(disable, !LinphonePreferences.instance().isAccountEnabled(n)); + disable.setChecked(!LinphonePreferences.instance().isAccountEnabled(n)); + disable.setOnPreferenceChangeListener(disableChangedListener); final Preference delete = advanced.getPreference(4); delete.setEnabled(true); @@ -154,15 +163,15 @@ public class AccountPreferencesFragment extends PreferencesListFragment { } }); - Preference mainAccount = advanced.getPreference(3); - Compatibility.setPreferenceChecked(mainAccount, LinphonePreferences.instance().getDefaultAccountIndex() == n); - mainAccount.setEnabled(!Compatibility.isPreferenceChecked(mainAccount)); + CheckBoxPreference mainAccount = (CheckBoxPreference) advanced.getPreference(3); + mainAccount.setChecked(isDefaultAccount); + mainAccount.setEnabled(!mainAccount.isChecked()); mainAccount.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { LinphonePreferences.instance().setDefaultAccount(n); disable.setEnabled(false); - Compatibility.setPreferenceChecked(disable, false); + disable.setChecked(false); preference.setEnabled(false); return true; } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index e8bc004ca..f2bde9026 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -600,7 +600,6 @@ public class LinphoneManager implements LinphoneCoreListener { private void copyIfNotExist(int ressourceId,String target) throws IOException { File lFileToCopy = new File(target); - Log.w("File " + target + " exists ? " + lFileToCopy.exists()); if (!lFileToCopy.exists()) { copyFromPackage(ressourceId,lFileToCopy.getName()); } diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java index 341389200..b80a0c455 100644 --- a/src/org/linphone/LinphonePreferences.java +++ b/src/org/linphone/LinphonePreferences.java @@ -60,14 +60,15 @@ public class LinphonePreferences { } public boolean isFirstLaunch() { - return false; + return getLc().getConfig().getBool("app", "first_launch", true); } - public void firstLaunchSuccessful() { + public void firstLaunchSuccessful() { + getLc().getConfig().setBool("app", "first_launch", false); } public boolean isDebugEnabled() { - return true; + return true; //TODO } public void setRemoteProvisioningUrl(String url) { @@ -79,31 +80,31 @@ public class LinphonePreferences { } public String getTunnelMode() { - return null; + return null; //TODO } public boolean useFrontCam() { - return false; + return false; //TODO } public boolean isVideoEnabled() { - return false; + return false; //TODO } public boolean shouldInitiateVideoCall() { - return false; + return false; //TODO } public boolean shouldAutomaticallyAcceptVideoRequests() { - return false; + return false; //TODO } public void setPushNotificationRegistrationID(String regId) { - + //TODO } public String getPushNotificationRegistrationID() { - return null; + return null; //TODO } public boolean isAutoStartEnabled() { @@ -123,35 +124,35 @@ public class LinphonePreferences { } public boolean shouldUseLinphoneToStoreChatHistory() { - return false; + return false; //TODO } public boolean areAnimationsEnabled() { - return false; + return false; //TODO } public boolean shouldAutomaticallyAcceptFriendsRequests() { - return false; + return false; //TODO } public boolean isBackgroundModeEnabled() { - return false; + return false; //TODO } public boolean shouldOnlyRegisterOnWifiNetwork() { - return false; + return false; //TODO } public boolean shouldUseSoftvolume() { - return false; + return false; //TODO } public String getRingtone(String defaultRingtone) { - return defaultRingtone; + return defaultRingtone; //TODO } public void setRingtone(String ringtone) { - + //TODO } // Accounts @@ -177,7 +178,7 @@ public class LinphonePreferences { private boolean tempOutboundProxy; /** - * Saves a created account or an edited account + * Creates a new account using values previously set using setNew* functions * @throws LinphoneCoreException */ public void saveNewAccount() throws LinphoneCoreException { @@ -208,7 +209,7 @@ public class LinphonePreferences { } public void setAccountUsername(int n, String username) { - + getAuthInfo(n).setUsername(username); } public String getAccountUsername(int n) { @@ -220,7 +221,7 @@ public class LinphonePreferences { } public void setAccountUserId(int n, String userId) { - + getAuthInfo(n).setUserId(userId); } public String getAccountUserId(int n) { @@ -232,7 +233,7 @@ public class LinphonePreferences { } public void setAccountPassword(int n, String password) { - + getAuthInfo(n).setPassword(password); } public String getAccountPassword(int n) { @@ -244,7 +245,7 @@ public class LinphonePreferences { } public void setAccountDomain(int n, String domain) { - + //TODO } public String getAccountDomain(int n) { @@ -256,7 +257,7 @@ public class LinphonePreferences { } public void setAccountProxy(int n, String proxy) { - + //TODO } public String getAccountProxy(int n) { @@ -268,16 +269,12 @@ public class LinphonePreferences { } public void setAccountOutboundProxyEnabled(int n, boolean enabled) { - + //TODO } public boolean isAccountOutboundProxySet(int n) { return getProxyConfig(n).getRoute() != null; } - - public void setAccountEnabled(int n, Boolean enabled) { - - } public void setDefaultAccount(int accountIndex) { LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList(); @@ -289,23 +286,33 @@ public class LinphonePreferences { LinphoneProxyConfig defaultPrxCfg = getLc().getDefaultProxyConfig(); LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList(); for (int i = 0; i < prxCfgs.length; i++) { - if (defaultPrxCfg.equals(prxCfgs[i])) { + if (defaultPrxCfg.getIdentity().equals(prxCfgs[i].getIdentity())) { return i; } } - return -1; + return 0; } public int getAccountCount() { return getLc().getProxyConfigList().length; } + public void setAccountEnabled(int n, boolean disabled) { + LinphoneProxyConfig prxCfg = getProxyConfig(n); + try { + prxCfg.enableRegister(!disabled); + prxCfg.done(); + } catch (LinphoneCoreException e) { + e.printStackTrace(); + } + } + public boolean isAccountEnabled(int n) { - return false; + return getProxyConfig(n).registerEnabled(); } public void deleteAccount(int n) { - + //TODO } // End of Accounts @@ -372,11 +379,11 @@ public class LinphonePreferences { } public String getExpire() { - return null; + return null; //TODO } public void setExpire(String expire) { - + //TODO } public String getSipPortIfNotRandom() { @@ -405,11 +412,51 @@ public class LinphonePreferences { getLc().setSignalingTransportPorts(transports); } - public void setIceEnabled(boolean b) { - + public void setIceEnabled(boolean enabled) { + //TODO + } + + public boolean isIceEnabled() { + return false; //TODO + } + + public void setUpnpEnabled(boolean enabled) { + //TODO + } + + public boolean isUpnpEnabled() { + return false; //TODO } public void setPushNotificationEnabled(boolean b) { - + //TODO + } + + public boolean isPushNotificationEnabled() { + return false; //TODO + } + + public void useRandomPort(boolean enabled) { + //TODO + } + + public boolean isUsingRandomPort() { + return false; //TODO + } + + public void useIpv6(Boolean newValue) { + //TODO + } + + public boolean isUsingIpv6() { + return false; //TODO + } + + public void setWifiOnlyEnabled(Boolean newValue) { + //TODO + } + + public boolean isWifiOnlyEnabled() { + return false; //TODO } } diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index a16d9d485..796c96470 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -46,11 +46,10 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib // Inits the values or the listener on some settings private void initSettings() { //initAccounts(); Init accounts on Resume instead of on Create to update the account list when coming back from wizard - initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key))); - initializeTransportPreferences((ListPreference) findPreference(getString(R.string.pref_transport_key))); + + initNetworkSettings(); initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_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()); @@ -75,11 +74,6 @@ 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(!((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); @@ -98,27 +92,12 @@ 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; - } - }); - findPreference(getString(R.string.pref_transport_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - mPrefs.setTransport(newValue.toString()); - preference.setSummary(mPrefs.getTransport()); - return true; - } - }); + setNetworkPreferencesListener(); } - + // Read the values set in resources and hides the settings accordingly private void hideSettings() { if (!getResources().getBoolean(R.bool.display_about_in_settings)) { @@ -231,6 +210,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib accounts.removeAll(); // Get already configured extra accounts + int defaultAccountID = mPrefs.getDefaultAccountIndex(); int nbAccounts = mPrefs.getAccountCount(); for (int i = 0; i < nbAccounts; i++) { final int accountId = i; @@ -245,6 +225,10 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib account.setTitle(username + "@" + domain); } + if (defaultAccountID == i) { + account.setSummary(R.string.pref_default_account); + } + account.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { @@ -284,7 +268,15 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib setListPreferenceValues(pref, entries, values); } - pref.setSummary(mPrefs.getMediaEncryption().toString()); + MediaEncryption value = mPrefs.getMediaEncryption(); + pref.setSummary(value.toString()); + + String key = getString(R.string.pref_media_encryption_key_none); + if (value.toString().equals(getString(R.string.media_encryption_srtp))) + key = getString(R.string.pref_media_encryption_key_srtp); + else if (value.toString().equals(getString(R.string.media_encryption_zrtp))) + key = getString(R.string.pref_media_encryption_key_zrtp); + pref.setDefaultValue(key); } private void initializeTransportPreferences(ListPreference pref) { @@ -300,7 +292,14 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib values.add(getString(R.string.pref_transport_tls_key)); } setListPreferenceValues(pref, entries, values); - pref.setSummary(mPrefs.getTransport()); + String value = mPrefs.getTransport(); + pref.setSummary(value); + String key = getString(R.string.pref_transport_udp_key); + if (value.equals(getString(R.string.pref_transport_tcp))) + key = getString(R.string.pref_transport_tcp_key); + else if (value.equals(getString(R.string.pref_transport_tls))) + key = getString(R.string.pref_transport_tls_key); + pref.setDefaultValue(key); } private void initializePreferredVideoSizePreferences(ListPreference pref) { @@ -327,6 +326,124 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib pref.setEntryValues(contents); } + private void initNetworkSettings() { + initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key))); + initializeTransportPreferences((ListPreference) findPreference(getString(R.string.pref_transport_key))); + + ((CheckBoxPreference) findPreference(getString(R.string.pref_wifi_only_key))).setChecked(mPrefs.isWifiOnlyEnabled()); + ((CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key))).setChecked(mPrefs.isIceEnabled()); + ((CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key))).setChecked(mPrefs.isUpnpEnabled()); + + CheckBoxPreference randomPort = (CheckBoxPreference) findPreference(getString(R.string.pref_transport_use_random_ports_key)); + randomPort.setChecked(mPrefs.isUsingRandomPort()); + + // 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()); + + Preference stun = findPreference(getString(R.string.pref_stun_server_key)); + stun.setSummary(mPrefs.getStunServer()); + stun.setDefaultValue(mPrefs.getStunServer()); + + ((CheckBoxPreference) findPreference(getString(R.string.pref_push_notification_key))).setChecked(mPrefs.isPushNotificationEnabled()); + ((CheckBoxPreference) findPreference(getString(R.string.pref_ipv6_key))).setChecked(mPrefs.isUsingIpv6()); + } + + private void setNetworkPreferencesListener() { + findPreference(getString(R.string.pref_wifi_only_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setWifiOnlyEnabled((Boolean) newValue); + return true; + } + }); + + 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; + } + }); + + findPreference(getString(R.string.pref_ice_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setIceEnabled((Boolean) newValue); + return true; + } + }); + + findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setUpnpEnabled((Boolean) newValue); + return true; + } + }); + + findPreference(getString(R.string.pref_transport_use_random_ports_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.useRandomPort((Boolean) newValue); + return true; + } + }); + + findPreference(getString(R.string.pref_sip_port_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setSipPortIfNotRandom((Integer) newValue); + preference.setSummary(newValue.toString()); + return true; + } + }); + + findPreference(getString(R.string.pref_transport_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setTransport(newValue.toString()); + preference.setSummary(mPrefs.getTransport()); + return true; + } + }); + + findPreference(getString(R.string.pref_media_encryption_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + String value = newValue.toString(); + MediaEncryption menc = MediaEncryption.None; + if (value.equals(getString(R.string.pref_media_encryption_key_srtp))) + menc = MediaEncryption.SRTP; + else if (value.equals(getString(R.string.pref_media_encryption_key_zrtp))) + menc = MediaEncryption.ZRTP; + mPrefs.setMediaEncryption(menc); + + preference.setSummary(mPrefs.getMediaEncryption().toString()); + return true; + } + }); + + findPreference(getString(R.string.pref_push_notification_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.setPushNotificationEnabled((Boolean) newValue); + return true; + } + }); + + findPreference(getString(R.string.pref_ipv6_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + mPrefs.useIpv6((Boolean) newValue); + return true; + } + }); + } + @Override public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) { diff --git a/src/org/linphone/StatusFragment.java b/src/org/linphone/StatusFragment.java index 10f2c93c3..c2f78ecb8 100644 --- a/src/org/linphone/StatusFragment.java +++ b/src/org/linphone/StatusFragment.java @@ -588,12 +588,18 @@ public class StatusFragment extends Fragment { break; } } - if (LinphonePreferences.instance().getDefaultAccountIndex() == accountIndex) { - isDefault.setChecked(true); - isDefault.setEnabled(false); - status.setImageResource(getStatusIconResource(lpc.getState(), true)); + + // Force led if account is disabled + if (!LinphonePreferences.instance().isAccountEnabled(accountIndex)) { + status.setImageResource(getStatusIconResource(RegistrationState.RegistrationNone, false)); } else { - status.setImageResource(getStatusIconResource(lpc.getState(), false)); + if (LinphonePreferences.instance().getDefaultAccountIndex() == accountIndex) { + isDefault.setChecked(true); + isDefault.setEnabled(false); + status.setImageResource(getStatusIconResource(lpc.getState(), true)); + } else { + status.setImageResource(getStatusIconResource(lpc.getState(), false)); + } } isDefault.setOnClickListener(defaultListener);