package info.kghost.android.openvpn;
import java.net.URISyntaxException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.view.KeyEvent;
public class AdvancedSettings extends PreferenceActivity {
private static final String KEY_PORT = "set_port";
private static final String KEY_PROTO = "set_protocol";
private static final String KEY_COMP_LZO = "set_comp_lzo";
private static final String KEY_NS_CERT_TYPE = "set_ns_cert_type";
private static final String KEY_REDIRECT_GATEWAY = "set_redirect_gateway";
private static final String KEY_SET_ADDR = "set_addr";
private static final String KEY_LOCAL_ADDR = "set_local_addr";
private static final String KEY_REMOTE_ADDR = "set_remote_addr";
private static final String KEY_CIPHER = "set_cipher";
private static final String KEY_KEYSIZE = "set_keysize";
private static final String KEY_USE_TLS_AUTH = "set_use_tls_auth";
private static final String KEY_TLS_KEY = "set_tls_auth_key";
private static final String KEY_TLS_AUTH_KEY_DIRECTION = "set_tls_auth_key_direction";
private static final String KEY_EXTRA = "set_extra";
private EditTextPreference mPort;
private ListPreference mProto;
private CheckBoxPreference mCompLzo;
private ListPreference mNsCertType;
private CheckBoxPreference mRedirectGateway;
private CheckBoxPreference mSetAddr;
private EditTextPreference mLocalAddr;
private EditTextPreference mRemoteAddr;
private EditTextPreference mCipher;
private EditTextPreference mKeySize;
private CheckBoxPreference mUseTlsAuth;
private FilePickPreference mTlsAuthKey;
private ListPreference mTlsAuthKeyDirection;
private EditTextPreference mExtra;
private OpenvpnProfile profile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
profile = getIntent().getParcelableExtra(VpnEditor.KEY_PROFILE);
addPreferencesFromResource(R.xml.openvpn_advanced_settings);
mPort = (EditTextPreference) findPreference(KEY_PORT);
mProto = (ListPreference) findPreference(KEY_PROTO);
mCompLzo = (CheckBoxPreference) findPreference(KEY_COMP_LZO);
mNsCertType = (ListPreference) findPreference(KEY_NS_CERT_TYPE);
mRedirectGateway = (CheckBoxPreference) findPreference(KEY_REDIRECT_GATEWAY);
mSetAddr = (CheckBoxPreference) findPreference(KEY_SET_ADDR);
mLocalAddr = (EditTextPreference) findPreference(KEY_LOCAL_ADDR);
mRemoteAddr = (EditTextPreference) findPreference(KEY_REMOTE_ADDR);
mCipher = (EditTextPreference) findPreference(KEY_CIPHER);
mKeySize = (EditTextPreference) findPreference(KEY_KEYSIZE);
mExtra = (EditTextPreference) findPreference(KEY_EXTRA);
mUseTlsAuth = (CheckBoxPreference) findPreference(KEY_USE_TLS_AUTH);
mTlsAuthKey = (FilePickPreference) findPreference(KEY_TLS_KEY);
mTlsAuthKeyDirection = (ListPreference) findPreference(KEY_TLS_AUTH_KEY_DIRECTION);
mPort.setSummary(profile.getPort());
mPort.setText(profile.getPort());
mPort.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
String name = (String) newValue;
name.trim();
profile.setPort(name);
mPort.setSummary(profile.getPort());
return true;
}
});
mProto.setSummary(profile.getProto());
mProto.setValue(profile.getProto());
mProto.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
String name = (String) newValue;
name.trim();
profile.setProto(name);
mProto.setSummary(profile.getProto());
return true;
}
});
mCompLzo.setChecked(profile.getUseCompLzo());
mCompLzo.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
Boolean b = (Boolean) newValue;
profile.setUseCompLzo(b);
return true;
}
});
mNsCertType.setValue(profile.getNsCertType());
mNsCertType.setSummary(mNsCertType.getEntry());
mNsCertType
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object newValue) {
String name = (String) newValue;
name.trim();
profile.setNsCertType(name);
mNsCertType.setValue(profile.getNsCertType());
mNsCertType.setSummary(mNsCertType.getEntry());
return true;
}
});
mRedirectGateway.setChecked(profile.getRedirectGateway());
mRedirectGateway
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object newValue) {
Boolean b = (Boolean) newValue;
profile.setRedirectGateway(b);
return true;
}
});
// This is inverted to cope with the way dependencies work
mSetAddr.setChecked(!profile.getSupplyAddr());
mSetAddr.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
Boolean b = (Boolean) newValue;
profile.setSupplyAddr(!b);
return true;
}
});
mLocalAddr.setSummary(profile.getLocalAddr());
mLocalAddr.setText(profile.getLocalAddr());
mLocalAddr
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object newValue) {
String name = (String) newValue;
name.trim();
profile.setLocalAddr(name);
mLocalAddr.setSummary(profile.getLocalAddr());
return true;
}
});
mRemoteAddr.setSummary(profile.getRemoteAddr());
mRemoteAddr.setText(profile.getRemoteAddr());
mRemoteAddr
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object newValue) {
String name = (String) newValue;
name.trim();
profile.setRemoteAddr(name);
mRemoteAddr.setSummary(profile.getRemoteAddr());
return true;
}
});
if (profile.getCipher() == null || profile.getCipher().equals(""))
mCipher.setSummary(R.string.vpn_openvpn_set_cipher_default);
else
mCipher.setSummary(profile.getCipher());
mCipher.setText(profile.getCipher());
mCipher.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
String name = (String) newValue;
name.trim();
profile.setCipher(name);
if (profile.getCipher().equals(""))
mCipher.setSummary(R.string.vpn_openvpn_set_cipher_default);
else
mCipher.setSummary(profile.getCipher());
return true;
}
});
if (profile.getKeySize() == null || profile.getKeySize().equals("0")) {
mKeySize.setSummary(R.string.vpn_openvpn_set_keysize_default);
mKeySize.setText("");
} else {
mKeySize.setSummary(profile.getKeySize());
mKeySize.setText(profile.getKeySize());
}
mKeySize.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
String name = (String) newValue;
name.trim();
if (name.equals(""))
name = "0";
profile.setKeySize(name);
if (profile.getKeySize().equals("0"))
mKeySize.setSummary(R.string.vpn_openvpn_set_keysize_default);
else
mKeySize.setSummary(profile.getKeySize());
return true;
}
});
mUseTlsAuth.setChecked(profile.getUseTlsAuth());
mUseTlsAuth
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object newValue) {
Boolean b = (Boolean) newValue;
profile.setUseTlsAuth(b);
return true;
}
});
mTlsAuthKey.setSummary(profile.getTlsAuthKey());
mTlsAuthKey
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object data) {
try {
String name = Util.getPath(AdvancedSettings.this,
Uri.parse((String) data));
profile.setTlsAuthKey(name);
mTlsAuthKey.setSummary(profile.getTlsAuthKey());
} catch (URISyntaxException e) {
Util.showLongToastMessage(AdvancedSettings.this,
e.getLocalizedMessage());
}
return true;
}
});
mTlsAuthKeyDirection.setValue(profile.getTlsAuthKeyDirection());
mTlsAuthKeyDirection.setSummary(mTlsAuthKeyDirection.getEntry());
mTlsAuthKeyDirection
.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref,
Object newValue) {
String name = (String) newValue;
name.trim();
profile.setTlsAuthKeyDirection(name);
mTlsAuthKeyDirection.setValue(profile
.getTlsAuthKeyDirection());
mTlsAuthKeyDirection.setSummary(mTlsAuthKeyDirection
.getEntry());
return true;
}
});
mExtra.setSummary(profile.getExtra());
mExtra.setText(profile.getExtra());
mExtra.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference pref, Object newValue) {
String name = (String) newValue;
name.trim();
profile.setExtra(name);
mExtra.setSummary(profile.getExtra());
return true;
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
Intent intent = new Intent(this, VpnEditor.class);
intent.putExtra(VpnEditor.KEY_PROFILE, (Parcelable) profile);
setResult(RESULT_OK, intent);
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}