diff --git a/res/layout/vpn_dialog.xml b/res/layout/vpn_dialog.xml index 892a17604fb..062772ee892 100644 --- a/res/layout/vpn_dialog.xml +++ b/res/layout/vpn_dialog.xml @@ -66,25 +66,6 @@ - - - - - - - - - - - - - - - - - Type Server address - - PPP encryption (MPPE) - - L2TP secret IPSec identifier @@ -6103,12 +6099,6 @@ IPSec server certificate Show advanced options - - DNS search domains - - DNS servers (e.g. 8.8.8.8) - - Forwarding routes (e.g. 10.0.0.0/8) Username @@ -6121,22 +6111,6 @@ (don\u2019t verify server) (received from server) - - This VPN type can\'t stay connected at all - times - - Always-on VPN only supports numeric server - addresses - - A DNS server must be specified for always-on - VPN - - DNS server addresses must be numeric for - always-on VPN The information entered doesn\'t support diff --git a/src/com/android/settings/vpn2/ConfigDialog.java b/src/com/android/settings/vpn2/ConfigDialog.java index 65f0edef39b..1c001cb8bab 100644 --- a/src/com/android/settings/vpn2/ConfigDialog.java +++ b/src/com/android/settings/vpn2/ConfigDialog.java @@ -16,8 +16,6 @@ package com.android.settings.vpn2; -import static com.android.internal.net.VpnProfile.isLegacyType; - import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageManager; @@ -43,7 +41,6 @@ import com.android.net.module.util.ProxyUtils; import com.android.settings.R; import com.android.settings.utils.AndroidKeystoreAliasLoader; -import java.net.InetAddress; import java.util.Collection; import java.util.List; @@ -78,14 +75,9 @@ class ConfigDialog extends AlertDialog implements TextWatcher, private TextView mServer; private TextView mUsername; private TextView mPassword; - private TextView mSearchDomains; - private TextView mDnsServers; - private TextView mRoutes; private Spinner mProxySettings; private TextView mProxyHost; private TextView mProxyPort; - private CheckBox mMppe; - private TextView mL2tpSecret; private TextView mIpsecIdentifier; private TextView mIpsecSecret; private Spinner mIpsecUserCert; @@ -119,14 +111,9 @@ class ConfigDialog extends AlertDialog implements TextWatcher, mServer = (TextView) mView.findViewById(R.id.server); mUsername = (TextView) mView.findViewById(R.id.username); mPassword = (TextView) mView.findViewById(R.id.password); - mSearchDomains = (TextView) mView.findViewById(R.id.search_domains); - mDnsServers = (TextView) mView.findViewById(R.id.dns_servers); - mRoutes = (TextView) mView.findViewById(R.id.routes); mProxySettings = (Spinner) mView.findViewById(R.id.vpn_proxy_settings); mProxyHost = (TextView) mView.findViewById(R.id.vpn_proxy_host); mProxyPort = (TextView) mView.findViewById(R.id.vpn_proxy_port); - mMppe = (CheckBox) mView.findViewById(R.id.mppe); - mL2tpSecret = (TextView) mView.findViewById(R.id.l2tp_secret); mIpsecIdentifier = (TextView) mView.findViewById(R.id.ipsec_identifier); mIpsecSecret = (TextView) mView.findViewById(R.id.ipsec_secret); mIpsecUserCert = (Spinner) mView.findViewById(R.id.ipsec_user_cert); @@ -146,17 +133,11 @@ class ConfigDialog extends AlertDialog implements TextWatcher, mUsername.setText(mProfile.username); mPassword.setText(mProfile.password); } - mSearchDomains.setText(mProfile.searchDomains); - mDnsServers.setText(mProfile.dnsServers); - mRoutes.setText(mProfile.routes); if (mProfile.proxy != null) { mProxyHost.setText(mProfile.proxy.getHost()); int port = mProfile.proxy.getPort(); mProxyPort.setText(port == 0 ? "" : Integer.toString(port)); } - mMppe.setChecked(mProfile.mppe); - mL2tpSecret.setText(mProfile.l2tpSecret); - mL2tpSecret.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Medium); mIpsecIdentifier.setText(mProfile.ipsecIdentifier); mIpsecSecret.setText(mProfile.ipsecSecret); final AndroidKeystoreAliasLoader androidKeystoreAliasLoader = @@ -182,8 +163,6 @@ class ConfigDialog extends AlertDialog implements TextWatcher, mServer.addTextChangedListener(this); mUsername.addTextChangedListener(this); mPassword.addTextChangedListener(this); - mDnsServers.addTextChangedListener(this); - mRoutes.addTextChangedListener(this); mProxySettings.setOnItemSelectedListener(this); mProxyHost.addTextChangedListener(this); mProxyPort.addTextChangedListener(this); @@ -318,17 +297,7 @@ class ConfigDialog extends AlertDialog implements TextWatcher, } else { mAlwaysOnVpn.setChecked(false); mAlwaysOnVpn.setEnabled(false); - if (!profile.isTypeValidForLockdown()) { - mAlwaysOnInvalidReason.setText(R.string.vpn_always_on_invalid_reason_type); - } else if (isLegacyType(profile.type) && !profile.isServerAddressNumeric()) { - mAlwaysOnInvalidReason.setText(R.string.vpn_always_on_invalid_reason_server); - } else if (isLegacyType(profile.type) && !profile.hasDns()) { - mAlwaysOnInvalidReason.setText(R.string.vpn_always_on_invalid_reason_no_dns); - } else if (isLegacyType(profile.type) && !profile.areDnsAddressesNumeric()) { - mAlwaysOnInvalidReason.setText(R.string.vpn_always_on_invalid_reason_dns); - } else { - mAlwaysOnInvalidReason.setText(R.string.vpn_always_on_invalid_reason_other); - } + mAlwaysOnInvalidReason.setText(R.string.vpn_always_on_invalid_reason_other); mAlwaysOnInvalidReason.setVisibility(View.VISIBLE); } @@ -358,22 +327,14 @@ class ConfigDialog extends AlertDialog implements TextWatcher, } private boolean isAdvancedOptionsEnabled() { - return mSearchDomains.getText().length() > 0 || mDnsServers.getText().length() > 0 || - mRoutes.getText().length() > 0 || mProxyHost.getText().length() > 0 - || mProxyPort.getText().length() > 0; + return mProxyHost.getText().length() > 0 || mProxyPort.getText().length() > 0; } private void configureAdvancedOptionsVisibility() { if (mShowOptions.isChecked() || isAdvancedOptionsEnabled()) { mView.findViewById(R.id.options).setVisibility(View.VISIBLE); mShowOptions.setVisibility(View.GONE); - - // Configure networking option visibility // TODO(b/149070123): Add ability for platform VPNs to support DNS & routes - final int position = mType.getSelectedItemPosition(); - final int visibility = - isLegacyType(VPN_TYPES.get(position)) ? View.VISIBLE : View.GONE; - mView.findViewById(R.id.network_options).setVisibility(visibility); } else { mView.findViewById(R.id.options).setVisibility(View.GONE); mShowOptions.setVisibility(View.VISIBLE); @@ -382,8 +343,6 @@ class ConfigDialog extends AlertDialog implements TextWatcher, private void changeType(int type) { // First, hide everything. - mMppe.setVisibility(View.GONE); - mView.findViewById(R.id.l2tp).setVisibility(View.GONE); mView.findViewById(R.id.ipsec_psk).setVisibility(View.GONE); mView.findViewById(R.id.ipsec_user).setVisibility(View.GONE); mView.findViewById(R.id.ipsec_peer).setVisibility(View.GONE); @@ -392,34 +351,18 @@ class ConfigDialog extends AlertDialog implements TextWatcher, setUsernamePasswordVisibility(type); // Always enable identity for IKEv2/IPsec profiles. - if (!isLegacyType(type)) { - mView.findViewById(R.id.options_ipsec_identity).setVisibility(View.VISIBLE); - } + mView.findViewById(R.id.options_ipsec_identity).setVisibility(View.VISIBLE); // Then, unhide type-specific fields. switch (type) { - case VpnProfile.TYPE_PPTP: - mMppe.setVisibility(View.VISIBLE); - break; - - case VpnProfile.TYPE_L2TP_IPSEC_PSK: - mView.findViewById(R.id.l2tp).setVisibility(View.VISIBLE); - // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_PSK: // fall through - case VpnProfile.TYPE_IPSEC_XAUTH_PSK: + case VpnProfile.TYPE_IKEV2_IPSEC_PSK: mView.findViewById(R.id.ipsec_psk).setVisibility(View.VISIBLE); mView.findViewById(R.id.options_ipsec_identity).setVisibility(View.VISIBLE); break; - - case VpnProfile.TYPE_L2TP_IPSEC_RSA: - mView.findViewById(R.id.l2tp).setVisibility(View.VISIBLE); - // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_RSA: // fall through - case VpnProfile.TYPE_IPSEC_XAUTH_RSA: + case VpnProfile.TYPE_IKEV2_IPSEC_RSA: mView.findViewById(R.id.ipsec_user).setVisibility(View.VISIBLE); // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: // fall through - case VpnProfile.TYPE_IPSEC_HYBRID_RSA: + case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: mView.findViewById(R.id.ipsec_peer).setVisibility(View.VISIBLE); break; } @@ -441,15 +384,8 @@ class ConfigDialog extends AlertDialog implements TextWatcher, return false; } - // TODO(b/149070123): Add ability for platform VPNs to support DNS & routes - if (isLegacyType(mProfile.type) - && (!validateAddresses(mDnsServers.getText().toString(), false) - || !validateAddresses(mRoutes.getText().toString(), true))) { - return false; - } - // All IKEv2 methods require an identifier - if (!isLegacyType(mProfile.type) && mIpsecIdentifier.getText().length() == 0) { + if (mIpsecIdentifier.getText().length() == 0) { return false; } @@ -458,51 +394,18 @@ class ConfigDialog extends AlertDialog implements TextWatcher, } switch (type) { - case VpnProfile.TYPE_PPTP: // fall through - case VpnProfile.TYPE_IPSEC_HYBRID_RSA: // fall through case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: return true; - case VpnProfile.TYPE_IKEV2_IPSEC_PSK: // fall through - case VpnProfile.TYPE_L2TP_IPSEC_PSK: // fall through - case VpnProfile.TYPE_IPSEC_XAUTH_PSK: + case VpnProfile.TYPE_IKEV2_IPSEC_PSK: return mIpsecSecret.getText().length() != 0; - case VpnProfile.TYPE_IKEV2_IPSEC_RSA: // fall through - case VpnProfile.TYPE_L2TP_IPSEC_RSA: // fall through - case VpnProfile.TYPE_IPSEC_XAUTH_RSA: + case VpnProfile.TYPE_IKEV2_IPSEC_RSA: return mIpsecUserCert.getSelectedItemPosition() != 0; } return false; } - private boolean validateAddresses(String addresses, boolean cidr) { - try { - for (String address : addresses.split(" ")) { - if (address.isEmpty()) { - continue; - } - // Legacy VPN currently only supports IPv4. - int prefixLength = 32; - if (cidr) { - String[] parts = address.split("/", 2); - address = parts[0]; - prefixLength = Integer.parseInt(parts[1]); - } - byte[] bytes = InetAddress.parseNumericAddress(address).getAddress(); - int integer = (bytes[3] & 0xFF) | (bytes[2] & 0xFF) << 8 | - (bytes[1] & 0xFF) << 16 | (bytes[0] & 0xFF) << 24; - if (bytes.length != 4 || prefixLength < 0 || prefixLength > 32 || - (prefixLength < 32 && (integer << prefixLength) != 0)) { - return false; - } - } - } catch (Exception e) { - return false; - } - return true; - } - private void setTypesByFeature(Spinner typeSpinner) { String[] types = getContext().getResources().getStringArray(R.array.vpn_types); if (types.length != VPN_TYPES.size()) { @@ -592,14 +495,7 @@ class ConfigDialog extends AlertDialog implements TextWatcher, profile.password = mPassword.getText().toString(); // Save fields based on VPN type. - if (isLegacyType(profile.type)) { - // TODO(b/149070123): Add ability for platform VPNs to support DNS & routes - profile.searchDomains = mSearchDomains.getText().toString().trim(); - profile.dnsServers = mDnsServers.getText().toString().trim(); - profile.routes = mRoutes.getText().toString().trim(); - } else { - profile.ipsecIdentifier = mIpsecIdentifier.getText().toString(); - } + profile.ipsecIdentifier = mIpsecIdentifier.getText().toString(); if (hasProxy()) { String proxyHost = mProxyHost.getText().toString().trim(); @@ -620,34 +516,17 @@ class ConfigDialog extends AlertDialog implements TextWatcher, } // Then, save type-specific fields. switch (profile.type) { - case VpnProfile.TYPE_PPTP: - profile.mppe = mMppe.isChecked(); - break; - - case VpnProfile.TYPE_L2TP_IPSEC_PSK: - profile.l2tpSecret = mL2tpSecret.getText().toString(); - // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_PSK: // fall through - case VpnProfile.TYPE_IPSEC_XAUTH_PSK: - profile.ipsecIdentifier = mIpsecIdentifier.getText().toString(); + case VpnProfile.TYPE_IKEV2_IPSEC_PSK: profile.ipsecSecret = mIpsecSecret.getText().toString(); break; case VpnProfile.TYPE_IKEV2_IPSEC_RSA: - if (mIpsecUserCert.getSelectedItemPosition() != 0) { - profile.ipsecSecret = (String) mIpsecUserCert.getSelectedItem(); - } - // fall through - case VpnProfile.TYPE_L2TP_IPSEC_RSA: - profile.l2tpSecret = mL2tpSecret.getText().toString(); - // fall through - case VpnProfile.TYPE_IPSEC_XAUTH_RSA: if (mIpsecUserCert.getSelectedItemPosition() != 0) { profile.ipsecUserCert = (String) mIpsecUserCert.getSelectedItem(); + profile.ipsecSecret = profile.ipsecUserCert; } // fall through - case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: // fall through - case VpnProfile.TYPE_IPSEC_HYBRID_RSA: + case VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS: if (mIpsecCaCert.getSelectedItemPosition() != 0) { profile.ipsecCaCert = (String) mIpsecCaCert.getSelectedItem(); }