Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5379,6 +5379,8 @@ <!-- Toast message when there is no network connection to start VPN. [CHAR LIMIT=100] --> <string name="vpn_no_network">There is no network connection. Please try again later.</string> <!-- Toast message when VPN has disconnected automatically due to Clear credentials. [CHAR LIMIT=NONE] --> <string name="vpn_disconnected">Disconnected from VPN</string> <!-- Toast message when a certificate is missing. [CHAR LIMIT=100] --> <string name="vpn_missing_cert">A certificate is missing. Please edit the profile.</string> Loading src/com/android/settings/CredentialStorage.java +10 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import android.widget.Toast; import com.android.internal.widget.LockPatternUtils; import com.android.org.bouncycastle.asn1.ASN1InputStream; import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import com.android.settings.vpn2.VpnUtils; import sun.security.util.ObjectIdentifier; import sun.security.x509.AlgorithmId; Loading Loading @@ -361,6 +362,7 @@ public final class CredentialStorage extends Activity { if (success) { Toast.makeText(CredentialStorage.this, R.string.credentials_erased, Toast.LENGTH_SHORT).show(); clearLegacyVpnIfEstablished(); } else { Toast.makeText(CredentialStorage.this, R.string.credentials_not_erased, Toast.LENGTH_SHORT).show(); Loading @@ -369,6 +371,14 @@ public final class CredentialStorage extends Activity { } } private void clearLegacyVpnIfEstablished() { boolean isDone = VpnUtils.disconnectLegacyVpn(getApplicationContext()); if (isDone) { Toast.makeText(CredentialStorage.this, R.string.vpn_disconnected, Toast.LENGTH_SHORT).show(); } } /** * Prompt for key guard configuration confirmation. */ Loading src/com/android/settings/vpn2/ConfigDialogFragment.java +1 −2 Original line number Diff line number Diff line Loading @@ -249,8 +249,7 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements if (!isConnected(profile)) { return true; } VpnUtils.clearLockdownVpn(mContext); return mService.prepareVpn(null, VpnConfig.LEGACY_VPN, UserHandle.myUserId()); return VpnUtils.disconnectLegacyVpn(getContext()); } catch (RemoteException e) { Log.e(TAG, "Failed to disconnect", e); return false; Loading src/com/android/settings/vpn2/VpnUtils.java +21 −0 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ import android.os.ServiceManager; import android.provider.Settings; import android.security.Credentials; import android.security.KeyStore; import android.util.Log; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; /** Loading @@ -32,6 +34,9 @@ import com.android.internal.net.VpnConfig; * Keystore methods should only be called in system user */ public class VpnUtils { private static final String TAG = "VpnUtils"; public static String getLockdownVpn() { final byte[] value = KeyStore.getInstance().get(Credentials.LOCKDOWN_VPN); return value == null ? null : new String(value); Loading Loading @@ -86,4 +91,20 @@ public class VpnUtils { public static boolean isAlwaysOnVpnSet(ConnectivityManagerWrapper cm, final int userId) { return cm.getAlwaysOnVpnPackageForUser(userId) != null; } public static boolean disconnectLegacyVpn(Context context) { try { int userId = context.getUserId(); IConnectivityManager connectivityService = getIConnectivityManager(); LegacyVpnInfo currentLegacyVpn = connectivityService.getLegacyVpnInfo(userId); if (currentLegacyVpn != null) { clearLockdownVpn(context); connectivityService.prepareVpn(null, VpnConfig.LEGACY_VPN, userId); return true; } } catch (RemoteException e) { Log.e(TAG, "Legacy VPN could not be disconnected", e); } return false; } } Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -5379,6 +5379,8 @@ <!-- Toast message when there is no network connection to start VPN. [CHAR LIMIT=100] --> <string name="vpn_no_network">There is no network connection. Please try again later.</string> <!-- Toast message when VPN has disconnected automatically due to Clear credentials. [CHAR LIMIT=NONE] --> <string name="vpn_disconnected">Disconnected from VPN</string> <!-- Toast message when a certificate is missing. [CHAR LIMIT=100] --> <string name="vpn_missing_cert">A certificate is missing. Please edit the profile.</string> Loading
src/com/android/settings/CredentialStorage.java +10 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import android.widget.Toast; import com.android.internal.widget.LockPatternUtils; import com.android.org.bouncycastle.asn1.ASN1InputStream; import com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import com.android.settings.vpn2.VpnUtils; import sun.security.util.ObjectIdentifier; import sun.security.x509.AlgorithmId; Loading Loading @@ -361,6 +362,7 @@ public final class CredentialStorage extends Activity { if (success) { Toast.makeText(CredentialStorage.this, R.string.credentials_erased, Toast.LENGTH_SHORT).show(); clearLegacyVpnIfEstablished(); } else { Toast.makeText(CredentialStorage.this, R.string.credentials_not_erased, Toast.LENGTH_SHORT).show(); Loading @@ -369,6 +371,14 @@ public final class CredentialStorage extends Activity { } } private void clearLegacyVpnIfEstablished() { boolean isDone = VpnUtils.disconnectLegacyVpn(getApplicationContext()); if (isDone) { Toast.makeText(CredentialStorage.this, R.string.vpn_disconnected, Toast.LENGTH_SHORT).show(); } } /** * Prompt for key guard configuration confirmation. */ Loading
src/com/android/settings/vpn2/ConfigDialogFragment.java +1 −2 Original line number Diff line number Diff line Loading @@ -249,8 +249,7 @@ public class ConfigDialogFragment extends InstrumentedDialogFragment implements if (!isConnected(profile)) { return true; } VpnUtils.clearLockdownVpn(mContext); return mService.prepareVpn(null, VpnConfig.LEGACY_VPN, UserHandle.myUserId()); return VpnUtils.disconnectLegacyVpn(getContext()); } catch (RemoteException e) { Log.e(TAG, "Failed to disconnect", e); return false; Loading
src/com/android/settings/vpn2/VpnUtils.java +21 −0 Original line number Diff line number Diff line Loading @@ -23,7 +23,9 @@ import android.os.ServiceManager; import android.provider.Settings; import android.security.Credentials; import android.security.KeyStore; import android.util.Log; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.VpnConfig; /** Loading @@ -32,6 +34,9 @@ import com.android.internal.net.VpnConfig; * Keystore methods should only be called in system user */ public class VpnUtils { private static final String TAG = "VpnUtils"; public static String getLockdownVpn() { final byte[] value = KeyStore.getInstance().get(Credentials.LOCKDOWN_VPN); return value == null ? null : new String(value); Loading Loading @@ -86,4 +91,20 @@ public class VpnUtils { public static boolean isAlwaysOnVpnSet(ConnectivityManagerWrapper cm, final int userId) { return cm.getAlwaysOnVpnPackageForUser(userId) != null; } public static boolean disconnectLegacyVpn(Context context) { try { int userId = context.getUserId(); IConnectivityManager connectivityService = getIConnectivityManager(); LegacyVpnInfo currentLegacyVpn = connectivityService.getLegacyVpnInfo(userId); if (currentLegacyVpn != null) { clearLockdownVpn(context); connectivityService.prepareVpn(null, VpnConfig.LEGACY_VPN, userId); return true; } } catch (RemoteException e) { Log.e(TAG, "Legacy VPN could not be disconnected", e); } return false; } }