package com.snda.mzang.tvtogether.utils.ui;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
/**
*
* @author Mark Zang
*
* @param <Params>
* 传递给worker的参数,worker在非ui线程里工作
* @param <Result>
* worker的返回值
*/
public abstract class WaitingDialogAsyncTask<Params, Result> extends AsyncTask<Params, Integer, Result> {
private ProgressDialog waitingDialog;
private final Handler uiHandler;
private boolean showWaitingDialog;
private Context context;
private String waitingMsg;
public WaitingDialogAsyncTask(final Context context, String waitingMsg) {
this.context = context;
this.showWaitingDialog = context != null;
if (showWaitingDialog == true) {
this.uiHandler = new Handler();
} else {
uiHandler = null;
}
this.waitingMsg = waitingMsg;
}
protected abstract Result process(Params param);
@Override
protected Result doInBackground(final Params... params) {
Params first = null;
if (params.length == 0 || params[0] == null) {
first = null;
} else {
first = params[0];
}
final Params data = first;
if (uiHandler != null && context != null && showWaitingDialog == true) {
showWaitingDialog = true;
uiHandler.post(new Runnable() {
public void run() {
waitingDialog = PopupTipsUtil.showWaitingDialog(context, waitingMsg);
}
});
} else {
showWaitingDialog = false;
}
return process(data);
}
protected abstract void postProcess(Result result);
@Override
protected void onPostExecute(Result result) {
if (waitingDialog != null) {
waitingDialog.dismiss();
} else if (showWaitingDialog == true) {
int retry = 0;
try {
while (waitingDialog == null && retry < 10) {
try {
Thread.sleep(100);
retry++;
} catch (InterruptedException e) {
}
}
} finally {
if (waitingDialog != null) {
waitingDialog.dismiss();
}
}
}
postProcess(result);
}
}