From c8ef219c2646a86c1167171b352afe45dd5ccd5a Mon Sep 17 00:00:00 2001 From: Chalard Jean Date: Fri, 14 Apr 2023 13:18:37 +0900 Subject: [PATCH] Improve doc for CSM#setGlobalProxy Test: comment-only change Change-Id: I597d2ae8297159202ed52daa2f96e792b6623040 --- .../net/ConnectivitySettingsManager.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/framework/src/android/net/ConnectivitySettingsManager.java b/framework/src/android/net/ConnectivitySettingsManager.java index 822e67d339..67dacb88f7 100644 --- a/framework/src/android/net/ConnectivitySettingsManager.java +++ b/framework/src/android/net/ConnectivitySettingsManager.java @@ -28,6 +28,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.content.Context; +import android.content.pm.PackageManager; import android.net.ConnectivityManager.MultipathPreference; import android.os.Binder; import android.os.Build; @@ -36,6 +37,7 @@ import android.os.UserHandle; import android.provider.Settings; import android.text.TextUtils; import android.util.ArraySet; +import android.util.Log; import android.util.Range; import com.android.net.module.util.ConnectivitySettingsUtils; @@ -55,6 +57,7 @@ import java.util.StringJoiner; */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) public class ConnectivitySettingsManager { + private static final String TAG = ConnectivitySettingsManager.class.getSimpleName(); private ConnectivitySettingsManager() {} @@ -696,10 +699,20 @@ public class ConnectivitySettingsManager { /** * Set global http proxy settings from given {@link ProxyInfo}. * + *

+ * While a {@link ProxyInfo} for a PAC proxy can be specified, not all devices support + * PAC proxies. In particular, smaller devices like watches often do not have the capabilities + * necessary to interpret the PAC file. In such cases, calling this API with a PAC proxy + * results in undefined behavior, including possibly breaking networking for applications. + * You can test for this by checking for the presence of {@link PackageManager.FEATURE_WEBVIEW}. + *

+ * * @param context The {@link Context} to set the setting. * @param proxyInfo The {@link ProxyInfo} for global http proxy settings which build from * {@link ProxyInfo#buildPacProxy(Uri)} or * {@link ProxyInfo#buildDirectProxy(String, int, List)} + * @throws UnsupportedOperationException if |proxyInfo| codes for a PAC proxy but the system + * does not support PAC proxies. */ public static void setGlobalProxy(@NonNull Context context, @NonNull ProxyInfo proxyInfo) { final String host = proxyInfo.getHost(); @@ -707,6 +720,14 @@ public class ConnectivitySettingsManager { final String exclusionList = proxyInfo.getExclusionListAsString(); final String pacFileUrl = proxyInfo.getPacFileUrl().toString(); + + if (!TextUtils.isEmpty(pacFileUrl)) { + final PackageManager pm = context.getPackageManager(); + if (null != pm && !pm.hasSystemFeature(PackageManager.FEATURE_WEBVIEW)) { + Log.wtf(TAG, "PAC proxy can't be installed on a device without FEATURE_WEBVIEW"); + } + } + if (TextUtils.isEmpty(pacFileUrl)) { Settings.Global.putString(context.getContentResolver(), GLOBAL_HTTP_PROXY_HOST, host); Settings.Global.putInt(context.getContentResolver(), GLOBAL_HTTP_PROXY_PORT, port);