Remove the hidden NetworkRequest usage
Constructor of JobStatus may update the network request in the JobInfo parameter. NetworkRequest is moving into the incoming connectivity module. The hidden methods and members usage will not allowed anymore, so it requires to rebuild the network request for any update in the network request. Expose a new Builder constructor as a helper method to construct from an existing JobInfo instance which will helpful for such cases that need to clone the JobInfo and update only specific items. Also, JobStatus which is inside the platform could not refer to the hidden members or methods of classes in the connectivity mainline module. Callers who want to construct a network request should use the formal NetworkRequest.Builder. Update the usage accordingly to resolve the hidden usage. Bug: 172183305 Test: atest JobInfoTest Test: atest com.android.server.job.controllers.JobStatusTest Change-Id: Ifb74d44e29e13f0e3b995be638c5bfe435a09106
This commit is contained in:
@@ -1021,6 +1021,41 @@ public class JobInfo implements Parcelable {
|
||||
mJobId = jobId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new Builder of JobInfo from an existing instance.
|
||||
* @hide
|
||||
*/
|
||||
public Builder(@NonNull JobInfo job) {
|
||||
mJobId = job.getId();
|
||||
mJobService = job.getService();
|
||||
mExtras = job.getExtras();
|
||||
mTransientExtras = job.getTransientExtras();
|
||||
mClipData = job.getClipData();
|
||||
mClipGrantFlags = job.getClipGrantFlags();
|
||||
mPriority = job.getPriority();
|
||||
mFlags = job.getFlags();
|
||||
mConstraintFlags = job.getConstraintFlags();
|
||||
mNetworkRequest = job.getRequiredNetwork();
|
||||
mNetworkDownloadBytes = job.getEstimatedNetworkDownloadBytes();
|
||||
mNetworkUploadBytes = job.getEstimatedNetworkUploadBytes();
|
||||
mTriggerContentUris = job.getTriggerContentUris() != null
|
||||
? new ArrayList<>(Arrays.asList(job.getTriggerContentUris())) : null;
|
||||
mTriggerContentUpdateDelay = job.getTriggerContentUpdateDelay();
|
||||
mTriggerContentMaxDelay = job.getTriggerContentMaxDelay();
|
||||
mIsPersisted = job.isPersisted();
|
||||
mMinLatencyMillis = job.getMinLatencyMillis();
|
||||
mMaxExecutionDelayMillis = job.getMaxExecutionDelayMillis();
|
||||
mIsPeriodic = job.isPeriodic();
|
||||
mHasEarlyConstraint = job.hasEarlyConstraint();
|
||||
mHasLateConstraint = job.hasLateConstraint();
|
||||
mIntervalMillis = job.getIntervalMillis();
|
||||
mFlexMillis = job.getFlexMillis();
|
||||
mInitialBackoffMillis = job.getInitialBackoffMillis();
|
||||
// mBackoffPolicySet isn't set but it's fine since this is copying from an already valid
|
||||
// job.
|
||||
mBackoffPolicy = job.getBackoffPolicy();
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
||||
public Builder setPriority(int priority) {
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.content.ClipData;
|
||||
import android.content.ComponentName;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.net.Network;
|
||||
import android.net.NetworkRequest;
|
||||
import android.net.Uri;
|
||||
import android.os.RemoteException;
|
||||
import android.os.UserHandle;
|
||||
@@ -38,6 +39,7 @@ import android.text.format.DateFormat;
|
||||
import android.util.ArraySet;
|
||||
import android.util.IndentingPrintWriter;
|
||||
import android.util.Pair;
|
||||
import android.util.Range;
|
||||
import android.util.Slog;
|
||||
import android.util.TimeUtils;
|
||||
import android.util.proto.ProtoOutputStream;
|
||||
@@ -55,6 +57,7 @@ import com.android.server.job.JobStatusShortInfoProto;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
@@ -527,8 +530,15 @@ public final class JobStatus {
|
||||
// Later, when we check if a given network satisfies the required
|
||||
// network, we need to know the UID that is requesting it, so push
|
||||
// our source UID into place.
|
||||
job.getRequiredNetwork().networkCapabilities.setSingleUid(this.sourceUid);
|
||||
final JobInfo.Builder builder = new JobInfo.Builder(job);
|
||||
final NetworkRequest.Builder requestBuilder =
|
||||
new NetworkRequest.Builder(job.getRequiredNetwork());
|
||||
requestBuilder.setUids(
|
||||
Collections.singleton(new Range<Integer>(this.sourceUid, this.sourceUid)));
|
||||
builder.setRequiredNetwork(requestBuilder.build());
|
||||
job = builder.build();
|
||||
}
|
||||
|
||||
final JobSchedulerInternal jsi = LocalServices.getService(JobSchedulerInternal.class);
|
||||
mHasMediaBackupExemption = !job.hasLateConstraint() && exemptedMediaUrisOnly
|
||||
&& requiresNetwork && this.sourcePackageName.equals(jsi.getMediaBackupPackage());
|
||||
|
||||
Reference in New Issue
Block a user