1310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh/* 2310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * Copyright (C) 2011 The Android Open Source Project 3310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * 4310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * Licensed under the Apache License, Version 2.0 (the "License"); 5310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * you may not use this file except in compliance with the License. 6310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * You may obtain a copy of the License at 7310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * 8310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * http://www.apache.org/licenses/LICENSE-2.0 9310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * 10310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * Unless required by applicable law or agreed to in writing, software 11310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * distributed under the License is distributed on an "AS IS" BASIS, 12310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * See the License for the specific language governing permissions and 14310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh * limitations under the License. 15310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh */ 16310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 17310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehpackage com.android.settings.vpn2; 18310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 19310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.app.AlertDialog; 20310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.content.Context; 21310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.content.DialogInterface; 22310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.os.Bundle; 23310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.security.Credentials; 24310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.security.KeyStore; 25310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.text.Editable; 26310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.text.TextWatcher; 27310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.view.View; 28d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yehimport android.view.WindowManager; 29310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.widget.AdapterView; 30310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.widget.ArrayAdapter; 31310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.widget.CheckBox; 32310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.widget.Spinner; 33310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yehimport android.widget.TextView; 34310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 352bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport com.android.internal.net.VpnProfile; 362bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeimport com.android.settings.R; 372bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 38d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yehimport java.net.InetAddress; 39d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh 402bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee/** 412bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * Dialog showing information about a VPN configuration. The dialog 422bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * can be launched to either edit or prompt for credentials to connect 432bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * to a user-added VPN. 442bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * 452bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee * {@see AppDialog} 462bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee */ 472bd92d5d0685144aad566b9d29454fb519ff0371Robin Leeclass ConfigDialog extends AlertDialog implements TextWatcher, 48d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh View.OnClickListener, AdapterView.OnItemSelectedListener { 49310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private final KeyStore mKeyStore = KeyStore.getInstance(); 50310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private final DialogInterface.OnClickListener mListener; 51310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private final VpnProfile mProfile; 52310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 53310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private boolean mEditing; 542bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee private boolean mExists; 55310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 56310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private View mView; 57310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 58310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mName; 59310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private Spinner mType; 60310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mServer; 61310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mUsername; 62310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mPassword; 632fa9eade41144094ef743cc5a3faf4f1ce7209afChia-chi Yeh private TextView mSearchDomains; 64d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh private TextView mDnsServers; 65310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mRoutes; 66310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private CheckBox mMppe; 67310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mL2tpSecret; 68310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mIpsecIdentifier; 69310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private TextView mIpsecSecret; 70310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private Spinner mIpsecUserCert; 71310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private Spinner mIpsecCaCert; 72f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh private Spinner mIpsecServerCert; 73310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private CheckBox mSaveLogin; 746f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee private CheckBox mShowOptions; 75310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 762bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee ConfigDialog(Context context, DialogInterface.OnClickListener listener, 772bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee VpnProfile profile, boolean editing, boolean exists) { 78310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh super(context); 792bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 80310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mListener = listener; 81310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mProfile = profile; 82310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mEditing = editing; 832bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee mExists = exists; 84310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 85310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 86310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh @Override 87310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh protected void onCreate(Bundle savedState) { 88310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView = getLayoutInflater().inflate(R.layout.vpn_dialog, null); 89310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh setView(mView); 90310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 91310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh Context context = getContext(); 92310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 93310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // First, find out all the fields. 94310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mName = (TextView) mView.findViewById(R.id.name); 95310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mType = (Spinner) mView.findViewById(R.id.type); 96310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mServer = (TextView) mView.findViewById(R.id.server); 97310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mUsername = (TextView) mView.findViewById(R.id.username); 98310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mPassword = (TextView) mView.findViewById(R.id.password); 992fa9eade41144094ef743cc5a3faf4f1ce7209afChia-chi Yeh mSearchDomains = (TextView) mView.findViewById(R.id.search_domains); 100d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh mDnsServers = (TextView) mView.findViewById(R.id.dns_servers); 101310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mRoutes = (TextView) mView.findViewById(R.id.routes); 102310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mMppe = (CheckBox) mView.findViewById(R.id.mppe); 103310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mL2tpSecret = (TextView) mView.findViewById(R.id.l2tp_secret); 104310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecIdentifier = (TextView) mView.findViewById(R.id.ipsec_identifier); 105310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecSecret = (TextView) mView.findViewById(R.id.ipsec_secret); 106310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecUserCert = (Spinner) mView.findViewById(R.id.ipsec_user_cert); 107310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecCaCert = (Spinner) mView.findViewById(R.id.ipsec_ca_cert); 108f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh mIpsecServerCert = (Spinner) mView.findViewById(R.id.ipsec_server_cert); 109310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mSaveLogin = (CheckBox) mView.findViewById(R.id.save_login); 1106f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee mShowOptions = (CheckBox) mView.findViewById(R.id.show_options); 111310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 112310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Second, copy values from the profile. 113310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mName.setText(mProfile.name); 114310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mType.setSelection(mProfile.type); 115310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mServer.setText(mProfile.server); 11694c6cd6c29cb7cc92b4f5377db78df02c769f7c1Chia-chi Yeh if (mProfile.saveLogin) { 11794c6cd6c29cb7cc92b4f5377db78df02c769f7c1Chia-chi Yeh mUsername.setText(mProfile.username); 11894c6cd6c29cb7cc92b4f5377db78df02c769f7c1Chia-chi Yeh mPassword.setText(mProfile.password); 11994c6cd6c29cb7cc92b4f5377db78df02c769f7c1Chia-chi Yeh } 1202fa9eade41144094ef743cc5a3faf4f1ce7209afChia-chi Yeh mSearchDomains.setText(mProfile.searchDomains); 121d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh mDnsServers.setText(mProfile.dnsServers); 122310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mRoutes.setText(mProfile.routes); 123310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mMppe.setChecked(mProfile.mppe); 124aa5b531b0b540488f47ad0414dc77eecbb47cd3aChia-chi Yeh mL2tpSecret.setText(mProfile.l2tpSecret); 125310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecIdentifier.setText(mProfile.ipsecIdentifier); 126aa5b531b0b540488f47ad0414dc77eecbb47cd3aChia-chi Yeh mIpsecSecret.setText(mProfile.ipsecSecret); 1272340efc9a3fb4ae7b90cf9e7b3eab8c9ff7aeec8Chia-chi Yeh loadCertificates(mIpsecUserCert, Credentials.USER_PRIVATE_KEY, 128310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 0, mProfile.ipsecUserCert); 129bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh loadCertificates(mIpsecCaCert, Credentials.CA_CERTIFICATE, 130310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh R.string.vpn_no_ca_cert, mProfile.ipsecCaCert); 131f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh loadCertificates(mIpsecServerCert, Credentials.USER_CERTIFICATE, 132f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh R.string.vpn_no_server_cert, mProfile.ipsecServerCert); 133310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mSaveLogin.setChecked(mProfile.saveLogin); 134310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 135310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Third, add listeners to required fields. 136310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mName.addTextChangedListener(this); 137310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mType.setOnItemSelectedListener(this); 138310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mServer.addTextChangedListener(this); 139310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mUsername.addTextChangedListener(this); 140310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mPassword.addTextChangedListener(this); 141d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh mDnsServers.addTextChangedListener(this); 142d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh mRoutes.addTextChangedListener(this); 143310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecSecret.addTextChangedListener(this); 144310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mIpsecUserCert.setOnItemSelectedListener(this); 1456f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee mShowOptions.setOnClickListener(this); 146310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 1476f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee // Fourth, determine whether to do editing or connecting. 148310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh boolean valid = validate(true); 149310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mEditing = mEditing || !valid; 150310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 151310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh if (mEditing) { 152310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh setTitle(R.string.vpn_edit); 153310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 154310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Show common fields. 155310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.editor).setVisibility(View.VISIBLE); 156310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 157310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Show type-specific fields. 158310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh changeType(mProfile.type); 159310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 1606f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee // Switch to advanced view immediately if any advanced options are on 1616f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee if (!mProfile.searchDomains.isEmpty() || !mProfile.dnsServers.isEmpty() || 1626f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee !mProfile.routes.isEmpty()) { 1636f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee showAdvancedOptions(); 164d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 165d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh 1662bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee // Create a button to forget the profile if it has already been saved.. 1672bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee if (mExists) { 1682bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee setButton(DialogInterface.BUTTON_NEUTRAL, 1692bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee context.getString(R.string.vpn_forget), mListener); 1702bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee } 1712bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee 172310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Create a button to save the profile. 173310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh setButton(DialogInterface.BUTTON_POSITIVE, 174310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh context.getString(R.string.vpn_save), mListener); 175310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } else { 176310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh setTitle(context.getString(R.string.vpn_connect_to, mProfile.name)); 177310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 178310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Not editing, just show username and password. 179310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.login).setVisibility(View.VISIBLE); 180310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 181310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Create a button to connect the network. 182310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh setButton(DialogInterface.BUTTON_POSITIVE, 183310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh context.getString(R.string.vpn_connect), mListener); 184310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 185310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 186310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Always provide a cancel button. 187310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh setButton(DialogInterface.BUTTON_NEGATIVE, 188310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh context.getString(R.string.vpn_cancel), mListener); 189310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 190310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Let AlertDialog create everything. 1912bd92d5d0685144aad566b9d29454fb519ff0371Robin Lee super.onCreate(savedState); 192310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 193310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Disable the action button if necessary. 194310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh getButton(DialogInterface.BUTTON_POSITIVE) 195310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh .setEnabled(mEditing ? valid : validate(false)); 196d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh 197d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh // Workaround to resize the dialog for the input method. 198d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | 199d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 200310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 201310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 202310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh @Override 2036f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee public void onRestoreInstanceState(Bundle savedState) { 2046f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee super.onRestoreInstanceState(savedState); 2056f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee 2066f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee // Visibility isn't restored by super.onRestoreInstanceState, so re-show the advanced 2076f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee // options here if they were already revealed or set. 2086f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee if (mShowOptions.isChecked()) { 2096f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee showAdvancedOptions(); 2106f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee } 2116f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee } 2126f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee 2136f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee @Override 214310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh public void afterTextChanged(Editable field) { 215310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(validate(mEditing)); 216310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 217310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 218310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh @Override 219310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh public void beforeTextChanged(CharSequence s, int start, int count, int after) { 220310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 221310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 222310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh @Override 223310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh public void onTextChanged(CharSequence s, int start, int before, int count) { 224310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 225310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 226310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh @Override 2276f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee public void onClick(View view) { 2286f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee if (view == mShowOptions) { 2296f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee showAdvancedOptions(); 2306f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee } 231d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 232d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh 233d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh @Override 234310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 235310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh if (parent == mType) { 236310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh changeType(position); 237310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 238bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(validate(mEditing)); 239310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 240310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 241310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh @Override 242310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh public void onNothingSelected(AdapterView<?> parent) { 243310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 244310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 2456f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee private void showAdvancedOptions() { 2466f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee mView.findViewById(R.id.options).setVisibility(View.VISIBLE); 2476f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee mShowOptions.setVisibility(View.GONE); 2486f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee } 2496f4951a1fac50ff2284187ac8f4ddc815856a25bRobin Lee 250310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private void changeType(int type) { 251310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // First, hide everything. 252310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mMppe.setVisibility(View.GONE); 253310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.l2tp).setVisibility(View.GONE); 254310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.ipsec_psk).setVisibility(View.GONE); 255310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.ipsec_user).setVisibility(View.GONE); 256f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh mView.findViewById(R.id.ipsec_peer).setVisibility(View.GONE); 257310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 258310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Then, unhide type-specific fields. 259310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh switch (type) { 260310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_PPTP: 261310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mMppe.setVisibility(View.VISIBLE); 262310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 2636d4334be691815cd9615b0fdebb756999a9c06a3Chia-chi Yeh 264310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_L2TP_IPSEC_PSK: 265310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.l2tp).setVisibility(View.VISIBLE); 2666d4334be691815cd9615b0fdebb756999a9c06a3Chia-chi Yeh // fall through 267310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_XAUTH_PSK: 268310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.ipsec_psk).setVisibility(View.VISIBLE); 269310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 270310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 271310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_L2TP_IPSEC_RSA: 272310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh mView.findViewById(R.id.l2tp).setVisibility(View.VISIBLE); 273310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // fall through 274310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_XAUTH_RSA: 2750082d17ce7ad2f8b3601068e62eda92aa8670a0fChia-chi Yeh mView.findViewById(R.id.ipsec_user).setVisibility(View.VISIBLE); 276310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // fall through 277310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_HYBRID_RSA: 278f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh mView.findViewById(R.id.ipsec_peer).setVisibility(View.VISIBLE); 279310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 280310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 281310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 282310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 283310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private boolean validate(boolean editing) { 284310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh if (!editing) { 285310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return mUsername.getText().length() != 0 && mPassword.getText().length() != 0; 286310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 287d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh if (mName.getText().length() == 0 || mServer.getText().length() == 0 || 288d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh !validateAddresses(mDnsServers.getText().toString(), false) || 289d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh !validateAddresses(mRoutes.getText().toString(), true)) { 290310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return false; 291310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 292310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh switch (mType.getSelectedItemPosition()) { 293310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_PPTP: 2946d4334be691815cd9615b0fdebb756999a9c06a3Chia-chi Yeh case VpnProfile.TYPE_IPSEC_HYBRID_RSA: 295310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return true; 296310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 297310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_L2TP_IPSEC_PSK: 298310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_XAUTH_PSK: 299310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return mIpsecSecret.getText().length() != 0; 300310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 301310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_L2TP_IPSEC_RSA: 302310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_XAUTH_RSA: 303310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return mIpsecUserCert.getSelectedItemPosition() != 0; 304310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 305310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return false; 306310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 307310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 308d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh private boolean validateAddresses(String addresses, boolean cidr) { 309d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh try { 310d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh for (String address : addresses.split(" ")) { 311d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh if (address.isEmpty()) { 312d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh continue; 313d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 314d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh // Legacy VPN currently only supports IPv4. 315d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh int prefixLength = 32; 316d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh if (cidr) { 317d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh String[] parts = address.split("/", 2); 318d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh address = parts[0]; 319d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh prefixLength = Integer.parseInt(parts[1]); 320d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 321d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh byte[] bytes = InetAddress.parseNumericAddress(address).getAddress(); 322d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh int integer = (bytes[3] & 0xFF) | (bytes[2] & 0xFF) << 8 | 323d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh (bytes[1] & 0xFF) << 16 | (bytes[0] & 0xFF) << 24; 324d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh if (bytes.length != 4 || prefixLength < 0 || prefixLength > 32 || 325d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh (prefixLength < 32 && (integer << prefixLength) != 0)) { 326d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh return false; 327d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 328d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 329d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } catch (Exception e) { 330d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh return false; 331d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 332d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh return true; 333d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh } 334d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh 335310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh private void loadCertificates(Spinner spinner, String prefix, int firstId, String selected) { 336310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh Context context = getContext(); 337310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh String first = (firstId == 0) ? "" : context.getString(firstId); 3383848407d0c2fad920419d6b925e0c8e374502680Alex Klyubin String[] certificates = mKeyStore.list(prefix); 339310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 340bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh if (certificates == null || certificates.length == 0) { 341bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh certificates = new String[] {first}; 342310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } else { 343bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh String[] array = new String[certificates.length + 1]; 344310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh array[0] = first; 345bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh System.arraycopy(certificates, 0, array, 1, certificates.length); 346bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh certificates = array; 347310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 348310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 349310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh ArrayAdapter<String> adapter = new ArrayAdapter<String>( 350bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh context, android.R.layout.simple_spinner_item, certificates); 351310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 352310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh spinner.setAdapter(adapter); 353310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 354bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh for (int i = 1; i < certificates.length; ++i) { 355bbb5094be6673929bcb808cdeaf748a73be4dbf0Chia-chi Yeh if (certificates[i].equals(selected)) { 356310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh spinner.setSelection(i); 357310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 358310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 359310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 360310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 361310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 362310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh boolean isEditing() { 363310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return mEditing; 364310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 365310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 366310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh VpnProfile getProfile() { 367310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // First, save common fields. 368310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh VpnProfile profile = new VpnProfile(mProfile.key); 369310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.name = mName.getText().toString(); 370310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.type = mType.getSelectedItemPosition(); 371310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.server = mServer.getText().toString().trim(); 372310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.username = mUsername.getText().toString(); 373aa5b531b0b540488f47ad0414dc77eecbb47cd3aChia-chi Yeh profile.password = mPassword.getText().toString(); 3742fa9eade41144094ef743cc5a3faf4f1ce7209afChia-chi Yeh profile.searchDomains = mSearchDomains.getText().toString().trim(); 375d68dbe29bb0a6639bfd95449eb28e7d4b174a3feChia-chi Yeh profile.dnsServers = mDnsServers.getText().toString().trim(); 376310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.routes = mRoutes.getText().toString().trim(); 377310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 378310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // Then, save type-specific fields. 379310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh switch (profile.type) { 380310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_PPTP: 381310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.mppe = mMppe.isChecked(); 382310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 3836d4334be691815cd9615b0fdebb756999a9c06a3Chia-chi Yeh 384310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_L2TP_IPSEC_PSK: 385aa5b531b0b540488f47ad0414dc77eecbb47cd3aChia-chi Yeh profile.l2tpSecret = mL2tpSecret.getText().toString(); 3866d4334be691815cd9615b0fdebb756999a9c06a3Chia-chi Yeh // fall through 387310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_XAUTH_PSK: 388413b171159cec5ad1e7b3cf4f1f842b5f2debc05Chia-chi Yeh profile.ipsecIdentifier = mIpsecIdentifier.getText().toString(); 389aa5b531b0b540488f47ad0414dc77eecbb47cd3aChia-chi Yeh profile.ipsecSecret = mIpsecSecret.getText().toString(); 390310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 391310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 392310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_L2TP_IPSEC_RSA: 393aa5b531b0b540488f47ad0414dc77eecbb47cd3aChia-chi Yeh profile.l2tpSecret = mL2tpSecret.getText().toString(); 394310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // fall through 395310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_XAUTH_RSA: 3960082d17ce7ad2f8b3601068e62eda92aa8670a0fChia-chi Yeh if (mIpsecUserCert.getSelectedItemPosition() != 0) { 3970082d17ce7ad2f8b3601068e62eda92aa8670a0fChia-chi Yeh profile.ipsecUserCert = (String) mIpsecUserCert.getSelectedItem(); 398310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 399310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh // fall through 400310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh case VpnProfile.TYPE_IPSEC_HYBRID_RSA: 4010082d17ce7ad2f8b3601068e62eda92aa8670a0fChia-chi Yeh if (mIpsecCaCert.getSelectedItemPosition() != 0) { 4020082d17ce7ad2f8b3601068e62eda92aa8670a0fChia-chi Yeh profile.ipsecCaCert = (String) mIpsecCaCert.getSelectedItem(); 403310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 404f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh if (mIpsecServerCert.getSelectedItemPosition() != 0) { 405f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh profile.ipsecServerCert = (String) mIpsecServerCert.getSelectedItem(); 406f5317a151bef8d93f7a640fe46c6dcde6baa258dChia-chi Yeh } 407310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh break; 408310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 409310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh 410310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh profile.saveLogin = mSaveLogin.isChecked(); 411310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh return profile; 412310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh } 413310d619acba5cd1f7c8a55aa7906ed4f1c011bd8Chia-chi Yeh} 414