package de.jodamob.android.espresso;
import com.google.android.apps.common.testing.ui.espresso.IdlingResource;
import com.path.android.jobqueue.BaseJob;
import com.path.android.jobqueue.JobManager;
@Deprecated
public class PriorityJobQueueIdleMonitor implements IdlingResource {
private static final int LOW_PRIORITY = 0;
private final JobManager queue;
public PriorityJobQueueIdleMonitor(JobManager queue) {
this.queue = queue;
}
@Override
public String getName() {
return PriorityJobQueueIdleMonitor.class.getName();
}
@Override
public boolean isIdleNow() {
return queue.count() == 0;
}
@Override
public void registerIdleTransitionCallback(final ResourceCallback callback) {
if (!isIdleNow()) {
addIdleWatcherJob(callback);
}
}
private long addIdleWatcherJob(final ResourceCallback callback) {
return queue.addJob(LOW_PRIORITY, new IdleCheckJob(true, callback));
}
private final class IdleCheckJob extends BaseJob {
private final ResourceCallback callback;
private static final long serialVersionUID = -7531425496860713384L;
private IdleCheckJob(boolean requiresNetwork, ResourceCallback callback) {
super(requiresNetwork);
this.callback = callback;
}
@Override
public void onAdded() {
}
@Override
protected void onCancel() {
notifyOrReAdd(callback);
}
@Override
public void onRun() throws Throwable {
notifyOrReAdd(callback);
}
private void notifyOrReAdd(final ResourceCallback callback) {
if (!isIdleNow()) {
addIdleWatcherJob(callback); // re-add us
} else {
callback.onTransitionToIdle();
}
}
@Override
protected boolean shouldReRunOnThrowable(Throwable arg0) {
return false;
}
}
}