From bcd6b8cbca52901002d32f165616091e165e780b Mon Sep 17 00:00:00 2001 From: Benedict Wong Date: Fri, 17 Jan 2020 18:53:46 -0800 Subject: [PATCH 1/2] Add Platform VPNs to VPN list This change allows the Settings VPN pages to pull the apps providing a new Platform VPN. Bug: 144246835 Test: Compiles, manual testing Change-Id: Ibb7e79ccde754724c9fc00c88da98e975f325ba7 --- src/com/android/settings/vpn2/AppManagementFragment.java | 3 ++- src/com/android/settings/vpn2/VpnSettings.java | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java index 5f4644614c7..8e3d9bb4c18 100644 --- a/src/com/android/settings/vpn2/AppManagementFragment.java +++ b/src/com/android/settings/vpn2/AppManagementFragment.java @@ -15,6 +15,7 @@ */ package com.android.settings.vpn2; +import static android.app.AppOpsManager.OP_ACTIVATE_PLATFORM_VPN; import static android.app.AppOpsManager.OP_ACTIVATE_VPN; import android.annotation.NonNull; @@ -312,7 +313,7 @@ public class AppManagementFragment extends SettingsPreferenceFragment final AppOpsManager service = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); final List ops = service.getOpsForPackage(application.uid, - application.packageName, new int[]{OP_ACTIVATE_VPN}); + application.packageName, new int[]{OP_ACTIVATE_VPN, OP_ACTIVATE_PLATFORM_VPN}); return !ArrayUtils.isEmpty(ops); } diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java index 83cdf71eeca..8a2b465d7f2 100644 --- a/src/com/android/settings/vpn2/VpnSettings.java +++ b/src/com/android/settings/vpn2/VpnSettings.java @@ -16,6 +16,7 @@ package com.android.settings.vpn2; +import static android.app.AppOpsManager.OP_ACTIVATE_PLATFORM_VPN; import static android.app.AppOpsManager.OP_ACTIVATE_VPN; import android.annotation.UiThread; @@ -522,7 +523,8 @@ public class VpnSettings extends RestrictedSettingsFragment implements // Fetch VPN-enabled apps from AppOps. AppOpsManager aom = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); - List apps = aom.getPackagesForOps(new int[] {OP_ACTIVATE_VPN}); + List apps = + aom.getPackagesForOps(new int[] {OP_ACTIVATE_VPN, OP_ACTIVATE_PLATFORM_VPN}); if (apps != null) { for (AppOpsManager.PackageOps pkg : apps) { int userId = UserHandle.getUserId(pkg.getUid()); @@ -533,8 +535,8 @@ public class VpnSettings extends RestrictedSettingsFragment implements // Look for a MODE_ALLOWED permission to activate VPN. boolean allowed = false; for (AppOpsManager.OpEntry op : pkg.getOps()) { - if (op.getOp() == OP_ACTIVATE_VPN && - op.getMode() == AppOpsManager.MODE_ALLOWED) { + if ((op.getOp() == OP_ACTIVATE_VPN || op.getOp() == OP_ACTIVATE_PLATFORM_VPN) + && op.getMode() == AppOpsManager.MODE_ALLOWED) { allowed = true; } } From 62e55361a8a645a99f38938fe43d231fb419b80b Mon Sep 17 00:00:00 2001 From: Benedict Wong Date: Sun, 10 Nov 2019 03:42:17 -0800 Subject: [PATCH 2/2] Update setVpnPackageAuthorization call with VPN type This commit updates the Settings to also pass the additional VPN type for app-based VPNs. Bug: 144246835 Test: Compiles, manually tested to be working Change-Id: I10cf17419636c3c30e1ec06bb3e6751cb5c65d9b Merged-In: I10cf17419636c3c30e1ec06bb3e6751cb5c65d9b --- src/com/android/settings/vpn2/AppDialogFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/vpn2/AppDialogFragment.java b/src/com/android/settings/vpn2/AppDialogFragment.java index 2f9cd7a7101..ea9e546a6e5 100644 --- a/src/com/android/settings/vpn2/AppDialogFragment.java +++ b/src/com/android/settings/vpn2/AppDialogFragment.java @@ -22,6 +22,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageInfo; import android.net.IConnectivityManager; +import android.net.VpnManager; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; @@ -145,7 +146,8 @@ public class AppDialogFragment extends InstrumentedDialogFragment implements App } final int userId = getUserId(); try { - mService.setVpnPackageAuthorization(mPackageInfo.packageName, userId, false); + mService.setVpnPackageAuthorization( + mPackageInfo.packageName, userId, VpnManager.TYPE_VPN_NONE); onDisconnect(dialog); } catch (RemoteException e) { Log.e(TAG, "Failed to forget authorization of " + mPackageInfo.packageName +