package com.banking.xc.utils.ui;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
/**
* 对话框统一控制类
*
* TODO 没有很好地解决同一个操作,有可能要放UI线程,有可能不用放UI线程。UI线程和非UI线程之间的协调。
*/
public class DialogController implements AlertDialog.OnClickListener, DialogInterface.OnKeyListener {
protected Builder builder;
protected AlertDialog alertDialog;
private boolean canBack = false;// 默认不允许后退
private boolean canceledOnTouchOutside = true;// 点击弹出框之外界面,是否取消弹出框
private CharSequence initTitle;
private CharSequence initMessage;
private CharSequence initPositiveButton;
private CharSequence initNeutralButton;
private CharSequence initNegativeButton;
private View view;
/**
* 初始化,应该定制后调用(非UI线程)
*/
public void init(Context context) {
builder = new Builder(context);
initContent();
initButton();
}
/**
* 初始化内容
*/
protected void initContent() {
// 标题
if (TextUtils.isEmpty(initTitle)) {
// builder.setTitle("京东商城");// 默认值
} else {
builder.setTitle(initTitle);
}
// 信息
if (TextUtils.isEmpty(initMessage)) {
// 默认值
} else {
builder.setMessage(initMessage);
}
// VIEW
if (null != view) {
builder.setView(view);
}
// 按键事件
builder.setOnKeyListener(this);
}
/**
* 初始化按钮
*/
protected void initButton() {
// (左边的按钮)重试
if (!TextUtils.isEmpty(initPositiveButton)) {
builder.setPositiveButton(initPositiveButton, this);
}
// (中间的按钮)
if (!TextUtils.isEmpty(initNeutralButton)) {
builder.setNeutralButton(initNeutralButton, this);
}
// (右边的按钮)取消或退出
if (!TextUtils.isEmpty(initNegativeButton)) {
builder.setNegativeButton(initNegativeButton, this);
}
}
/**
* 显示(UI线程)
*/
public void show() {
if (null != alertDialog) {
alertDialog.show();
} else if (null != builder) {
alertDialog = builder.show();
alertDialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
} else {
throw new RuntimeException("builder is null, need init this controller");
}
}
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (!isCanBack() && KeyEvent.KEYCODE_BACK == keyCode) {
return true;
}
return false;
}
@Override
public void onClick(DialogInterface dialog, int which) {
}
/**
* 标题
*/
public void setTitle(CharSequence title) {
if (null != alertDialog) {
alertDialog.setTitle(title);
} else if (null != builder) {
builder.setTitle(title);
} else {
initTitle = title;
}
}
/**
* 内容
*/
public void setMessage(CharSequence message) {
if (null != alertDialog) {
alertDialog.setMessage(message);
} else if (null != builder) {
builder.setMessage(message);
} else {
initMessage = message;
}
}
/**
* 左按钮(如果字符串给null或""就隐藏)
*/
public void setPositiveButton(CharSequence text) {
if (null != alertDialog) {
if (TextUtils.isEmpty(text)) {// 隐藏
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setVisibility(View.GONE);
} else {
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, text, this);
}
} else if (null != builder) {
builder.setPositiveButton(text, this);
} else {
initPositiveButton = text;
}
}
/**
* 中按钮(如果字符串给null或""就隐藏)
*/
public void setNeutralButton(CharSequence text) {
if (null != alertDialog) {
if (TextUtils.isEmpty(text)) {// 隐藏
alertDialog.getButton(AlertDialog.BUTTON_NEUTRAL).setVisibility(View.GONE);
} else {
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, text, this);
}
} else if (null != builder) {
builder.setNeutralButton(initNeutralButton, this);
} else {
initNeutralButton = text;
}
}
/**
* 右按钮(如果字符串给null或""就隐藏)
*/
public void setNegativeButton(CharSequence text) {
if (null != alertDialog) {
if (TextUtils.isEmpty(text)) {// 隐藏
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setVisibility(View.GONE);
} else {
alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, text, this);
}
} else if (null != builder) {
builder.setNegativeButton(initNegativeButton, this);
} else {
initNegativeButton = text;
}
}
/**
* 获取Button对象
* @param whichButton
* @return
*/
public Button getButton(int whichButton) {
Button result = null;
if (null != alertDialog) {
result = alertDialog.getButton(whichButton);
}
return result;
}
/**
* 自定义VIEW
*/
public void setView(View view) {
if (null != alertDialog) {
alertDialog.setView(view);
} else if (null != builder) {
builder.setView(view);
} else {
this.view = view;
}
}
public boolean isCanBack() {
return canBack;
}
/**
* 设置后退键是否有效,默认不允许后退
*/
public void setCanBack(boolean canBack) {
this.canBack = canBack;
}
/**
* 单选项列表
*/
public static DialogController getSimpleDialogController(Context context, String[] dataSet, int checkedItem, OnClickListener listener) {
DialogController dialogController = new DialogController();
dialogController.setCanBack(true);
dialogController.init(context);
dialogController.builder.setSingleChoiceItems(dataSet, checkedItem, listener).create();
return dialogController;
}
/**
* 点击弹出框之外界面,是否取消弹出框,默认false
* @param canceled
*/
public void setCanceledOnTouchOutside(boolean canceled) {
this.canceledOnTouchOutside = canceled;
}
}