package org.holoeverywhere.demo.fragments.dialogs;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import org.holoeverywhere.app.Dialog;
import org.holoeverywhere.app.DialogFragment;
import org.holoeverywhere.app.ProgressDialog;
import java.util.concurrent.TimeUnit;
public class DialogsProgressDialogFragment extends DialogFragment {
private final class CustomTask extends AsyncTask<Void, Integer, Void> {
private int mInitalPosition = 0;
@Override
protected Void doInBackground(Void... params) {
for (int i = mInitalPosition; i <= 100; i++) {
if (isCancelled()) {
return null;
}
publishProgress(i);
try {
TimeUnit.MILLISECONDS.sleep(150);
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
mLastPosition = 0;
if (getDialog() != null && getDialog().isShowing()) {
dismiss();
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
if (mDialog != null) {
mDialog.setProgress(mLastPosition = values[0]);
}
}
}
private static final String KEY_INITIAL_POSITION = "initial_position";
private ProgressDialog mDialog;
private int mLastPosition = 0;
private CustomTask mTask;
@Override
public void onCancel(DialogInterface dialog) {
if (mTask != null) {
mTask.cancel(false);
}
super.onCancel(dialog);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (savedInstanceState != null) {
mLastPosition = savedInstanceState.getInt(KEY_INITIAL_POSITION, 0);
}
mDialog = new ProgressDialog(getSupportActivity(), getTheme());
mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mDialog.setIndeterminate(false);
mDialog.setMax(100);
mDialog.setMessage("Task running...");
mDialog.setProgressNumberFormat("");
mDialog.setCancelable(true);
mTask = new CustomTask();
mTask.mInitalPosition = mLastPosition;
mTask.execute();
return mDialog;
}
@Override
public void onDismiss(DialogInterface dialog) {
if (mTask != null) {
mTask.cancel(false);
}
super.onDismiss(dialog);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(KEY_INITIAL_POSITION, mLastPosition);
}
}