package edu.minggo.chat.util;
import java.util.ArrayList;
import java.util.List;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface.OnCancelListener;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import edu.minggo.chat.R;
public final class OptionAlert {
public interface OnAlertSelectId {
void onClick(int whichButton);
}
private OptionAlert() {
}
public static Dialog showAlert(final Context context, final String title, final String[] items, String exit, final OnAlertSelectId alertDo) {
return showAlert(context, title, items, exit, alertDo, null);
}
/**
* @param context
* Context.
* @param title
* The title of this AlertDialog can be null .
* @param items
* button name list.
* @param alertDo
* methods call Id:Button + cancel_Button.
* @param exit
* Name can be null.It will be Red Color
* @return A AlertDialog
*/
public static Dialog showAlert(final Context context, final String title, final String[] items, String exit, final OnAlertSelectId alertDo, OnCancelListener cancelListener) {
String cancel = context.getString(R.string.cancel);
final Dialog dlg = new Dialog(context, R.style.MMTheme_DataSheet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.alert_dialog_menu_layout, null);
final int cFullFillWidth = 10000;
layout.setMinimumWidth(cFullFillWidth);
final ListView list = (ListView) layout.findViewById(R.id.content_list);
AlertAdapter adapter = new AlertAdapter(context, title, items, exit, cancel);
list.setAdapter(adapter);
list.setDividerHeight(0);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (!(title == null || title.equals("")) && position - 1 >= 0) {
alertDo.onClick(position - 1);
dlg.dismiss();
list.requestFocus();
} else {
alertDo.onClick(position);
dlg.dismiss();
list.requestFocus();
}
}
});
// set a large value put it in bottom
Window w = dlg.getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.x = 0;
final int cMakeBottom = -1000;
lp.y = cMakeBottom;
lp.gravity = Gravity.BOTTOM;
dlg.onWindowAttributesChanged(lp);
dlg.setCanceledOnTouchOutside(true);
if (cancelListener != null) {
dlg.setOnCancelListener(cancelListener);
}
dlg.setContentView(layout);
dlg.show();
return dlg;
}
}
class AlertAdapter extends BaseAdapter {
// private static final String TAG = "AlertAdapter";
public static final int TYPE_BUTTON = 0;
public static final int TYPE_TITLE = 1;
public static final int TYPE_EXIT = 2;
public static final int TYPE_CANCEL = 3;
private List<String> items;
private int[] types;
// private boolean isSpecial = false;
private boolean isTitle = false;
// private boolean isExit = false;
private Context context;
public AlertAdapter(Context context, String title, String[] item, String exit, String cancel) {
if (item == null || item.length == 0) {
this.items = new ArrayList<String>();
} else {
this.items = new ArrayList<String>();
for(String a : item){
items.add(a);
}
}
this.types = new int[this.items.size() + 3];
this.context = context;
if (title != null && !title.equals("")) {
types[0] = TYPE_TITLE;
this.isTitle = true;
this.items.add(0, title);
}
if (exit != null && !exit.equals("")) {
// this.isExit = true;
types[this.items.size()] = TYPE_EXIT;
this.items.add(exit);
}
if (cancel != null && !cancel.equals("")) {
// this.isSpecial = true;
types[this.items.size()] = TYPE_CANCEL;
this.items.add(cancel);
}
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public boolean isEnabled(int position) {
if (position == 0 && isTitle) {
return false;
} else {
return super.isEnabled(position);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final String textString = (String) getItem(position);
ViewHolder holder;
int type = types[position];
if (convertView == null || ((ViewHolder) convertView.getTag()).type != type) {
holder = new ViewHolder();
if (type == TYPE_CANCEL) {
convertView = View.inflate(context, R.layout.alert_dialog_menu_list_layout_cancel, null);
} else if (type == TYPE_BUTTON) {
convertView = View.inflate(context, R.layout.alert_dialog_menu_list_layout, null);
} else if (type == TYPE_TITLE) {
convertView = View.inflate(context, R.layout.alert_dialog_menu_list_layout_title, null);
} else if (type == TYPE_EXIT) {
convertView = View.inflate(context, R.layout.alert_dialog_menu_list_layout_special, null);
}
// holder.view = (LinearLayout) convertView.findViewById(R.id.popup_layout);
holder.text = (TextView) convertView.findViewById(R.id.popup_text);
holder.type = type;
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(textString);
return convertView;
}
static class ViewHolder {
// LinearLayout view;
TextView text;
int type;
}
}