/* Copyright (c) 2002-2011 by XMLVM.org * * Project Info: http://www.xmlvm.org * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ package android.app; import org.xmlvm.acl.common.adapter.AlertDialogAdapter; import org.xmlvm.acl.common.subsystems.CommonWidgetFactory; import android.content.Context; import android.content.DialogInterface; import android.internal.Assert; import android.internal.CommonDeviceAPIFinder; import android.util.Log; public class AlertDialog extends Dialog implements DialogInterface { public static class Builder { private String title; private String message; private String positiveButtonTitle; private DialogInterface.OnClickListener positiveButtonClickListener; private String negativeButtonTitle; private DialogInterface.OnClickListener negativeButtonClickListener; private String neutralButtonTitle; private DialogInterface.OnClickListener neutralButtonClickListener; private Context context; public Builder(Context context) { this.context = context; } public Builder setTitle(String title) { this.title = title; return this; } public Builder setTitle(int titleId) { setTitle(context.getResources().getText(titleId)); return this; } public Builder setPositiveButton(String title, DialogInterface.OnClickListener clickListener) { this.positiveButtonTitle = title; this.positiveButtonClickListener = clickListener; return this; } public Builder setPositiveButton(int titleId, DialogInterface.OnClickListener clickListener) { setPositiveButton(context.getResources().getText(titleId), clickListener); return this; } public AlertDialog create() { return new AlertDialog(this); } public Builder setMessage(CharSequence message) { this.message = message.toString(); return this; } public Builder setMessage(int messageId) { setTitle(context.getResources().getText(messageId)); return this; } public Builder setNegativeButton(String title, DialogInterface.OnClickListener clickListener) { this.negativeButtonTitle = title; this.negativeButtonClickListener = clickListener; return this; } public Builder setNegativeButton(int titleId, DialogInterface.OnClickListener clickListener) { setNegativeButton(context.getResources().getText(titleId), clickListener); return this; } public Builder setNeutralButton(String title, DialogInterface.OnClickListener clickListener) { this.neutralButtonTitle = title; this.neutralButtonClickListener = clickListener; return this; } public Builder setNeutralButton(int titleId, DialogInterface.OnClickListener clickListener) { setNeutralButton(context.getResources().getText(titleId), clickListener); return this; } public AlertDialog show() { Assert.NOT_IMPLEMENTED(); return null; } } private Builder builder; private String[] buttonTitles = new String[3]; private OnClickListener[] listeners = new OnClickListener[3]; private String title; private String message; private Context context; protected AlertDialog(Context context) { Assert.NOT_IMPLEMENTED(); } protected AlertDialog(Builder builder) { this.builder = builder; this.context = builder.context; this.title = builder.title; this.message = builder.message; setButton(BUTTON_NEGATIVE, builder.negativeButtonTitle, builder.negativeButtonClickListener); setButton(BUTTON_NEUTRAL, builder.neutralButtonTitle, builder.neutralButtonClickListener); } @Override public void show() { CommonWidgetFactory widgetFactory = CommonDeviceAPIFinder.instance().getWidgetFactory(); String message = ""; CharSequence cancelButtonTitle = builder.positiveButtonTitle; AlertDialogAdapter adapter = widgetFactory.createAlertDialog((String)title, message, this, (String) cancelButtonTitle); adapter.setTitle(title); adapter.setMessage(message); for (int i = 0; i < buttonTitles.length; ++i) { if (buttonTitles[i] != null) { adapter.addButtonWithTitle(buttonTitles[i]); } } adapter.show(); } public void setTitle(String title) { this.title = title; } public void setButton(String string, OnClickListener listener) { buttonTitles[0] = string; listeners[0] = listener; } public void setButton2(String string, OnClickListener listener) { buttonTitles[2] = string; listeners[2] = listener; } public void setButton3(String string, OnClickListener listener) { buttonTitles[1] = string; listeners[1] = listener; } public void setButton(int whichButton, String string, OnClickListener listener) { switch (whichButton) { case BUTTON_POSITIVE: setButton(string, listener); break; case BUTTON_NEGATIVE: setButton2(string, listener); break; case BUTTON_NEUTRAL: setButton3(string, listener); break; } } public void setIcon(int id) { // Do nothing: UIAlertView does not support icons } public void setMessage(String message) { this.message = message; } public void setTitle(int id) { String str = context.getString(id); if (str != null) { setTitle(str); } } /** * XMLVM internal. */ public void clickedButtonAtIndex(int buttonIndex) { OnClickListener listener = listeners[buttonIndex]; if (listener == null) { listener = AlertDialog.this.builder.positiveButtonClickListener; } if (listener != null) { int index = 0; switch (buttonIndex) { case 0: index = DialogInterface.BUTTON1; break; case 1: index = DialogInterface.BUTTON3; break; case 2: index = DialogInterface.BUTTON2; break; } listener.onClick(AlertDialog.this, index); } } @Override public void cancel() { Assert.NOT_IMPLEMENTED(); } }