/**
* Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
* This file is part of CSipSimple.
*
* CSipSimple is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* If you own a pjsip commercial license you can also redistribute it
* and/or modify it under the terms of the GNU Lesser General Public License
* as an android library.
*
* CSipSimple is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with CSipSimple. If not, see <http://www.gnu.org/licenses/>.
*/
package com.csipsimple.wizards.impl;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.text.TextUtils;
import com.csipsimple.R;
import com.csipsimple.api.SipProfile;
import com.csipsimple.api.SipUri;
import com.csipsimple.api.SipUri.ParsedSipContactInfos;
import java.util.HashMap;
public class Advanced extends BaseImplementation {
protected static final String THIS_FILE = "Advanced W";
protected EditTextPreference accountDisplayName;
protected EditTextPreference accountUserName;
protected EditTextPreference accountServer;
protected EditTextPreference accountPassword;
protected EditTextPreference accountCallerId;
protected CheckBoxPreference accountUseTcp;
protected EditTextPreference accountProxy;
protected EditTextPreference accountAuthId;
protected final static String FIELD_DISPLAY_NAME = "display_name";
protected final static String FIELD_CALLER_ID = "caller_id";
protected final static String FIELD_SERVER = "server";
protected final static String FIELD_USERNAME = "username";
protected final static String FIELD_AUTH_ID = "auth_id";
protected final static String FIELD_PASSWORD = "password";
protected final static String FIELD_TCP = "use_tcp";
protected final static String FIELD_PROXY = "proxy";
private void bindFields() {
accountDisplayName = (EditTextPreference) findPreference(FIELD_DISPLAY_NAME);
accountCallerId = (EditTextPreference) findPreference(FIELD_CALLER_ID);
accountServer = (EditTextPreference) findPreference(FIELD_SERVER);
accountUserName = (EditTextPreference) findPreference(FIELD_USERNAME);
accountAuthId = (EditTextPreference) findPreference(FIELD_AUTH_ID);
accountPassword = (EditTextPreference) findPreference(FIELD_PASSWORD);
accountUseTcp = (CheckBoxPreference) findPreference(FIELD_TCP);
accountProxy = (EditTextPreference) findPreference(FIELD_PROXY);
}
public void fillLayout(final SipProfile account) {
bindFields();
accountDisplayName.setText(account.display_name);
ParsedSipContactInfos parsedInfo = SipUri.parseSipContact(account.acc_id);
String serverFull = account.reg_uri;
if (serverFull == null) {
serverFull = "";
}else {
serverFull = serverFull.replaceFirst("sip:", "");
}
// We have to set safe, because custom wizards may hide some fields
setFieldTextSafe(accountServer, serverFull);
setFieldTextSafe(accountCallerId, parsedInfo.displayName);
setFieldTextSafe(accountUserName, parsedInfo.userName);
if(!TextUtils.isEmpty(account.username)
&& !account.username.equals(parsedInfo.userName)) {
setFieldTextSafe(accountAuthId, account.username);
}else {
setFieldTextSafe(accountAuthId, "");
}
setFieldTextSafe(accountPassword, account.data);
if(accountUseTcp != null) {
accountUseTcp.setChecked(account.transport == SipProfile.TRANSPORT_TCP);
}
if(account.proxies != null && account.proxies.length > 0) {
setFieldTextSafe(accountProxy, account.proxies[0].replaceFirst("sip:", ""));
}else {
setFieldTextSafe(accountProxy, "");
}
}
private void setFieldTextSafe(EditTextPreference pref, String value) {
if(pref != null) {
pref.setText(value);
}
}
public void updateDescriptions() {
setStringFieldSummary(FIELD_DISPLAY_NAME);
setStringFieldSummary(FIELD_CALLER_ID);
setStringFieldSummary(FIELD_SERVER);
setStringFieldSummary(FIELD_USERNAME);
setStringFieldSummary(FIELD_AUTH_ID);
setPasswordFieldSummary(FIELD_PASSWORD);
setStringFieldSummary(FIELD_PROXY);
}
private static HashMap<String, Integer>SUMMARIES = new HashMap<String, Integer>(){/**
*
*/
private static final long serialVersionUID = 3055562364235868653L;
{
put(FIELD_DISPLAY_NAME, R.string.w_common_display_name_desc);
put(FIELD_CALLER_ID, R.string.w_advanced_caller_id_desc);
put(FIELD_SERVER, R.string.w_common_server_desc);
put(FIELD_USERNAME, R.string.w_advanced_username_desc);
put(FIELD_AUTH_ID, R.string.w_advanced_auth_id_desc);
put(FIELD_PASSWORD, R.string.w_advanced_password_desc);
put(FIELD_PROXY, R.string.w_advanced_proxy_desc);
}};
@Override
public String getDefaultFieldSummary(String fieldName) {
Integer res = SUMMARIES.get(fieldName);
if(res != null) {
return parent.getString( res );
}
return "";
}
public boolean canSave() {
boolean isValid = true;
isValid &= checkField(accountDisplayName, isEmpty(accountDisplayName));
//isValid &= checkField(accountCallerId, isEmpty(accountCallerId));
isValid &= checkField(accountServer, isEmpty(accountServer));
isValid &= checkField(accountUserName, isEmpty(accountUserName));
isValid &= checkField(accountPassword, isEmpty(accountPassword));
return isValid;
}
protected String getServer() {
return accountServer.getText();
}
public SipProfile buildAccount(SipProfile account) {
account.display_name = accountDisplayName.getText().trim();
String[] serverParts = getServer().split(":");
account.acc_id = accountCallerId.getText().trim() +
" <sip:" + SipUri.encodeUser(accountUserName.getText().trim()) + "@" + serverParts[0].trim() + ">";
account.reg_uri = "sip:" + getServer();
account.realm = "*";
account.username = getText(accountAuthId).trim();
if (TextUtils.isEmpty(account.username)) {
account.username = getText(accountUserName).trim();
}
account.data = getText(accountPassword);
account.scheme = SipProfile.CRED_SCHEME_DIGEST;
account.datatype = SipProfile.CRED_DATA_PLAIN_PASSWD;
account.transport = accountUseTcp.isChecked() ? SipProfile.TRANSPORT_TCP : SipProfile.TRANSPORT_AUTO;
if (!isEmpty(accountProxy)) {
account.proxies = new String[] { "sip:"+accountProxy.getText().trim() };
} else {
account.proxies = null;
}
return account;
}
@Override
public int getBasePreferenceResource() {
return R.xml.w_advanced_preferences;
}
@Override
public boolean needRestart() {
return false;
}
}