From c57a01c16616f938eaa84ae5349a53efdec6e4cc Mon Sep 17 00:00:00 2001 From: Charles He Date: Tue, 15 Aug 2017 15:30:22 +0100 Subject: [PATCH] Opt-out for always-on VPN: rename API. Rename the opt-out flag in AndroidManifest to SERVICE_META_DATA_SUPPORTS_ALWAYS_ON as directed by the API Council. Bug: 64331776 Bug: 36650087 Test: runtest --path java/com/android/server/connectivity/VpnTest.java Change-Id: I24326fad7a89083a2409134640bda81ee0359d08 --- api/current.txt | 2 +- api/system-current.txt | 2 +- api/test-current.txt | 2 +- core/java/android/app/admin/DevicePolicyManager.java | 2 +- core/java/android/net/ConnectivityManager.java | 4 ++-- core/java/android/net/VpnService.java | 5 +++-- .../core/java/com/android/server/connectivity/Vpn.java | 8 ++++---- .../net/java/com/android/server/connectivity/VpnTest.java | 2 +- 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/api/current.txt b/api/current.txt index 161fef4e9c8ef..552db445911cc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26033,8 +26033,8 @@ package android.net { method public boolean protect(java.net.Socket); method public boolean protect(java.net.DatagramSocket); method public boolean setUnderlyingNetworks(android.net.Network[]); - field public static final java.lang.String METADATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService"; + field public static final java.lang.String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; } public class VpnService.Builder { diff --git a/api/system-current.txt b/api/system-current.txt index e249a213b6462..22baf08904b05 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -28332,8 +28332,8 @@ package android.net { method public boolean protect(java.net.Socket); method public boolean protect(java.net.DatagramSocket); method public boolean setUnderlyingNetworks(android.net.Network[]); - field public static final java.lang.String METADATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService"; + field public static final java.lang.String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; } public class VpnService.Builder { diff --git a/api/test-current.txt b/api/test-current.txt index 31f09c4607cf0..4b8065df66ced 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -26169,8 +26169,8 @@ package android.net { method public boolean protect(java.net.Socket); method public boolean protect(java.net.DatagramSocket); method public boolean setUnderlyingNetworks(android.net.Network[]); - field public static final java.lang.String METADATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; field public static final java.lang.String SERVICE_INTERFACE = "android.net.VpnService"; + field public static final java.lang.String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; } public class VpnService.Builder { diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index d8da8c5bee824..6f9484c567e97 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -3938,7 +3938,7 @@ public class DevicePolicyManager { * {@link android.Manifest.permission#BIND_VPN_SERVICE}; *
  • target {@link android.os.Build.VERSION_CODES#N API 24} or above; and
  • *
  • not explicitly opt out of the feature through - * {@link android.net.VpnService#METADATA_SUPPORTS_ALWAYS_ON}.
  • + * {@link android.net.VpnService#SERVICE_META_DATA_SUPPORTS_ALWAYS_ON}. * * The call will fail if called with the package name of an unsupported VPN app. * diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 48123fede6f55..744ee8ed0e745 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -840,8 +840,8 @@ public class ConnectivityManager { * In order to support the always-on feature, an app has to * * * @param userId The identifier of the user for whom the VPN app is installed. diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java index 7fb0c47598c82..185b1818df456 100644 --- a/core/java/android/net/VpnService.java +++ b/core/java/android/net/VpnService.java @@ -152,9 +152,10 @@ public class VpnService extends Service { * * } * - *

    This meta-data field defaults to {@code true} if absent. + *

    This meta-data field defaults to {@code true} if absent. It will only have effect on + * {@link android.os.Build.VERSION_CODES#O_MR1} or higher. */ - public static final String METADATA_SUPPORTS_ALWAYS_ON = + public static final String SERVICE_META_DATA_SUPPORTS_ALWAYS_ON = "android.net.VpnService.SUPPORTS_ALWAYS_ON"; /** diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index e82eabfe5ad9b..56cff7c715d63 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -305,8 +305,8 @@ public class Vpn { * In order to support the always-on feature, an app has to *

    * * @param packageName the canonical package name of the VPN app @@ -340,8 +340,8 @@ public class Vpn { for (ResolveInfo rInfo : services) { final Bundle metaData = rInfo.serviceInfo.metaData; - if (metaData != null - && !metaData.getBoolean(VpnService.METADATA_SUPPORTS_ALWAYS_ON, true)) { + if (metaData != null && + !metaData.getBoolean(VpnService.SERVICE_META_DATA_SUPPORTS_ALWAYS_ON, true)) { return false; } } diff --git a/tests/net/java/com/android/server/connectivity/VpnTest.java b/tests/net/java/com/android/server/connectivity/VpnTest.java index f0b3724955aaf..296cb76560af4 100644 --- a/tests/net/java/com/android/server/connectivity/VpnTest.java +++ b/tests/net/java/com/android/server/connectivity/VpnTest.java @@ -346,7 +346,7 @@ public class VpnTest extends AndroidTestCase { // Apps that opt out explicitly are not supported appInfo.targetSdkVersion = VERSION_CODES.CUR_DEVELOPMENT; Bundle metaData = new Bundle(); - metaData.putBoolean(VpnService.METADATA_SUPPORTS_ALWAYS_ON, false); + metaData.putBoolean(VpnService.SERVICE_META_DATA_SUPPORTS_ALWAYS_ON, false); svcInfo.metaData = metaData; assertFalse(vpn.isAlwaysOnPackageSupported(PKGS[0])); }