package wb.android.dialog;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnKeyListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
/*
* By default, AlertDialog windows are closed whenever a button is clicked.
* This class is essentially just a wrap-around hack, so that the dialog
* will only be closed when you explicitly close it.
*/
public class BetterDialogBuilder extends AlertDialog.Builder {
private LongLivedOnClickListener _positiveListener, _neutralListener, _negativeListener;
private DialogInterface.OnClickListener _defaultListener = new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {}
};
public BetterDialogBuilder(Context context) {
super(context);
}
public final BetterDialogBuilder setLongLivedPositiveButton(CharSequence text, LongLivedOnClickListener listener) {
_positiveListener = listener;
super.setPositiveButton(text, _defaultListener);
return this;
}
public final BetterDialogBuilder setLongLivedNeutralButton(CharSequence text, LongLivedOnClickListener listener) {
_neutralListener = listener;
super.setNeutralButton(text, _defaultListener);
return this;
}
public final BetterDialogBuilder setLongLivedNegativeButton(CharSequence text, LongLivedOnClickListener listener) {
_negativeListener = listener;
super.setNegativeButton(text, _defaultListener);
return this;
}
@Override
public BetterDialogBuilder setTitle(int titleId) {
super.setTitle(titleId);
return this;
}
@Override
public BetterDialogBuilder setTitle(CharSequence title) {
super.setTitle(title);
return this;
}
@Override
public BetterDialogBuilder setCustomTitle(View customTitleView) {
super.setCustomTitle(customTitleView);
return this;
}
@Override
public BetterDialogBuilder setMessage(int messageId) {
super.setMessage(messageId);
return this;
}
@Override
public BetterDialogBuilder setMessage(CharSequence message) {
super.setMessage(message);
return this;
}
@Override
public BetterDialogBuilder setIcon(int iconId) {
super.setIcon(iconId);
return this;
}
@Override
public BetterDialogBuilder setIcon(Drawable icon) {
super.setIcon(icon);
return this;
}
@Override
public BetterDialogBuilder setPositiveButton(int textId, final OnClickListener listener) {
super.setPositiveButton(textId, listener);
return this;
}
@Override
public BetterDialogBuilder setPositiveButton(CharSequence text, final OnClickListener listener) {
super.setPositiveButton(text, listener);
return this;
}
@Override
public BetterDialogBuilder setNegativeButton(int textId, final OnClickListener listener) {
super.setNegativeButton(textId, listener);
return this;
}
@Override
public BetterDialogBuilder setNegativeButton(CharSequence text, final OnClickListener listener) {
super.setNegativeButton(text, listener);
return this;
}
@Override
public BetterDialogBuilder setNeutralButton(int textId, final OnClickListener listener) {
super.setNeutralButton(textId, listener);
return this;
}
@Override
public BetterDialogBuilder setNeutralButton(CharSequence text, final OnClickListener listener) {
super.setNeutralButton(text, listener);
return this;
}
@Override
public BetterDialogBuilder setCancelable(boolean cancelable) {
super.setCancelable(cancelable);
return this;
}
@Override
public BetterDialogBuilder setOnCancelListener(OnCancelListener onCancelListener) {
super.setOnCancelListener(onCancelListener);
return this;
}
@Override
public BetterDialogBuilder setOnKeyListener(OnKeyListener onKeyListener) {
super.setOnKeyListener(onKeyListener);
return this;
}
@Override
public BetterDialogBuilder setItems(int itemsId, final OnClickListener listener) {
super.setItems(itemsId, listener);
return this;
}
@Override
public BetterDialogBuilder setItems(CharSequence[] items, final OnClickListener listener) {
super.setItems(items, listener);
return this;
}
@Override
public BetterDialogBuilder setAdapter(final ListAdapter adapter, final OnClickListener listener) {
super.setAdapter(adapter, listener);
return this;
}
@Override
public BetterDialogBuilder setCursor(final Cursor cursor, final OnClickListener listener, String labelColumn) {
super.setCursor(cursor, listener, labelColumn);
return this;
}
@Override
public BetterDialogBuilder setMultiChoiceItems(int itemsId, boolean[] checkedItems, final OnMultiChoiceClickListener listener) {
super.setMultiChoiceItems(itemsId, checkedItems, listener);
return this;
}
@Override
public BetterDialogBuilder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener) {
super.setMultiChoiceItems(items, checkedItems, listener);
return this;
}
@Override
public BetterDialogBuilder setMultiChoiceItems(Cursor cursor, String isCheckedColumn, String labelColumn, final OnMultiChoiceClickListener listener) {
super.setMultiChoiceItems(cursor, isCheckedColumn, labelColumn, listener);
return this;
}
@Override
public BetterDialogBuilder setSingleChoiceItems(int itemsId, int checkedItem, final OnClickListener listener) {
super.setSingleChoiceItems(itemsId, checkedItem, listener);
return this;
}
@Override
public BetterDialogBuilder setSingleChoiceItems(Cursor cursor, int checkedItem, String labelColumn, final OnClickListener listener) {
setSingleChoiceItems(cursor, checkedItem, labelColumn, listener);
return this;
}
@Override
public BetterDialogBuilder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener) {
super.setSingleChoiceItems(items, checkedItem, listener);
return this;
}
@Override
public BetterDialogBuilder setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener listener) {
super.setSingleChoiceItems(adapter, checkedItem, listener);
return this;
}
@Override
public BetterDialogBuilder setOnItemSelectedListener(final AdapterView.OnItemSelectedListener listener) {
super.setOnItemSelectedListener(listener);
return this;
}
@Override
public BetterDialogBuilder setView(View view) {
super.setView(view);
return this;
}
@Override
public BetterDialogBuilder setInverseBackgroundForced(boolean useInverseBackground) {
super.setInverseBackgroundForced(useInverseBackground);
return this;
}
@Override
public AlertDialog create() {
return super.create();
}
@Override
public AlertDialog show() {
final AlertDialog dialog = create();
dialog.show();
if (_positiveListener != null) {
Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
_positiveListener.set(dialog, DialogInterface.BUTTON_POSITIVE);
positiveButton.setOnClickListener(_positiveListener);
}
if (_neutralListener != null) {
Button neutralButton = dialog.getButton(DialogInterface.BUTTON_NEUTRAL);
_neutralListener.set(dialog, DialogInterface.BUTTON_NEUTRAL);
neutralButton.setOnClickListener(_neutralListener);
}
if (_negativeListener != null) {
Button negativeButton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
_negativeListener.set(dialog, DialogInterface.BUTTON_NEGATIVE);
negativeButton.setOnClickListener(_negativeListener);
}
return dialog;
}
}