package org.emdev.ui.tasks;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import java.util.concurrent.atomic.AtomicBoolean;
import org.emdev.utils.LengthUtils;
public abstract class BaseAsyncTask<Params, Result> extends AsyncTask<Params, String, Result> implements
OnCancelListener {
protected final Context context;
protected final int startProgressStringId;
protected final boolean cancellable;
protected final AtomicBoolean continueFlag = new AtomicBoolean(true);
protected AlertDialog progressDialog;
public BaseAsyncTask(Context context, int startProgressStringId, boolean cancellable) {
this.context = context;
this.startProgressStringId = startProgressStringId;
this.cancellable = cancellable;
}
@Override
protected void onPreExecute() {
onProgressUpdate(context.getResources().getString(startProgressStringId));
}
@Override
public void onCancel(final DialogInterface dialog) {
if (cancellable) {
continueFlag.set(false);
cancel(true);
}
}
@Override
protected void onPostExecute(final Result result) {
closeProgressDialog();
}
protected void closeProgressDialog() {
if (progressDialog != null) {
try {
progressDialog.dismiss();
} catch (final Throwable th) {
}
progressDialog = null;
}
}
@Override
protected void onProgressUpdate(final String... values) {
final int length = LengthUtils.length(values);
if (length == 0) {
return;
}
final String last = values[length - 1];
if (progressDialog == null || !progressDialog.isShowing()) {
progressDialog = new AlertDialog.Builder(context).setMessage(last).show();
if (cancellable) {
progressDialog.setCancelable(true);
progressDialog.setCanceledOnTouchOutside(true);
progressDialog.setOnCancelListener(this);
} else {
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
}
} else {
progressDialog.setMessage(last);
}
}
}