package cgeo.geocaching.activity;
import cgeo.geocaching.ui.dialog.CustomProgressDialog;
import cgeo.geocaching.utils.Log;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Message;
import android.view.Window;
import android.view.WindowManager;
/**
* progress dialog wrapper for easier management of resources
*/
public class Progress {
private ProgressDialog dialog;
private int progress = 0;
private final boolean hideAbsolute;
public Progress(final boolean hideAbsolute) {
this.hideAbsolute = hideAbsolute;
}
public Progress() {
this(false);
}
public synchronized void dismiss() {
if (isShowing()) {
try {
dialog.dismiss();
} catch (final Exception e) {
Log.e("Progress.dismiss", e);
}
}
dialog = null;
}
public synchronized void show(final Context context, final String title, final String message, final boolean indeterminate, final Message cancelMessage) {
if (!isShowing()) {
createProgressDialog(context, title, message, cancelMessage);
dialog.setIndeterminate(indeterminate);
dialog.show();
}
}
public synchronized void show(final Context context, final String title, final String message, final int style, final Message cancelMessage) {
if (!isShowing()) {
createProgressDialog(context, title, message, cancelMessage);
dialog.setProgressStyle(style);
dialog.show();
}
}
private void createProgressDialog(final Context context, final String title, final String message, final Message cancelMessage) {
dialog = hideAbsolute ? new CustomProgressDialog(context) : new ProgressDialog(context);
dialog.setTitle(title);
dialog.setMessage(message);
if (cancelMessage != null) {
dialog.setCancelable(true);
dialog.setCancelMessage(cancelMessage);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getString(android.R.string.cancel), cancelMessage);
} else {
dialog.setCancelable(false);
}
dialog.setProgress(0);
dialog.setCanceledOnTouchOutside(false);
final Window window = dialog.getWindow();
if (window != null) {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
progress = 0;
}
public synchronized void setMessage(final String message) {
if (dialog != null && dialog.isShowing()) {
dialog.setMessage(message);
}
}
public synchronized boolean isShowing() {
return dialog != null && dialog.isShowing();
}
public synchronized void setMaxProgressAndReset(final int max) {
if (isShowing()) {
dialog.setMax(max);
dialog.setProgress(0);
}
progress = 0;
}
public synchronized void setProgress(final int progress) {
this.progress = progress;
if (isShowing()) {
dialog.setProgress(progress);
}
}
public int getProgress() {
return progress;
}
public void incrementProgressBy(final int increment) {
setProgress(progress + increment);
}
}