package com.dh.foundation.utils;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
/**
* 等待进度条展示工具类
* Created By: Seal.Wu
* Date: 2014/11/18
* Time: 22:17
*/
public class ProgressDialogUtil {
private static Dialog progressDialog;
private static int level;//等待框展示层级,只有level=0的时候才能关闭progressDialog
private static DefaultProgressDialogMaker defaultProgressDialogMaker = new DefaultProgressDialogMaker();//对话框制造者
private static ProgressDialogMaker dialogMaker;
public static ProgressDialogMaker getDialogMaker() {
return dialogMaker;
}
/**
* 设置对话框构建类
*
* @param dialogMaker 对话框构建者
*/
public static void setDialogMaker(ProgressDialogMaker dialogMaker) {
ProgressDialogUtil.dialogMaker = dialogMaker;
}
/**
* 设置等待对话框提醒内容
*/
public static void setTipContent(String content) {
defaultProgressDialogMaker.setContent(content);
}
/**
* 设置自定义的对话框视图
*/
public static void setCustomView(int customViewLayout) {
defaultProgressDialogMaker.setCustomViewLayout(customViewLayout);
}
/**
* 设置对话框样式
*/
public static void setDialogStyle(int dialogStyle) {
defaultProgressDialogMaker.setStyle(dialogStyle);
}
public static synchronized void showProgressDialog(Context context) {
showProgressDialog(context, null);
}
public static synchronized void showProgressDialog(Context context, String content) {
showProgressDialog(context, content, false);
}
public static synchronized void showProgressDialog(Context context, String content,boolean cancelAble) {
if (context instanceof Activity) {
if (progressDialog == null || !context.equals(progressDialog.getOwnerActivity()) || !progressDialog.isShowing()) {
dismissProgressDialog();
if (StringUtils.isEmpty(content)) {
content = "请稍候...";
}
if (dialogMaker != null) {
progressDialog = dialogMaker.makeDialog(context);
} else {
defaultProgressDialogMaker.setContent(content);
progressDialog = defaultProgressDialogMaker.makeDialog(context);
}
progressDialog.setOwnerActivity((Activity) context);
if (!cancelAble) {
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.setCancelable(false);
}
progressDialog.show();
}
level++;
}
}
/**
* 消除对话框,不用担心多个对话框同时出现,只有当showProgressDialog的次数和dismissProgressDialog调用次数相同时,ProgressDialog才会消除
*/
public static synchronized void dismissProgressDialog() {
level--;
if (level < 0) {
level = 0;
}
if (progressDialog != null && level == 0 && progressDialog.isShowing() && !progressDialog.getOwnerActivity().isFinishing()) {
try {
progressDialog.dismiss();
} catch (Exception e) {
DLoggerUtils.e(e);
} finally {
progressDialog = null;
}
}
}
/**
* 一般情况下不要调用此方法,此方法为一次性全部消除所有对话框层级.推荐调用dismissProgressDialog按层级进行消除等待框
*/
public static void dismissAll() {
if (progressDialog != null && progressDialog.isShowing() && !progressDialog.getOwnerActivity().isFinishing()) {
try {
progressDialog.dismiss();
} catch (Exception e) {
DLoggerUtils.e(e);
}
}
/**
* 复位
*/
level = 0;
progressDialog = null;
}
}