From aa2e02348a26abdfec437af62a4085f49ff449c1 Mon Sep 17 00:00:00 2001 From: Victor Chang Date: Tue, 31 May 2016 07:19:27 +0100 Subject: Finish ConfirmDialog when another vpn app is always-on Bug:29000925 Change-Id: I1087dbb2c366cebb4583ae0bb97302b3d2caf42c --- packages/VpnDialogs/AndroidManifest.xml | 1 + .../src/com/android/vpndialogs/ConfirmDialog.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/packages/VpnDialogs/AndroidManifest.xml b/packages/VpnDialogs/AndroidManifest.xml index 08257b63a7ff..a3d27ce8a3da 100644 --- a/packages/VpnDialogs/AndroidManifest.xml +++ b/packages/VpnDialogs/AndroidManifest.xml @@ -20,6 +20,7 @@ package="com.android.vpndialogs"> + diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java index badc31e6df92..72ce9c4efdc0 100644 --- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java +++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java @@ -60,6 +60,12 @@ public class ConfirmDialog extends AlertActivity finish(); return; } + final String alwaysOnVpnPackage = getAlwaysOnVpnPackage(); + // Can't prepare new vpn app when another vpn is always-on + if (alwaysOnVpnPackage != null && !alwaysOnVpnPackage.equals(mPackage)) { + finish(); + return; + } View view = View.inflate(this, R.layout.confirm, null); ((TextView) view.findViewById(R.id.warning)).setText( Html.fromHtml(getString(R.string.warning, getVpnLabel()), @@ -76,6 +82,16 @@ public class ConfirmDialog extends AlertActivity button.setFilterTouchesWhenObscured(true); } + private String getAlwaysOnVpnPackage() { + try { + return mService.getAlwaysOnVpnPackage(UserHandle.myUserId()); + } catch (RemoteException e) { + Log.e(TAG, "fail to call getAlwaysOnVpnPackage", e); + // Fallback to null to show the dialog + return null; + } + } + private boolean prepareVpn() { try { return mService.prepareVpn(mPackage, null, UserHandle.myUserId()); -- cgit v1.2.3-59-g8ed1b