package net.sourceforge.simcpux.uikit;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.simcpux.R;
import net.sourceforge.simcpux.R.drawable;
import net.sourceforge.simcpux.R.id;
import net.sourceforge.simcpux.R.layout;
import net.sourceforge.simcpux.R.string;
import net.sourceforge.simcpux.R.style;
import com.tencent.mm.sdk.platformtools.Util;
import com.tencent.mm.sdk.MMAppMgr;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
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.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public final class MMAlert {
public interface OnAlertSelectId {
void onClick(int whichButton);
}
private MMAlert() {
}
public static AlertDialog showAlert(final Context context, final String msg, final String title) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton(R.string.app_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final int msgId, final int titleId) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(titleId);
builder.setMessage(msgId);
builder.setPositiveButton(R.string.app_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, final int which) {
dialog.cancel();
}
});
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final int msgId, final int titleId, final DialogInterface.OnClickListener l) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(titleId);
builder.setMessage(msgId);
builder.setPositiveButton(R.string.app_ok, l);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String msg, final String title, final DialogInterface.OnClickListener l) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton(R.string.app_ok, l);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final int msgId, final int titleId, final DialogInterface.OnClickListener lOk, final DialogInterface.OnClickListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(titleId);
builder.setMessage(msgId);
builder.setPositiveButton(R.string.app_ok, lOk);
builder.setNegativeButton(R.string.app_cancel, lCancel);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final int msg, final int title, final int yes, final int no, final DialogInterface.OnClickListener lOk,
final DialogInterface.OnClickListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton(yes, lOk);
builder.setNegativeButton(no, lCancel);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String msg, final String title, final DialogInterface.OnClickListener lOk, final DialogInterface.OnClickListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton(R.string.app_ok, lOk);
builder.setNegativeButton(R.string.app_cancel, lCancel);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String msg, final String title, final String yes, final String no, final DialogInterface.OnClickListener lOk,
final DialogInterface.OnClickListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.ic_dialog_alert);
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton(yes, lOk);
builder.setNegativeButton(no, lCancel);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String title, final View view, final DialogInterface.OnClickListener lOk) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setView(view);
builder.setPositiveButton(R.string.app_ok, lOk);
// builder.setCancelable(true);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String title, final View view, final String ok, final String cancel, final DialogInterface.OnClickListener lOk,
final DialogInterface.OnClickListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setView(view);
builder.setPositiveButton(ok, lOk);
builder.setNegativeButton(cancel, lCancel);
// builder.setCancelable(false);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String title, final String ok, final View view, final DialogInterface.OnClickListener lOk) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setView(view);
builder.setPositiveButton(ok, lOk);
// builder.setCancelable(true);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String title, final String msg, final View view, final DialogInterface.OnClickListener lOk,
final DialogInterface.OnClickListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setMessage(msg);
builder.setView(view);
builder.setPositiveButton(R.string.app_ok, lOk);
builder.setNegativeButton(R.string.app_cancel, lCancel);
// builder.setCancelable(true);
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if (lCancel != null) {
lCancel.onClick(dialog, 0);
}
}
});
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
public static AlertDialog showAlert(final Context context, final String title, final View view, final DialogInterface.OnCancelListener lCancel) {
if (context instanceof Activity && ((Activity) context).isFinishing()) {
return null;
}
final Builder builder = new AlertDialog.Builder(context);
builder.setTitle(title);
builder.setView(view);
// builder.setCancelable(true);
builder.setOnCancelListener(lCancel);
final AlertDialog alert = builder.create();
alert.show();
return alert;
}
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);
}
public static ProgressDialog showProgressDlg(final Context context, final String title, final String message, final boolean indeterminate, final boolean cancelable, final OnCancelListener lCancel) {
MMAppMgr.activate(true);
return ProgressDialog.show(context, title, message, indeterminate, cancelable, new DialogInterface.OnCancelListener() {
@Override
public void onCancel(final DialogInterface dialog) {
if (lCancel != null) {
lCancel.onCancel(dialog);
}
MMAppMgr.activate(false);
}
});
}
public static AlertDialog showWebAlert(final Context context, final String title, final String rawUrl, final WebViewClient client, final DialogInterface.OnClickListener lOk,
final DialogInterface.OnDismissListener lDismiss) {
final View view = View.inflate(context, R.layout.webalert, null);
final AlertDialog alert = showAlert(context, title, view, lOk);
alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (lDismiss != null) {
lDismiss.onDismiss(dialog);
}
}
});
final WebView info = (WebView) view.findViewById(R.id.info_wv);
info.loadUrl(rawUrl);
if (client != null) {
info.setWebViewClient(client);
}
return alert;
}
public static AlertDialog showWebAlert(final Context context, final String title, final String rawUrl, final WebViewClient client, final String ok, final String cancel,
final DialogInterface.OnClickListener lOk, final DialogInterface.OnClickListener lCancel, final DialogInterface.OnDismissListener lDismiss) {
final View view = View.inflate(context, R.layout.webalert, null);
final AlertDialog alert = showAlert(context, title, view, ok, cancel, lOk, lCancel);
alert.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (lDismiss != null) {
lDismiss.onDismiss(dialog);
}
}
});
final WebView info = (WebView) view.findViewById(R.id.info_wv);
info.loadUrl(rawUrl);
if (client != null) {
info.setWebViewClient(client);
}
return alert;
}
/**
* @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.app_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[] items, String exit, String cancel) {
if (items == null || items.length == 0) {
this.items = new ArrayList<String>();
} else {
this.items = Util.stringsToList(items);
}
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;
}
}