Use formal API for ActivityThread to set proxy
Add getProxyForNetwork to the public API, and use ConnectivityManager APIs from ActivityThread (instead of hidden APIs) to get/set the proxy for an app process. getProxyForNetwork allows clients to find which proxy applies, which can be a global proxy setting or a per-network proxy. The default proxy is now initialized with getDefaultProxy instead of getProxyForNetwork(null); this should not make a difference, as nothing should have called bindProcessToNetwork at that point yet. Bug: 174436414 Test: m; device boots Change-Id: Ifb516194ecde1567cea4b6806946091cdcf2f015
This commit is contained in:
@@ -182,6 +182,10 @@ package android.net {
|
||||
field public static final int TRANSPORT_TEST = 7; // 0x7
|
||||
}
|
||||
|
||||
public final class Proxy {
|
||||
method public static void setHttpProxyConfiguration(@Nullable android.net.ProxyInfo);
|
||||
}
|
||||
|
||||
public final class TcpRepairWindow {
|
||||
ctor public TcpRepairWindow(int, int, int, int, int, int);
|
||||
field public final int maxWindow;
|
||||
|
||||
@@ -95,7 +95,6 @@ import android.media.MediaFrameworkInitializer;
|
||||
import android.media.MediaFrameworkPlatformInitializer;
|
||||
import android.media.MediaServiceManager;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.IConnectivityManager;
|
||||
import android.net.Proxy;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
@@ -6576,25 +6575,6 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
// Pass the current context to HardwareRenderer
|
||||
HardwareRenderer.setContextForInit(getSystemContext());
|
||||
|
||||
/**
|
||||
* Initialize the default http proxy in this process for the reasons we set the time zone.
|
||||
*/
|
||||
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Setup proxies");
|
||||
final IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
|
||||
if (b != null) {
|
||||
// In pre-boot mode (doing initial launch to collect password), not
|
||||
// all system is up. This includes the connectivity service, so don't
|
||||
// crash if we can't get it.
|
||||
final IConnectivityManager service = IConnectivityManager.Stub.asInterface(b);
|
||||
try {
|
||||
Proxy.setHttpProxySystemProperty(service.getProxyForNetwork(null));
|
||||
} catch (RemoteException e) {
|
||||
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
|
||||
|
||||
// Instrumentation info affects the class loader, so load it before
|
||||
// setting up the app context.
|
||||
final InstrumentationInfo ii;
|
||||
@@ -6608,6 +6588,23 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
updateLocaleListFromAppContext(appContext,
|
||||
mResourcesManager.getConfiguration().getLocales());
|
||||
|
||||
// Initialize the default http proxy in this process.
|
||||
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "Setup proxies");
|
||||
try {
|
||||
// In pre-boot mode (doing initial launch to collect password), not all system is up.
|
||||
// This includes the connectivity service, so trying to obtain ConnectivityManager at
|
||||
// that point would return null. Check whether the ConnectivityService is available, and
|
||||
// avoid crashing with a NullPointerException if it is not.
|
||||
final IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
|
||||
if (b != null) {
|
||||
final ConnectivityManager cm =
|
||||
appContext.getSystemService(ConnectivityManager.class);
|
||||
Proxy.setHttpProxyConfiguration(cm.getDefaultProxy());
|
||||
}
|
||||
} finally {
|
||||
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
|
||||
}
|
||||
|
||||
if (!Process.isIsolated()) {
|
||||
final int oldMask = StrictMode.allowThreadDiskWritesMask();
|
||||
try {
|
||||
@@ -7522,8 +7519,8 @@ public final class ActivityThread extends ClientTransactionHandler {
|
||||
}
|
||||
|
||||
public static void updateHttpProxy(@NonNull Context context) {
|
||||
final ConnectivityManager cm = ConnectivityManager.from(context);
|
||||
Proxy.setHttpProxySystemProperty(cm.getDefaultProxy());
|
||||
final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
|
||||
Proxy.setHttpProxyConfiguration(cm.getDefaultProxy());
|
||||
}
|
||||
|
||||
@UnsupportedAppUsage
|
||||
|
||||
@@ -4609,7 +4609,7 @@ public class ConnectivityManager {
|
||||
// Set HTTP proxy system properties to match network.
|
||||
// TODO: Deprecate this static method and replace it with a non-static version.
|
||||
try {
|
||||
Proxy.setHttpProxySystemProperty(getInstance().getDefaultProxy());
|
||||
Proxy.setHttpProxyConfiguration(getInstance().getDefaultProxy());
|
||||
} catch (SecurityException e) {
|
||||
// The process doesn't have ACCESS_NETWORK_STATE, so we can't fetch the proxy.
|
||||
Log.e(TAG, "Can't set proxy properties", e);
|
||||
|
||||
@@ -16,8 +16,10 @@
|
||||
|
||||
package android.net;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SdkConstant;
|
||||
import android.annotation.SdkConstant.SdkConstantType;
|
||||
import android.annotation.SystemApi;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
@@ -245,7 +247,19 @@ public final class Proxy {
|
||||
|
||||
/** @hide */
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
||||
public static final void setHttpProxySystemProperty(ProxyInfo p) {
|
||||
@Deprecated
|
||||
public static void setHttpProxySystemProperty(ProxyInfo p) {
|
||||
setHttpProxyConfiguration(p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set HTTP proxy configuration for the process to match the provided ProxyInfo.
|
||||
*
|
||||
* If the provided ProxyInfo is null, the proxy configuration will be cleared.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
public static void setHttpProxyConfiguration(@Nullable ProxyInfo p) {
|
||||
String host = null;
|
||||
String port = null;
|
||||
String exclList = null;
|
||||
@@ -256,11 +270,11 @@ public final class Proxy {
|
||||
exclList = ProxyUtils.exclusionListAsString(p.getExclusionList());
|
||||
pacFileUrl = p.getPacFileUrl();
|
||||
}
|
||||
setHttpProxySystemProperty(host, port, exclList, pacFileUrl);
|
||||
setHttpProxyConfiguration(host, port, exclList, pacFileUrl);
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
public static final void setHttpProxySystemProperty(String host, String port, String exclList,
|
||||
public static void setHttpProxyConfiguration(String host, String port, String exclList,
|
||||
Uri pacFileUrl) {
|
||||
if (exclList != null) exclList = exclList.replace(",", "|");
|
||||
if (false) Log.d(TAG, "setHttpProxySystemProperty :"+host+":"+port+" - "+exclList);
|
||||
|
||||
Reference in New Issue
Block a user