Merge "[JS01]Remove hidden API usage of Connectivity Sevice" am: 46196fb05a am: 5746f2c04f

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1628361

Change-Id: I7b4e289f13856f8015757d23a478fa923773d37a
This commit is contained in:
Frank Li
2021-03-30 09:00:11 +00:00
committed by Automerger Merge Worker
5 changed files with 66 additions and 14 deletions

View File

@@ -532,18 +532,23 @@ public final class JobStore {
/**
* Write out a tag with data identifying this job's constraints. If the constraint isn't here
* it doesn't apply.
* TODO: b/183455312 Update this code to use proper serialization for NetworkRequest,
* because currently store is not including everything (like, UIDs, bandwidth,
* signal strength etc. are lost).
*/
private void writeConstraintsToXml(XmlSerializer out, JobStatus jobStatus) throws IOException {
out.startTag(null, XML_TAG_PARAMS_CONSTRAINTS);
if (jobStatus.hasConnectivityConstraint()) {
final NetworkRequest network = jobStatus.getJob().getRequiredNetwork();
// STOPSHIP b/183071974: improve the scheme for backward compatibility and
// mainline cleanliness.
out.attribute(null, "net-capabilities", Long.toString(
BitUtils.packBits(network.networkCapabilities.getCapabilities())));
BitUtils.packBits(network.getCapabilities())));
out.attribute(null, "net-unwanted-capabilities", Long.toString(
BitUtils.packBits(network.networkCapabilities.getUnwantedCapabilities())));
BitUtils.packBits(network.getUnwantedCapabilities())));
out.attribute(null, "net-transport-types", Long.toString(
BitUtils.packBits(network.networkCapabilities.getTransportTypes())));
BitUtils.packBits(network.getTransportTypes())));
}
if (jobStatus.hasIdleConstraint()) {
out.attribute(null, "idle", Boolean.toString(true));
@@ -967,18 +972,23 @@ public final class JobStore {
null, "net-unwanted-capabilities");
final String netTransportTypes = parser.getAttributeValue(null, "net-transport-types");
if (netCapabilities != null && netTransportTypes != null) {
final NetworkRequest request = new NetworkRequest.Builder().build();
final NetworkRequest.Builder builder = new NetworkRequest.Builder()
.clearCapabilities();
final long unwantedCapabilities = netUnwantedCapabilities != null
? Long.parseLong(netUnwantedCapabilities)
: BitUtils.packBits(request.networkCapabilities.getUnwantedCapabilities());
: BitUtils.packBits(builder.build().getUnwantedCapabilities());
// We're okay throwing NFE here; caught by caller
request.networkCapabilities.setCapabilities(
BitUtils.unpackBits(Long.parseLong(netCapabilities)),
BitUtils.unpackBits(unwantedCapabilities));
request.networkCapabilities.setTransportTypes(
BitUtils.unpackBits(Long.parseLong(netTransportTypes)));
jobBuilder.setRequiredNetwork(request);
for (int capability : BitUtils.unpackBits(Long.parseLong(netCapabilities))) {
builder.addCapability(capability);
}
for (int unwantedCapability : BitUtils.unpackBits(
Long.parseLong(netUnwantedCapabilities))) {
builder.addUnwantedCapability(unwantedCapability);
}
for (int transport : BitUtils.unpackBits(Long.parseLong(netTransportTypes))) {
builder.addTransportType(transport);
}
jobBuilder.setRequiredNetwork(builder.build());
} else {
// Read legacy values
val = parser.getAttributeValue(null, "connectivity");

View File

@@ -68,6 +68,7 @@ package android.net {
method public boolean bindProcessToNetwork(@Nullable android.net.Network);
method @NonNull public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull android.net.IpSecManager.UdpEncapsulationSocket, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
method @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.Network getActiveNetwork();
method @Nullable @RequiresPermission(android.Manifest.permission.NETWORK_STACK) public android.net.Network getActiveNetworkForUid(int);
method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo getActiveNetworkInfo();
method @Deprecated @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.NetworkInfo[] getAllNetworkInfo();
method @NonNull @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public android.net.Network[] getAllNetworks();
@@ -387,7 +388,9 @@ package android.net {
public class NetworkRequest implements android.os.Parcelable {
method public boolean canBeSatisfiedBy(@Nullable android.net.NetworkCapabilities);
method public int describeContents();
method @NonNull public int[] getCapabilities();
method @Nullable public android.net.NetworkSpecifier getNetworkSpecifier();
method @NonNull public int[] getTransportTypes();
method public boolean hasCapability(int);
method public boolean hasTransport(int);
method public void writeToParcel(android.os.Parcel, int);

View File

@@ -120,6 +120,7 @@ package android.net {
}
public class NetworkRequest implements android.os.Parcelable {
method @NonNull public int[] getUnwantedCapabilities();
method public boolean hasUnwantedCapability(int);
}

View File

@@ -1190,8 +1190,7 @@ public class ConnectivityManager {
*
* @return a {@link Network} object for the current default network for the
* given UID or {@code null} if no default network is currently active
*
* @hide
* TODO: b/183465229 Cleanup getActiveNetworkForUid once b/165835257 is fixed
*/
@RequiresPermission(android.Manifest.permission.NETWORK_STACK)
@Nullable

View File

@@ -699,4 +699,43 @@ public class NetworkRequest implements Parcelable {
public int hashCode() {
return Objects.hash(requestId, legacyType, networkCapabilities, type);
}
/**
* Gets all the capabilities set on this {@code NetworkRequest} instance.
*
* @return an array of capability values for this instance.
*/
@NonNull
public @NetCapability int[] getCapabilities() {
// No need to make a defensive copy here as NC#getCapabilities() already returns
// a new array.
return networkCapabilities.getCapabilities();
}
/**
* Gets all the unwanted capabilities set on this {@code NetworkRequest} instance.
*
* @return an array of unwanted capability values for this instance.
*
* @hide
*/
@NonNull
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public @NetCapability int[] getUnwantedCapabilities() {
// No need to make a defensive copy here as NC#getUnwantedCapabilities() already returns
// a new array.
return networkCapabilities.getUnwantedCapabilities();
}
/**
* Gets all the transports set on this {@code NetworkRequest} instance.
*
* @return an array of transport type values for this instance.
*/
@NonNull
public @Transport int[] getTransportTypes() {
// No need to make a defensive copy here as NC#getTransportTypes() already returns
// a new array.
return networkCapabilities.getTransportTypes();
}
}