From fb8581aac04926ed78c7bd96b1da6d7148c774dc Mon Sep 17 00:00:00 2001 From: Aaron Huang Date: Wed, 2 Oct 2019 23:37:02 +0800 Subject: [PATCH] Expose IpConfiguration and ProxyInfo APIs Moving IpConfiguration methods to system API for mainline support. Public copy constructors of ProxyInfo and add buildPacProxy(Uri, int) to create a new proxy properties. Bug: 139268426 Bug: 135998869 Test: atest android.net.cts atest android.net.wifi.cts atest FrameworksNetTests ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh Change-Id: I07bcd2a34a222ea2b3cf0d8b497f051011c41c2c --- core/java/android/net/IpConfiguration.java | 54 +++++++++++++++------- core/java/android/net/ProxyInfo.java | 24 +++++++--- 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/core/java/android/net/IpConfiguration.java b/core/java/android/net/IpConfiguration.java index 2af82d7214..143467b15f 100644 --- a/core/java/android/net/IpConfiguration.java +++ b/core/java/android/net/IpConfiguration.java @@ -16,6 +16,10 @@ package android.net; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.SuppressLint; +import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.net.StaticIpConfiguration; import android.os.Parcel; @@ -27,13 +31,17 @@ import java.util.Objects; * A class representing a configured network. * @hide */ -public class IpConfiguration implements Parcelable { +@SystemApi +public final class IpConfiguration implements Parcelable { private static final String TAG = "IpConfiguration"; + // This enum has been used by apps through reflection for many releases. + // Therefore they can't just be removed. Duplicating these constants to + // give an alternate SystemApi is a worse option than exposing them. + @SuppressLint("Enum") public enum IpAssignment { /* Use statically configured IP settings. Configuration can be accessed * with staticIpConfiguration */ - @UnsupportedAppUsage STATIC, /* Use dynamically configured IP settings */ DHCP, @@ -42,14 +50,19 @@ public class IpConfiguration implements Parcelable { UNASSIGNED } + /** @hide */ public IpAssignment ipAssignment; + /** @hide */ public StaticIpConfiguration staticIpConfiguration; + // This enum has been used by apps through reflection for many releases. + // Therefore they can't just be removed. Duplicating these constants to + // give an alternate SystemApi is a worse option than exposing them. + @SuppressLint("Enum") public enum ProxySettings { /* No proxy is to be used. Any existing proxy settings * should be cleared. */ - @UnsupportedAppUsage NONE, /* Use statically configured proxy. Configuration can be accessed * with httpProxy. */ @@ -62,8 +75,10 @@ public class IpConfiguration implements Parcelable { PAC } + /** @hide */ public ProxySettings proxySettings; + /** @hide */ @UnsupportedAppUsage public ProxyInfo httpProxy; @@ -83,6 +98,7 @@ public class IpConfiguration implements Parcelable { init(IpAssignment.UNASSIGNED, ProxySettings.UNASSIGNED, null, null); } + /** @hide */ @UnsupportedAppUsage public IpConfiguration(IpAssignment ipAssignment, ProxySettings proxySettings, @@ -91,7 +107,7 @@ public class IpConfiguration implements Parcelable { init(ipAssignment, proxySettings, staticIpConfiguration, httpProxy); } - public IpConfiguration(IpConfiguration source) { + public IpConfiguration(@NonNull IpConfiguration source) { this(); if (source != null) { init(source.ipAssignment, source.proxySettings, @@ -99,35 +115,35 @@ public class IpConfiguration implements Parcelable { } } - public IpAssignment getIpAssignment() { + public @NonNull IpAssignment getIpAssignment() { return ipAssignment; } - public void setIpAssignment(IpAssignment ipAssignment) { + public void setIpAssignment(@NonNull IpAssignment ipAssignment) { this.ipAssignment = ipAssignment; } - public StaticIpConfiguration getStaticIpConfiguration() { + public @Nullable StaticIpConfiguration getStaticIpConfiguration() { return staticIpConfiguration; } - public void setStaticIpConfiguration(StaticIpConfiguration staticIpConfiguration) { + public void setStaticIpConfiguration(@Nullable StaticIpConfiguration staticIpConfiguration) { this.staticIpConfiguration = staticIpConfiguration; } - public ProxySettings getProxySettings() { + public @NonNull ProxySettings getProxySettings() { return proxySettings; } - public void setProxySettings(ProxySettings proxySettings) { + public void setProxySettings(@NonNull ProxySettings proxySettings) { this.proxySettings = proxySettings; } - public ProxyInfo getHttpProxy() { + public @Nullable ProxyInfo getHttpProxy() { return httpProxy; } - public void setHttpProxy(ProxyInfo httpProxy) { + public void setHttpProxy(@Nullable ProxyInfo httpProxy) { this.httpProxy = httpProxy; } @@ -175,13 +191,19 @@ public class IpConfiguration implements Parcelable { 83 * httpProxy.hashCode(); } - /** Implement the Parcelable interface */ + /** + * Implement the Parcelable interface + * @hide + */ public int describeContents() { return 0; } - /** Implement the Parcelable interface */ - public void writeToParcel(Parcel dest, int flags) { + /** + * Implement the Parcelable interface + * @hide + */ + public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeString(ipAssignment.name()); dest.writeString(proxySettings.name()); dest.writeParcelable(staticIpConfiguration, flags); @@ -189,7 +211,7 @@ public class IpConfiguration implements Parcelable { } /** Implement the Parcelable interface */ - public static final @android.annotation.NonNull Creator CREATOR = + public static final @NonNull Creator CREATOR = new Creator() { public IpConfiguration createFromParcel(Parcel in) { IpConfiguration config = new IpConfiguration(); diff --git a/core/java/android/net/ProxyInfo.java b/core/java/android/net/ProxyInfo.java index 807c467053..9d92db4486 100644 --- a/core/java/android/net/ProxyInfo.java +++ b/core/java/android/net/ProxyInfo.java @@ -16,7 +16,8 @@ package android.net; - +import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; @@ -88,6 +89,15 @@ public class ProxyInfo implements Parcelable { return new ProxyInfo(pacUri); } + /** + * Construct a {@link ProxyInfo} object that will download and run the PAC script at the + * specified URL and port. + */ + @NonNull + public static ProxyInfo buildPacProxy(@NonNull Uri pacUrl, int port) { + return new ProxyInfo(pacUrl, port); + } + /** * Create a ProxyProperties that points at a HTTP Proxy. * @hide @@ -105,7 +115,7 @@ public class ProxyInfo implements Parcelable { * Create a ProxyProperties that points at a PAC URL. * @hide */ - public ProxyInfo(Uri pacFileUrl) { + public ProxyInfo(@NonNull Uri pacFileUrl) { mHost = LOCAL_HOST; mPort = LOCAL_PORT; mExclusionList = LOCAL_EXCL_LIST; @@ -132,7 +142,7 @@ public class ProxyInfo implements Parcelable { * Only used in PacManager after Local Proxy is bound. * @hide */ - public ProxyInfo(Uri pacFileUrl, int localProxyPort) { + public ProxyInfo(@NonNull Uri pacFileUrl, int localProxyPort) { mHost = LOCAL_HOST; mPort = localProxyPort; mExclusionList = LOCAL_EXCL_LIST; @@ -159,11 +169,10 @@ public class ProxyInfo implements Parcelable { mPacFileUrl = Uri.EMPTY; } - // copy constructor instead of clone /** - * @hide + * A copy constructor to hold proxy properties. */ - public ProxyInfo(ProxyInfo source) { + public ProxyInfo(@Nullable ProxyInfo source) { if (source != null) { mHost = source.getHost(); mPort = source.getPort(); @@ -226,12 +235,13 @@ public class ProxyInfo implements Parcelable { * comma separated * @hide */ + @Nullable public String getExclusionListAsString() { return mExclusionList; } /** - * @hide + * Return true if the pattern of proxy is valid, otherwise return false. */ public boolean isValid() { if (!Uri.EMPTY.equals(mPacFileUrl)) return true;