blob: 8c2f5a1cd5edeb57c86319ce1c12c5d421919553 [file] [log] [blame]
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.work;
import android.net.Network;
import android.net.Uri;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.work.impl.utils.taskexecutor.TaskExecutor;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Executor;
/**
* Setup parameters for a {@link ListenableWorker}.
*/
public final class WorkerParameters {
private @NonNull UUID mId;
private @NonNull Data mInputData;
private @NonNull Set<String> mTags;
private @NonNull RuntimeExtras mRuntimeExtras;
private int mRunAttemptCount;
private @NonNull Executor mBackgroundExecutor;
private @NonNull TaskExecutor mWorkTaskExecutor;
private @NonNull WorkerFactory mWorkerFactory;
private @NonNull ProgressUpdater mProgressUpdater;
/**
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public WorkerParameters(
@NonNull UUID id,
@NonNull Data inputData,
@NonNull Collection<String> tags,
@NonNull RuntimeExtras runtimeExtras,
@IntRange(from = 0) int runAttemptCount,
@NonNull Executor backgroundExecutor,
@NonNull TaskExecutor workTaskExecutor,
@NonNull WorkerFactory workerFactory,
@NonNull ProgressUpdater progressUpdater) {
mId = id;
mInputData = inputData;
mTags = new HashSet<>(tags);
mRuntimeExtras = runtimeExtras;
mRunAttemptCount = runAttemptCount;
mBackgroundExecutor = backgroundExecutor;
mWorkTaskExecutor = workTaskExecutor;
mWorkerFactory = workerFactory;
mProgressUpdater = progressUpdater;
}
/**
* Gets the ID of the {@link WorkRequest} that created this {@link ListenableWorker}.
*
* @return The ID of the creating {@link WorkRequest}
*/
public @NonNull UUID getId() {
return mId;
}
/**
* Gets the input data. Note that in the case that there are multiple prerequisites for this
* {@link ListenableWorker}, the input data has been run through an {@link InputMerger}.
*
* @return The input data for this work
* @see OneTimeWorkRequest.Builder#setInputMerger(Class)
*/
public @NonNull Data getInputData() {
return mInputData;
}
/**
* Gets a {@link java.util.Set} of tags associated with this Worker's {@link WorkRequest}.
*
* @return The {@link java.util.Set} of tags associated with this Worker's {@link WorkRequest}
* @see WorkRequest.Builder#addTag(String)
*/
public @NonNull Set<String> getTags() {
return mTags;
}
/**
* Gets the list of content {@link android.net.Uri}s that caused this Worker to execute. See
* @code JobParameters#getTriggeredContentUris()} for relevant {@code JobScheduler} code.
*
* @return The list of content {@link android.net.Uri}s that caused this Worker to execute
* @see Constraints.Builder#addContentUriTrigger(android.net.Uri, boolean)
*/
@RequiresApi(24)
public @NonNull List<Uri> getTriggeredContentUris() {
return mRuntimeExtras.triggeredContentUris;
}
/**
* Gets the list of content authorities that caused this Worker to execute. See
* {@code JobParameters#getTriggeredContentAuthorities()} for relevant {@code JobScheduler}
* code.
*
* @return The list of content authorities that caused this Worker to execute
*/
@RequiresApi(24)
public @NonNull List<String> getTriggeredContentAuthorities() {
return mRuntimeExtras.triggeredContentAuthorities;
}
/**
* Gets the {@link android.net.Network} to use for this Worker. This method returns
* {@code null} if there is no network needed for this work request.
*
* @return The {@link android.net.Network} specified by the OS to be used with this Worker
*/
@RequiresApi(28)
public @Nullable Network getNetwork() {
return mRuntimeExtras.network;
}
/**
* Gets the current run attempt count for this work. Note that for periodic work, this value
* gets reset between periods.
*
* @return The current run attempt count for this work.
*/
@IntRange(from = 0)
public int getRunAttemptCount() {
return mRunAttemptCount;
}
/**
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public @NonNull Executor getBackgroundExecutor() {
return mBackgroundExecutor;
}
/**
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public @NonNull TaskExecutor getTaskExecutor() {
return mWorkTaskExecutor;
}
/**
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public @NonNull WorkerFactory getWorkerFactory() {
return mWorkerFactory;
}
/**
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public @NonNull ProgressUpdater getProgressUpdater() {
return mProgressUpdater;
}
/**
* Extra runtime information for Workers.
*
* @hide
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public static class RuntimeExtras {
public @NonNull List<String> triggeredContentAuthorities = Collections.emptyList();
public @NonNull List<Uri> triggeredContentUris = Collections.emptyList();
@RequiresApi(28)
public Network network;
}
}