discord-jadx/app/src/main/java/androidx/work/impl/constraints/WorkConstraintsTracker.java

101 lines
5.0 KiB
Java

package androidx.work.impl.constraints;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.work.Logger;
import androidx.work.impl.constraints.controllers.BatteryChargingController;
import androidx.work.impl.constraints.controllers.BatteryNotLowController;
import androidx.work.impl.constraints.controllers.ConstraintController;
import androidx.work.impl.constraints.controllers.NetworkConnectedController;
import androidx.work.impl.constraints.controllers.NetworkMeteredController;
import androidx.work.impl.constraints.controllers.NetworkNotRoamingController;
import androidx.work.impl.constraints.controllers.NetworkUnmeteredController;
import androidx.work.impl.constraints.controllers.StorageNotLowController;
import androidx.work.impl.model.WorkSpec;
import androidx.work.impl.utils.taskexecutor.TaskExecutor;
import java.util.ArrayList;
import java.util.List;
public class WorkConstraintsTracker implements ConstraintController.OnConstraintUpdatedCallback {
private static final String TAG = Logger.tagWithPrefix("WorkConstraintsTracker");
@Nullable
private final WorkConstraintsCallback mCallback;
private final ConstraintController<?>[] mConstraintControllers;
private final Object mLock = new Object();
public WorkConstraintsTracker(@NonNull Context context, @NonNull TaskExecutor taskExecutor, @Nullable WorkConstraintsCallback workConstraintsCallback) {
Context applicationContext = context.getApplicationContext();
this.mCallback = workConstraintsCallback;
this.mConstraintControllers = new ConstraintController[]{new BatteryChargingController(applicationContext, taskExecutor), new BatteryNotLowController(applicationContext, taskExecutor), new StorageNotLowController(applicationContext, taskExecutor), new NetworkConnectedController(applicationContext, taskExecutor), new NetworkUnmeteredController(applicationContext, taskExecutor), new NetworkNotRoamingController(applicationContext, taskExecutor), new NetworkMeteredController(applicationContext, taskExecutor)};
}
@VisibleForTesting
public WorkConstraintsTracker(@Nullable WorkConstraintsCallback workConstraintsCallback, ConstraintController<?>[] constraintControllerArr) {
this.mCallback = workConstraintsCallback;
this.mConstraintControllers = constraintControllerArr;
}
public boolean areAllConstraintsMet(@NonNull String str) {
synchronized (this.mLock) {
ConstraintController<?>[] constraintControllerArr = this.mConstraintControllers;
for (ConstraintController<?> constraintController : constraintControllerArr) {
if (constraintController.isWorkSpecConstrained(str)) {
Logger.get().debug(TAG, String.format("Work %s constrained by %s", str, constraintController.getClass().getSimpleName()), new Throwable[0]);
return false;
}
}
return true;
}
}
@Override // androidx.work.impl.constraints.controllers.ConstraintController.OnConstraintUpdatedCallback
public void onConstraintMet(@NonNull List<String> list) {
synchronized (this.mLock) {
ArrayList arrayList = new ArrayList();
for (String str : list) {
if (areAllConstraintsMet(str)) {
Logger.get().debug(TAG, String.format("Constraints met for %s", str), new Throwable[0]);
arrayList.add(str);
}
}
WorkConstraintsCallback workConstraintsCallback = this.mCallback;
if (workConstraintsCallback != null) {
workConstraintsCallback.onAllConstraintsMet(arrayList);
}
}
}
@Override // androidx.work.impl.constraints.controllers.ConstraintController.OnConstraintUpdatedCallback
public void onConstraintNotMet(@NonNull List<String> list) {
synchronized (this.mLock) {
WorkConstraintsCallback workConstraintsCallback = this.mCallback;
if (workConstraintsCallback != null) {
workConstraintsCallback.onAllConstraintsNotMet(list);
}
}
}
public void replace(@NonNull Iterable<WorkSpec> iterable) {
synchronized (this.mLock) {
for (ConstraintController<?> constraintController : this.mConstraintControllers) {
constraintController.setCallback(null);
}
for (ConstraintController<?> constraintController2 : this.mConstraintControllers) {
constraintController2.replace(iterable);
}
for (ConstraintController<?> constraintController3 : this.mConstraintControllers) {
constraintController3.setCallback(this);
}
}
}
public void reset() {
synchronized (this.mLock) {
for (ConstraintController<?> constraintController : this.mConstraintControllers) {
constraintController.reset();
}
}
}
}