package androidx.work.impl.background.systemalarm; import android.content.Context; import android.content.Intent; import androidx.annotation.NonNull; import androidx.annotation.RestrictTo; import androidx.annotation.WorkerThread; import androidx.work.Logger; import androidx.work.impl.background.systemalarm.SystemAlarmDispatcher; import androidx.work.impl.constraints.WorkConstraintsTracker; import androidx.work.impl.model.WorkSpec; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @RestrictTo({RestrictTo.Scope.LIBRARY_GROUP}) public class ConstraintsCommandHandler { private static final String TAG = Logger.tagWithPrefix("ConstraintsCmdHandler"); private final Context mContext; private final SystemAlarmDispatcher mDispatcher; private final int mStartId; private final WorkConstraintsTracker mWorkConstraintsTracker; public ConstraintsCommandHandler(@NonNull Context context, int i, @NonNull SystemAlarmDispatcher systemAlarmDispatcher) { this.mContext = context; this.mStartId = i; this.mDispatcher = systemAlarmDispatcher; this.mWorkConstraintsTracker = new WorkConstraintsTracker(context, systemAlarmDispatcher.getTaskExecutor(), null); } @WorkerThread public void handleConstraintsChanged() { List scheduledWork = this.mDispatcher.getWorkManager().getWorkDatabase().workSpecDao().getScheduledWork(); ConstraintProxy.updateAll(this.mContext, scheduledWork); this.mWorkConstraintsTracker.replace(scheduledWork); ArrayList arrayList = new ArrayList(scheduledWork.size()); long currentTimeMillis = System.currentTimeMillis(); for (WorkSpec workSpec : scheduledWork) { String str = workSpec.f29id; if (currentTimeMillis >= workSpec.calculateNextRunTime() && (!workSpec.hasConstraints() || this.mWorkConstraintsTracker.areAllConstraintsMet(str))) { arrayList.add(workSpec); } } Iterator it = arrayList.iterator(); while (it.hasNext()) { String str2 = ((WorkSpec) it.next()).f29id; Intent createDelayMetIntent = CommandHandler.createDelayMetIntent(this.mContext, str2); Logger.get().debug(TAG, String.format("Creating a delay_met command for workSpec with id (%s)", str2), new Throwable[0]); SystemAlarmDispatcher systemAlarmDispatcher = this.mDispatcher; systemAlarmDispatcher.postOnMainThread(new SystemAlarmDispatcher.AddRunnable(systemAlarmDispatcher, createDelayMetIntent, this.mStartId)); } this.mWorkConstraintsTracker.reset(); } }