package com.gh4a;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.app.DialogFragment;
import android.view.View;
import com.gh4a.utils.UiUtils;
public abstract class ProgressDialogTask<T> extends BackgroundTask<T>
implements View.OnClickListener {
private ProgressDialogFragment mFragment;
private BaseActivity mActivity;
private final int mMessageResId;
public ProgressDialogTask(BaseActivity activity, int messageResId) {
super(activity);
mActivity = activity;
mMessageResId = messageResId;
}
protected abstract ProgressDialogTask<T> clone();
protected abstract String getErrorMessage();
@Override
protected void onPreExecute() {
Bundle args = new Bundle();
args.putInt("message_res", mMessageResId);
mFragment = new ProgressDialogFragment();
mFragment.setArguments(args);
mFragment.show(mActivity.getSupportFragmentManager(), "progressdialog");
super.onPreExecute();
}
@Override
protected void onPostExecute(T result) {
if (mFragment.getActivity() != null) {
mFragment.dismissAllowingStateLoss();
}
super.onPostExecute(result);
mFragment = null;
mActivity = null;
}
@Override
protected void onError(Exception e) {
super.onError(e);
Snackbar.make(mActivity.getRootLayout(), getErrorMessage(), Snackbar.LENGTH_LONG)
.setAction(R.string.retry, this)
.show();
}
@Override
public void onClick(View v) {
clone().schedule();
}
public static class ProgressDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int messageResId = getArguments().getInt("message_res", 0);
return UiUtils.createProgressDialog(getActivity(), messageResId);
}
}
}