discord-jadx/app/src/main/java/androidx/work/Configuration.java

220 lines
7.2 KiB
Java

package androidx.work;
import android.annotation.SuppressLint;
import android.os.Build;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.RestrictTo;
import androidx.work.impl.DefaultRunnableScheduler;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
public final class Configuration {
@SuppressLint({"MinMaxConstant"})
public static final int MIN_SCHEDULER_LIMIT = 20;
@NonNull
public final Executor mExecutor;
@NonNull
public final InputMergerFactory mInputMergerFactory;
private final boolean mIsUsingDefaultTaskExecutor;
public final int mLoggingLevel;
public final int mMaxJobSchedulerId;
public final int mMaxSchedulerLimit;
public final int mMinJobSchedulerId;
@NonNull
public final RunnableScheduler mRunnableScheduler;
@NonNull
public final Executor mTaskExecutor;
@NonNull
public final WorkerFactory mWorkerFactory;
public static final class Builder {
public Executor mExecutor;
public InputMergerFactory mInputMergerFactory;
public int mLoggingLevel;
public int mMaxJobSchedulerId;
public int mMaxSchedulerLimit;
public int mMinJobSchedulerId;
public RunnableScheduler mRunnableScheduler;
public Executor mTaskExecutor;
public WorkerFactory mWorkerFactory;
public Builder() {
this.mLoggingLevel = 4;
this.mMinJobSchedulerId = 0;
this.mMaxJobSchedulerId = Integer.MAX_VALUE;
this.mMaxSchedulerLimit = 20;
}
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
public Builder(@NonNull Configuration configuration) {
this.mExecutor = configuration.mExecutor;
this.mWorkerFactory = configuration.mWorkerFactory;
this.mInputMergerFactory = configuration.mInputMergerFactory;
this.mTaskExecutor = configuration.mTaskExecutor;
this.mLoggingLevel = configuration.mLoggingLevel;
this.mMinJobSchedulerId = configuration.mMinJobSchedulerId;
this.mMaxJobSchedulerId = configuration.mMaxJobSchedulerId;
this.mMaxSchedulerLimit = configuration.mMaxSchedulerLimit;
this.mRunnableScheduler = configuration.mRunnableScheduler;
}
@NonNull
public Configuration build() {
return new Configuration(this);
}
@NonNull
public Builder setExecutor(@NonNull Executor executor) {
this.mExecutor = executor;
return this;
}
@NonNull
public Builder setInputMergerFactory(@NonNull InputMergerFactory inputMergerFactory) {
this.mInputMergerFactory = inputMergerFactory;
return this;
}
@NonNull
public Builder setJobSchedulerJobIdRange(int i, int i2) {
if (i2 - i >= 1000) {
this.mMinJobSchedulerId = i;
this.mMaxJobSchedulerId = i2;
return this;
}
throw new IllegalArgumentException("WorkManager needs a range of at least 1000 job ids.");
}
@NonNull
public Builder setMaxSchedulerLimit(int i) {
if (i >= 20) {
this.mMaxSchedulerLimit = Math.min(i, 50);
return this;
}
throw new IllegalArgumentException("WorkManager needs to be able to schedule at least 20 jobs in JobScheduler.");
}
@NonNull
public Builder setMinimumLoggingLevel(int i) {
this.mLoggingLevel = i;
return this;
}
@NonNull
public Builder setRunnableScheduler(@NonNull RunnableScheduler runnableScheduler) {
this.mRunnableScheduler = runnableScheduler;
return this;
}
@NonNull
public Builder setTaskExecutor(@NonNull Executor executor) {
this.mTaskExecutor = executor;
return this;
}
@NonNull
public Builder setWorkerFactory(@NonNull WorkerFactory workerFactory) {
this.mWorkerFactory = workerFactory;
return this;
}
}
public interface Provider {
@NonNull
Configuration getWorkManagerConfiguration();
}
public Configuration(@NonNull Builder builder) {
Executor executor = builder.mExecutor;
if (executor == null) {
this.mExecutor = createDefaultExecutor();
} else {
this.mExecutor = executor;
}
Executor executor2 = builder.mTaskExecutor;
if (executor2 == null) {
this.mIsUsingDefaultTaskExecutor = true;
this.mTaskExecutor = createDefaultExecutor();
} else {
this.mIsUsingDefaultTaskExecutor = false;
this.mTaskExecutor = executor2;
}
WorkerFactory workerFactory = builder.mWorkerFactory;
if (workerFactory == null) {
this.mWorkerFactory = WorkerFactory.getDefaultWorkerFactory();
} else {
this.mWorkerFactory = workerFactory;
}
InputMergerFactory inputMergerFactory = builder.mInputMergerFactory;
if (inputMergerFactory == null) {
this.mInputMergerFactory = InputMergerFactory.getDefaultInputMergerFactory();
} else {
this.mInputMergerFactory = inputMergerFactory;
}
RunnableScheduler runnableScheduler = builder.mRunnableScheduler;
if (runnableScheduler == null) {
this.mRunnableScheduler = new DefaultRunnableScheduler();
} else {
this.mRunnableScheduler = runnableScheduler;
}
this.mLoggingLevel = builder.mLoggingLevel;
this.mMinJobSchedulerId = builder.mMinJobSchedulerId;
this.mMaxJobSchedulerId = builder.mMaxJobSchedulerId;
this.mMaxSchedulerLimit = builder.mMaxSchedulerLimit;
}
@NonNull
private Executor createDefaultExecutor() {
return Executors.newFixedThreadPool(Math.max(2, Math.min(Runtime.getRuntime().availableProcessors() - 1, 4)));
}
@NonNull
public Executor getExecutor() {
return this.mExecutor;
}
@NonNull
public InputMergerFactory getInputMergerFactory() {
return this.mInputMergerFactory;
}
public int getMaxJobSchedulerId() {
return this.mMaxJobSchedulerId;
}
@IntRange(from = 20, to = 50)
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
public int getMaxSchedulerLimit() {
return Build.VERSION.SDK_INT == 23 ? this.mMaxSchedulerLimit / 2 : this.mMaxSchedulerLimit;
}
public int getMinJobSchedulerId() {
return this.mMinJobSchedulerId;
}
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
public int getMinimumLoggingLevel() {
return this.mLoggingLevel;
}
@NonNull
public RunnableScheduler getRunnableScheduler() {
return this.mRunnableScheduler;
}
@NonNull
public Executor getTaskExecutor() {
return this.mTaskExecutor;
}
@NonNull
public WorkerFactory getWorkerFactory() {
return this.mWorkerFactory;
}
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
public boolean isUsingDefaultTaskExecutor() {
return this.mIsUsingDefaultTaskExecutor;
}
}