Merge "[JS02]Remove hidden API usage of NetworkRequest.networkCapabilities"

This commit is contained in:
Frank Li
2021-03-30 07:22:40 +00:00
committed by Gerrit Code Review

View File

@@ -21,6 +21,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED;
import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX; import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX;
import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.app.job.JobInfo; import android.app.job.JobInfo;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
@@ -373,15 +374,23 @@ public final class ConnectivityController extends RestrictingController implemen
} }
} }
private static NetworkCapabilities.Builder copyCapabilities(
@NonNull final NetworkRequest request) {
final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder();
for (int transport : request.getTransportTypes()) builder.addTransportType(transport);
for (int capability : request.getCapabilities()) builder.addCapability(capability);
return builder;
}
private static boolean isStrictSatisfied(JobStatus jobStatus, Network network, private static boolean isStrictSatisfied(JobStatus jobStatus, Network network,
NetworkCapabilities capabilities, Constants constants) { NetworkCapabilities capabilities, Constants constants) {
// A restricted job that's out of quota MUST use an unmetered network. // A restricted job that's out of quota MUST use an unmetered network.
if (jobStatus.getEffectiveStandbyBucket() == RESTRICTED_INDEX if (jobStatus.getEffectiveStandbyBucket() == RESTRICTED_INDEX
&& !jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_WITHIN_QUOTA)) { && !jobStatus.isConstraintSatisfied(JobStatus.CONSTRAINT_WITHIN_QUOTA)) {
final NetworkCapabilities required = new NetworkCapabilities.Builder( final NetworkCapabilities.Builder builder =
jobStatus.getJob().getRequiredNetwork().networkCapabilities) copyCapabilities(jobStatus.getJob().getRequiredNetwork());
.addCapability(NET_CAPABILITY_NOT_METERED).build(); builder.addCapability(NET_CAPABILITY_NOT_METERED);
return required.satisfiedByNetworkCapabilities(capabilities); return builder.build().satisfiedByNetworkCapabilities(capabilities);
} else { } else {
return jobStatus.getJob().getRequiredNetwork().canBeSatisfiedBy(capabilities); return jobStatus.getJob().getRequiredNetwork().canBeSatisfiedBy(capabilities);
} }
@@ -395,10 +404,10 @@ public final class ConnectivityController extends RestrictingController implemen
} }
// See if we match after relaxing any unmetered request // See if we match after relaxing any unmetered request
final NetworkCapabilities relaxed = new NetworkCapabilities.Builder( final NetworkCapabilities.Builder builder =
jobStatus.getJob().getRequiredNetwork().networkCapabilities) copyCapabilities(jobStatus.getJob().getRequiredNetwork());
.removeCapability(NET_CAPABILITY_NOT_METERED).build(); builder.removeCapability(NET_CAPABILITY_NOT_METERED);
if (relaxed.satisfiedByNetworkCapabilities(capabilities)) { if (builder.build().satisfiedByNetworkCapabilities(capabilities)) {
// TODO: treat this as "maybe" response; need to check quotas // TODO: treat this as "maybe" response; need to check quotas
return jobStatus.getFractionRunTime() > constants.CONN_PREFETCH_RELAX_FRAC; return jobStatus.getFractionRunTime() > constants.CONN_PREFETCH_RELAX_FRAC;
} else { } else {