package triaina.commons.workerservice;
import java.util.concurrent.CountDownLatch;
import android.content.Context;
import android.os.Handler;
import android.os.ResultReceiver;
public abstract class AbstractNetworkWorker<T extends Job> implements NetworkWorker<T> {
private volatile boolean mIsConnected;
private volatile CountDownLatch mNetworkWaitLatch;
@Override
abstract public boolean process(T job, int retry, int delayAmount, ResultReceiver receiver, Context context, Handler handler) throws Exception ;
@Override
public void onNetworkStatusChanged(boolean isConnected) {
mIsConnected = isConnected;
if (mIsConnected && mNetworkWaitLatch != null)
mNetworkWaitLatch.countDown();
}
public boolean isConnected() {
return mIsConnected;
}
public boolean waitForNetworkAvailable() {
CountDownLatch networkWaitLatch = null;
if (!mIsConnected)
networkWaitLatch = new CountDownLatch(1);
if (!mIsConnected && networkWaitLatch != null) {
try {
networkWaitLatch.await();
} catch (InterruptedException exp) {
return true;
}
}
return false;
}
}