package wb.android.async; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import java.lang.ref.WeakReference; public abstract class ProgressTask<T, V> extends AsyncTask<T, Void, V> { private WeakReference<ProgressDialog> mDialogReference; private final String progressMessage; private final boolean showDialog; public ProgressTask(Context context, String progressMessage, boolean showDialog) { this.progressMessage = progressMessage; this.showDialog = showDialog; if (showDialog) this.mDialogReference = new WeakReference<ProgressDialog>(new ProgressDialog(context)); } protected final void onPreExecute() { if (showDialog) { final ProgressDialog progress = mDialogReference.get(); if (progress != null) { progress.setMessage(progressMessage); progress.setIndeterminate(true); progress.setCancelable(false); progress.show(); } } } @Override protected final void onPostExecute(V v) { if (showDialog) { final ProgressDialog progress = mDialogReference.get(); if (progress != null) { if (progress.isShowing()) { progress.dismiss(); } } } onTaskCompleted(v); } protected abstract void onTaskCompleted(V v); }