Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/internal/AlertController.java')
-rw-r--r--android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/internal/AlertController.java811
1 files changed, 811 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/internal/AlertController.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/internal/AlertController.java
new file mode 100644
index 0000000000..e17e1d5d4b
--- /dev/null
+++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/internal/AlertController.java
@@ -0,0 +1,811 @@
+
+package org.holoeverywhere.internal;
+
+import java.lang.ref.WeakReference;
+
+import org.holoeverywhere.ArrayAdapter;
+import org.holoeverywhere.LayoutInflater;
+import org.holoeverywhere.R;
+import org.holoeverywhere.app.AlertDialog;
+import org.holoeverywhere.widget.Button;
+import org.holoeverywhere.widget.CheckedTextView;
+import org.holoeverywhere.widget.FrameLayout;
+import org.holoeverywhere.widget.LinearLayout;
+import org.holoeverywhere.widget.ListView;
+import org.holoeverywhere.widget.TextView;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.TypedArray;
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.widget.CursorAdapter;
+import android.support.v4.widget.SimpleCursorAdapter;
+import android.text.TextUtils;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.FrameLayout.LayoutParams;
+import android.widget.ImageView;
+import android.widget.ListAdapter;
+import android.widget.ScrollView;
+
+public class AlertController {
+ public static interface AlertDecorViewInstaller {
+ public void installDecorView(Context context, int layout);
+ }
+
+ public static class AlertParams {
+ public interface OnPrepareListViewListener {
+ void onPrepareListView(ListView listView);
+ }
+
+ public ListAdapter mAdapter;
+ public int mButtonBehavior = AlertDialog.DISMISS_ON_ALL;
+ public boolean mCancelable;
+ public int mCheckedItem = -1;
+ public boolean[] mCheckedItems;
+ public final Context mContext;
+ public Cursor mCursor;
+ public View mCustomTitleView;
+ public boolean mForceInverseBackground;
+ public Drawable mIcon;
+ public int mIconId = 0;
+ public final LayoutInflater mInflater;
+ public String mIsCheckedColumn;
+ public boolean mIsMultiChoice;
+ public boolean mIsSingleChoice;
+ public CharSequence[] mItems;
+ public String mLabelColumn;
+ public CharSequence mMessage;
+ public DialogInterface.OnClickListener mNegativeButtonListener;
+ public CharSequence mNegativeButtonText;
+ public DialogInterface.OnClickListener mNeutralButtonListener;
+ public CharSequence mNeutralButtonText;
+ public DialogInterface.OnCancelListener mOnCancelListener;
+ public DialogInterface.OnMultiChoiceClickListener mOnCheckboxClickListener;
+ public DialogInterface.OnClickListener mOnClickListener;
+ public DialogInterface.OnDismissListener mOnDismissListener;
+ public AdapterView.OnItemSelectedListener mOnItemSelectedListener;
+ public DialogInterface.OnKeyListener mOnKeyListener;
+ public OnPrepareListViewListener mOnPrepareListViewListener;
+ public DialogInterface.OnClickListener mPositiveButtonListener;
+ public CharSequence mPositiveButtonText;
+ public int mTheme;
+ public CharSequence mTitle;
+ public View mView;
+ public int mViewSpacingBottom;
+ public int mViewSpacingLeft;
+ public int mViewSpacingRight;
+ public boolean mViewSpacingSpecified = false;
+ public int mViewSpacingTop;
+
+ public AlertParams(Context context) {
+ this(context, 0);
+ }
+
+ public AlertParams(Context context, int theme) {
+ mContext = context;
+ mTheme = theme;
+ mCancelable = true;
+ mInflater = LayoutInflater.from(context);
+ }
+
+ public void apply(AlertController dialog) {
+ if (mCustomTitleView != null) {
+ dialog.setCustomTitle(mCustomTitleView);
+ } else {
+ if (mTitle != null) {
+ dialog.setTitle(mTitle);
+ }
+ if (mIcon != null) {
+ dialog.setIcon(mIcon);
+ }
+ if (mIconId >= 0) {
+ dialog.setIcon(mIconId);
+ }
+ }
+ if (mMessage != null) {
+ dialog.setMessage(mMessage);
+ }
+ if (mPositiveButtonText != null) {
+ dialog.setButton(DialogInterface.BUTTON_POSITIVE,
+ mPositiveButtonText, mPositiveButtonListener, null);
+ }
+ if (mNegativeButtonText != null) {
+ dialog.setButton(DialogInterface.BUTTON_NEGATIVE,
+ mNegativeButtonText, mNegativeButtonListener, null);
+ }
+ if (mNeutralButtonText != null) {
+ dialog.setButton(DialogInterface.BUTTON_NEUTRAL,
+ mNeutralButtonText, mNeutralButtonListener, null);
+ }
+ dialog.setButtonBehavior(mButtonBehavior);
+ if (mForceInverseBackground) {
+ dialog.setInverseBackgroundForced(true);
+ }
+ if (mItems != null || mCursor != null || mAdapter != null) {
+ createListView(dialog);
+ }
+ if (mView != null) {
+ if (mViewSpacingSpecified) {
+ dialog.setView(mView, mViewSpacingLeft, mViewSpacingTop,
+ mViewSpacingRight, mViewSpacingBottom);
+ } else {
+ dialog.setView(mView);
+ }
+ }
+ }
+
+ private void createListView(final AlertController dialog) {
+ final ListView listView = (ListView) mInflater
+ .inflate(dialog.mListLayout, null);
+ ListAdapter adapter;
+ if (mIsMultiChoice) {
+ if (mCursor == null) {
+ adapter = new ArrayAdapter<CharSequence>(mContext,
+ dialog.mMultiChoiceItemLayout, android.R.id.text1, mItems) {
+ @Override
+ public View getView(int position, View convertView,
+ ViewGroup parent) {
+ View view = super.getView(position, convertView,
+ parent);
+ if (mCheckedItems != null) {
+ boolean isItemChecked = mCheckedItems[position];
+ if (isItemChecked) {
+ listView.setItemChecked(position, true);
+ }
+ }
+ return view;
+ }
+ };
+ } else {
+ adapter = new CursorAdapter(mContext, mCursor, false) {
+ private final int mIsCheckedIndex;
+ private final int mLabelIndex;
+
+ {
+ final Cursor cursor = getCursor();
+ mLabelIndex = cursor
+ .getColumnIndexOrThrow(mLabelColumn);
+ mIsCheckedIndex = cursor
+ .getColumnIndexOrThrow(mIsCheckedColumn);
+ }
+
+ @Override
+ public void bindView(View view, Context context,
+ Cursor cursor) {
+ CheckedTextView text = (CheckedTextView) view
+ .findViewById(android.R.id.text1);
+ text.setText(cursor.getString(mLabelIndex));
+ listView.setItemChecked(cursor.getPosition(),
+ cursor.getInt(mIsCheckedIndex) == 1);
+ }
+
+ @Override
+ public View newView(Context context, Cursor cursor,
+ ViewGroup parent) {
+ return mInflater.inflate(
+ dialog.mMultiChoiceItemLayout, parent,
+ false);
+ }
+
+ };
+ }
+ } else {
+ int layout = mIsSingleChoice ? dialog.mSingleChoiceItemLayout
+ : dialog.mListItemLayout;
+ if (mCursor == null) {
+ adapter = mAdapter != null ? mAdapter
+ : new ArrayAdapter<CharSequence>(mContext, layout,
+ android.R.id.text1, mItems);
+ } else {
+ adapter = new SimpleCursorAdapter(mContext, layout,
+ mCursor, new String[] {
+ mLabelColumn
+ },
+ new int[] {
+ android.R.id.text1
+ },
+ CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
+ }
+ }
+ if (mOnPrepareListViewListener != null) {
+ mOnPrepareListViewListener.onPrepareListView(listView);
+ }
+ dialog.mAdapter = adapter;
+ dialog.mCheckedItem = mCheckedItem;
+ if (mOnClickListener != null) {
+ listView.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View v,
+ int position, long id) {
+ mOnClickListener.onClick(dialog.mDialogInterface,
+ position);
+ if (!mIsSingleChoice) {
+ dialog.mDialogInterface.dismiss();
+ }
+ }
+ });
+ } else if (mOnCheckboxClickListener != null) {
+ listView.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View v,
+ int position, long id) {
+ if (mCheckedItems != null) {
+ mCheckedItems[position] = listView
+ .isItemChecked(position);
+ }
+ mOnCheckboxClickListener.onClick(
+ dialog.mDialogInterface, position,
+ listView.isItemChecked(position));
+ }
+ });
+ }
+ if (mOnItemSelectedListener != null) {
+ listView.setOnItemSelectedListener(mOnItemSelectedListener);
+ }
+ if (mIsSingleChoice) {
+ listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
+ } else if (mIsMultiChoice) {
+ listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
+ }
+ dialog.mListView = listView;
+ }
+ }
+
+ private static final class ButtonHandler extends Handler {
+ private static final int MSG_DISMISS_DIALOG = 1;
+ private WeakReference<DialogInterface> mDialog;
+
+ public ButtonHandler(DialogInterface dialog) {
+ mDialog = new WeakReference<DialogInterface>(dialog);
+ }
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case DialogInterface.BUTTON_POSITIVE:
+ case DialogInterface.BUTTON_NEGATIVE:
+ case DialogInterface.BUTTON_NEUTRAL:
+ ((DialogInterface.OnClickListener) msg.obj).onClick(
+ mDialog.get(), msg.what);
+ break;
+
+ case MSG_DISMISS_DIALOG:
+ ((DialogInterface) msg.obj).dismiss();
+ }
+ }
+ }
+
+ static boolean canTextInput(View v) {
+ if (v.onCheckIsTextEditor()) {
+ return true;
+ }
+ if (!(v instanceof ViewGroup)) {
+ return false;
+ }
+ ViewGroup vg = (ViewGroup) v;
+ int i = vg.getChildCount();
+ while (i > 0) {
+ i--;
+ v = vg.getChildAt(i);
+ if (AlertController.canTextInput(v)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean shouldCenterSingleButton(Context context) {
+ TypedValue outValue = new TypedValue();
+ context.getTheme().resolveAttribute(R.attr.alertDialogCenterButtons,
+ outValue, true);
+ return outValue.data != 0;
+ }
+
+ private ListAdapter mAdapter;
+ private int mAlertDialogLayout;
+ private int mButtonBehavior = AlertDialog.DISMISS_ON_ALL;
+ private View.OnClickListener mButtonHandler = new View.OnClickListener() {
+ private boolean needToDismiss(int flag) {
+ return (mButtonBehavior & flag) == flag;
+ }
+
+ @Override
+ public void onClick(View v) {
+ int button;
+ if (v == mButtonPositive) {
+ button = DialogInterface.BUTTON_POSITIVE;
+ } else if (v == mButtonNegative) {
+ button = DialogInterface.BUTTON_NEGATIVE;
+ } else if (v == mButtonNeutral) {
+ button = DialogInterface.BUTTON_NEUTRAL;
+ } else {
+ return;
+ }
+ boolean dismiss = false;
+ switch (button) {
+ case DialogInterface.BUTTON_POSITIVE:
+ send(mButtonPositiveMessage);
+ dismiss = needToDismiss(AlertDialog.DISMISS_ON_POSITIVE);
+ break;
+ case DialogInterface.BUTTON_NEGATIVE:
+ send(mButtonNegativeMessage);
+ dismiss = needToDismiss(AlertDialog.DISMISS_ON_NEGATIVE);
+ break;
+ case DialogInterface.BUTTON_NEUTRAL:
+ send(mButtonNeutralMessage);
+ dismiss = needToDismiss(AlertDialog.DISMISS_ON_NEUTRAL);
+ break;
+ }
+ if (dismiss) {
+ mHandler.obtainMessage(ButtonHandler.MSG_DISMISS_DIALOG,
+ mDialogInterface).sendToTarget();
+ }
+ }
+
+ private void send(Message m) {
+ if (m == null) {
+ return;
+ }
+ Message.obtain(m).sendToTarget();
+ }
+ };
+ private Button mButtonNegative;
+ private Message mButtonNegativeMessage;
+ private CharSequence mButtonNegativeText;
+ private Button mButtonNeutral;
+ private Message mButtonNeutralMessage;
+ private CharSequence mButtonNeutralText;
+ private Button mButtonPositive;
+ private Message mButtonPositiveMessage;
+ private CharSequence mButtonPositiveText;
+ private int mCheckedItem = -1;
+ private final Context mContext;
+ private View mCustomTitleView;
+ private final AlertDecorViewInstaller mDecorViewInstaller;
+ private final DialogInterface mDialogInterface;
+ private boolean mForceInverseBackground;
+ private Handler mHandler;
+ private Drawable mIcon;
+ private int mIconId = -1;
+ private ImageView mIconView;
+ private int mListItemLayout;
+ private int mListLayout;
+ private ListView mListView;
+ private CharSequence mMessage;
+ private TextView mMessageView;
+ private int mMultiChoiceItemLayout;
+ private ScrollView mScrollView;
+ private int mSingleChoiceItemLayout;
+ private CharSequence mTitle;
+ private TextView mTitleView;
+ private View mView;
+ private int mViewSpacingBottom;
+ private int mViewSpacingLeft;
+ private int mViewSpacingRight;
+ private boolean mViewSpacingSpecified = false;
+ private int mViewSpacingTop;
+ private final Window mWindow;
+
+ public AlertController(Context context, DialogInterface di, Window window) {
+ this(context, di, window, null);
+ }
+
+ public AlertController(Context context, DialogInterface di, Window window,
+ AlertDecorViewInstaller decorViewInstaller) {
+ mDecorViewInstaller = decorViewInstaller;
+ mContext = context;
+ mDialogInterface = di;
+ mWindow = window;
+ mHandler = new ButtonHandler(di);
+ TypedArray a = context.obtainStyledAttributes(null,
+ R.styleable.AlertDialog, R.attr.alertDialogStyle,
+ R.style.Holo_AlertDialog);
+ mAlertDialogLayout = a.getResourceId(R.styleable.AlertDialog_layout,
+ R.layout.alert_dialog_holo);
+ mListLayout = a.getResourceId(R.styleable.AlertDialog_listLayout,
+ R.layout.select_dialog_holo);
+ mMultiChoiceItemLayout = a.getResourceId(
+ R.styleable.AlertDialog_multiChoiceItemLayout,
+ R.layout.select_dialog_multichoice_holo);
+ mSingleChoiceItemLayout = a.getResourceId(
+ R.styleable.AlertDialog_singleChoiceItemLayout,
+ R.layout.select_dialog_singlechoice_holo);
+ mListItemLayout = a.getResourceId(
+ R.styleable.AlertDialog_listItemLayout,
+ R.layout.select_dialog_item_holo);
+ a.recycle();
+ }
+
+ private void centerButton(Button button) {
+ LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) button
+ .getLayoutParams();
+ params.gravity = Gravity.CENTER_HORIZONTAL;
+ params.weight = 0.5f;
+ button.setLayoutParams(params);
+ View leftSpacer = mWindow.findViewById(R.id.leftSpacer);
+ if (leftSpacer != null) {
+ leftSpacer.setVisibility(View.VISIBLE);
+ }
+ View rightSpacer = mWindow.findViewById(R.id.rightSpacer);
+ if (rightSpacer != null) {
+ rightSpacer.setVisibility(View.VISIBLE);
+ }
+ }
+
+ public Button getButton(int whichButton) {
+ switch (whichButton) {
+ case DialogInterface.BUTTON_POSITIVE:
+ return mButtonPositive;
+ case DialogInterface.BUTTON_NEGATIVE:
+ return mButtonNegative;
+ case DialogInterface.BUTTON_NEUTRAL:
+ return mButtonNeutral;
+ default:
+ return null;
+ }
+ }
+
+ public ListView getListView() {
+ return mListView;
+ }
+
+ public void installContent() {
+ mWindow.requestFeature(Window.FEATURE_NO_TITLE);
+ if (mView == null || !AlertController.canTextInput(mView)) {
+ mWindow.setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
+ WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+ }
+ if (mDecorViewInstaller == null) {
+ mWindow.setContentView(LayoutInflater.inflate(mWindow.getContext(),
+ mAlertDialogLayout));
+ } else {
+ mDecorViewInstaller.installDecorView(mContext, mAlertDialogLayout);
+ }
+ setupView();
+ }
+
+ public boolean onKeyDown(int keyCode, KeyEvent event) {
+ return mScrollView != null && mScrollView.executeKeyEvent(event);
+ }
+
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ return mScrollView != null && mScrollView.executeKeyEvent(event);
+ }
+
+ private void setBackground(LinearLayout topPanel,
+ LinearLayout contentPanel, View customPanel, boolean hasButtons,
+ TypedArray a, boolean hasTitle, View buttonPanel) {
+ int fullDark = a.getResourceId(R.styleable.AlertDialog_fullDark,
+ R.drawable.dialog_full_holo_dark);
+ int topDark = a.getResourceId(R.styleable.AlertDialog_topDark,
+ R.drawable.dialog_top_holo_dark);
+ int centerDark = a.getResourceId(R.styleable.AlertDialog_centerDark,
+ R.drawable.dialog_middle_holo_dark);
+ int bottomDark = a.getResourceId(R.styleable.AlertDialog_bottomDark,
+ R.drawable.dialog_bottom_holo_dark);
+ int fullBright = a.getResourceId(R.styleable.AlertDialog_fullBright,
+ R.drawable.dialog_full_holo_dark);
+ int topBright = a.getResourceId(R.styleable.AlertDialog_topBright,
+ R.drawable.dialog_top_holo_dark);
+ int centerBright = a.getResourceId(
+ R.styleable.AlertDialog_centerBright,
+ R.drawable.dialog_middle_holo_dark);
+ int bottomBright = a.getResourceId(
+ R.styleable.AlertDialog_bottomBright,
+ R.drawable.dialog_bottom_holo_dark);
+ int bottomMedium = a.getResourceId(
+ R.styleable.AlertDialog_bottomMedium,
+ R.drawable.dialog_bottom_holo_dark);
+ View[] views = new View[4];
+ boolean[] light = new boolean[4];
+ View lastView = null;
+ boolean lastLight = false;
+
+ int pos = 0;
+ if (hasTitle) {
+ views[pos] = topPanel;
+ light[pos] = false;
+ pos++;
+ }
+ views[pos] = contentPanel.getVisibility() == View.GONE ? null
+ : contentPanel;
+ light[pos] = mListView != null;
+ pos++;
+ if (customPanel != null) {
+ views[pos] = customPanel;
+ light[pos] = mForceInverseBackground;
+ pos++;
+ }
+ if (hasButtons) {
+ views[pos] = buttonPanel;
+ light[pos] = true;
+ }
+ boolean setView = false;
+ for (pos = 0; pos < views.length; pos++) {
+ View v = views[pos];
+ if (v == null) {
+ continue;
+ }
+ if (lastView != null) {
+ if (!setView) {
+ lastView.setBackgroundResource(lastLight ? topBright
+ : topDark);
+ } else {
+ lastView.setBackgroundResource(lastLight ? centerBright
+ : centerDark);
+ }
+ setView = true;
+ }
+ lastView = v;
+ lastLight = light[pos];
+ }
+ if (lastView != null) {
+ if (setView) {
+ lastView.setBackgroundResource(lastLight ? hasButtons ? bottomMedium
+ : bottomBright
+ : bottomDark);
+ } else {
+ lastView.setBackgroundResource(lastLight ? fullBright
+ : fullDark);
+ }
+ }
+ if (mListView != null && mAdapter != null) {
+ mListView.setAdapter(mAdapter);
+ if (mCheckedItem > -1) {
+ mListView.setItemChecked(mCheckedItem, true);
+ mListView.setSelection(mCheckedItem);
+ }
+ }
+ }
+
+ public void setButton(int whichButton, CharSequence text,
+ DialogInterface.OnClickListener listener, Message msg) {
+ if (msg == null && listener != null) {
+ msg = mHandler.obtainMessage(whichButton, listener);
+ }
+ switch (whichButton) {
+ case DialogInterface.BUTTON_POSITIVE:
+ mButtonPositiveText = text;
+ mButtonPositiveMessage = msg;
+ break;
+ case DialogInterface.BUTTON_NEGATIVE:
+ mButtonNegativeText = text;
+ mButtonNegativeMessage = msg;
+ break;
+ case DialogInterface.BUTTON_NEUTRAL:
+ mButtonNeutralText = text;
+ mButtonNeutralMessage = msg;
+ break;
+ default:
+ throw new IllegalArgumentException("Button does not exist");
+ }
+ }
+
+ public void setButtonBehavior(int buttonBehavior) {
+ mButtonBehavior = buttonBehavior;
+ }
+
+ public void setCustomTitle(View customTitleView) {
+ mCustomTitleView = customTitleView;
+ }
+
+ public void setIcon(Drawable icon) {
+ mIcon = icon;
+ if (mIconView != null && mIcon != null) {
+ mIconView.setImageDrawable(icon);
+ }
+ }
+
+ public void setIcon(int resId) {
+ mIconId = resId;
+ if (mIconView != null) {
+ if (resId > 0) {
+ mIconView.setImageResource(mIconId);
+ } else if (resId == 0) {
+ mIconView.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ public void setInverseBackgroundForced(boolean forceInverseBackground) {
+ mForceInverseBackground = forceInverseBackground;
+ }
+
+ public void setMessage(CharSequence message) {
+ mMessage = message;
+ if (mMessageView != null) {
+ mMessageView.setText(message);
+ }
+ }
+
+ public void setTitle(CharSequence title) {
+ mTitle = title;
+ if (mTitleView != null) {
+ mTitleView.setText(title);
+ }
+ }
+
+ private boolean setupButtons() {
+ int BIT_BUTTON_POSITIVE = 1;
+ int BIT_BUTTON_NEGATIVE = 2;
+ int BIT_BUTTON_NEUTRAL = 4;
+ int whichButtons = 0;
+ mButtonPositive = (Button) mWindow.findViewById(R.id.button1);
+ mButtonPositive.setOnClickListener(mButtonHandler);
+ if (TextUtils.isEmpty(mButtonPositiveText)) {
+ mButtonPositive.setVisibility(View.GONE);
+ } else {
+ mButtonPositive.setText(mButtonPositiveText);
+ mButtonPositive.setVisibility(View.VISIBLE);
+ whichButtons = whichButtons | BIT_BUTTON_POSITIVE;
+ }
+ mButtonNegative = (Button) mWindow.findViewById(R.id.button2);
+ mButtonNegative.setOnClickListener(mButtonHandler);
+ if (TextUtils.isEmpty(mButtonNegativeText)) {
+ mButtonNegative.setVisibility(View.GONE);
+ } else {
+ mButtonNegative.setText(mButtonNegativeText);
+ mButtonNegative.setVisibility(View.VISIBLE);
+
+ whichButtons = whichButtons | BIT_BUTTON_NEGATIVE;
+ }
+ mButtonNeutral = (Button) mWindow.findViewById(R.id.button3);
+ mButtonNeutral.setOnClickListener(mButtonHandler);
+ if (TextUtils.isEmpty(mButtonNeutralText)) {
+ mButtonNeutral.setVisibility(View.GONE);
+ } else {
+ mButtonNeutral.setText(mButtonNeutralText);
+ mButtonNeutral.setVisibility(View.VISIBLE);
+
+ whichButtons = whichButtons | BIT_BUTTON_NEUTRAL;
+ }
+ if (AlertController.shouldCenterSingleButton(mContext)) {
+ if (whichButtons == BIT_BUTTON_POSITIVE) {
+ centerButton(mButtonPositive);
+ } else if (whichButtons == BIT_BUTTON_NEGATIVE) {
+ centerButton(mButtonNeutral);
+ } else if (whichButtons == BIT_BUTTON_NEUTRAL) {
+ centerButton(mButtonNeutral);
+ }
+ }
+ return whichButtons != 0;
+ }
+
+ private void setupContent(LinearLayout contentPanel) {
+ mScrollView = (ScrollView) mWindow.findViewById(R.id.scrollView);
+ mScrollView.setFocusable(false);
+ mMessageView = (TextView) mWindow.findViewById(R.id.message);
+ if (mMessageView == null) {
+ return;
+ }
+ if (mMessage != null) {
+ mMessageView.setText(mMessage);
+ } else {
+ mMessageView.setVisibility(View.GONE);
+ mScrollView.removeView(mMessageView);
+ if (mListView != null) {
+ contentPanel.removeView(mWindow.findViewById(R.id.scrollView));
+ contentPanel.addView(mListView, new LinearLayout.LayoutParams(
+ android.view.ViewGroup.LayoutParams.MATCH_PARENT,
+ android.view.ViewGroup.LayoutParams.MATCH_PARENT));
+ contentPanel.setLayoutParams(new LinearLayout.LayoutParams(
+ android.view.ViewGroup.LayoutParams.MATCH_PARENT, 0,
+ 1.0f));
+ } else {
+ contentPanel.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ private boolean setupTitle(LinearLayout topPanel) {
+ boolean hasTitle = true;
+ if (mCustomTitleView != null) {
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+
+ topPanel.addView(mCustomTitleView, 0, lp);
+ View titleTemplate = mWindow.findViewById(R.id.title_template);
+ titleTemplate.setVisibility(View.GONE);
+ } else {
+ final boolean hasTextTitle = !TextUtils.isEmpty(mTitle);
+ mIconView = (ImageView) mWindow.findViewById(R.id.icon);
+ if (hasTextTitle) {
+ mTitleView = (TextView) mWindow.findViewById(R.id.alertTitle);
+ mTitleView.setText(mTitle);
+ if (mIconId > 0) {
+ mIconView.setImageResource(mIconId);
+ } else if (mIcon != null) {
+ mIconView.setImageDrawable(mIcon);
+ } else if (mIconId == 0) {
+ mTitleView.setPadding(mIconView.getPaddingLeft(),
+ mIconView.getPaddingTop(),
+ mIconView.getPaddingRight(),
+ mIconView.getPaddingBottom());
+ mIconView.setVisibility(View.GONE);
+ }
+ } else {
+ View titleTemplate = mWindow.findViewById(R.id.title_template);
+ titleTemplate.setVisibility(View.GONE);
+ mIconView.setVisibility(View.GONE);
+ topPanel.setVisibility(View.GONE);
+ hasTitle = false;
+ }
+ }
+ return hasTitle;
+ }
+
+ private void setupView() {
+ LinearLayout contentPanel = (LinearLayout) mWindow.findViewById(R.id.contentPanel);
+ setupContent(contentPanel);
+ boolean hasButtons = setupButtons();
+ LinearLayout topPanel = (LinearLayout) mWindow.findViewById(R.id.topPanel);
+ TypedArray a = mContext.obtainStyledAttributes(null,
+ R.styleable.AlertDialog, R.attr.alertDialogStyle, R.style.Holo_AlertDialog);
+ boolean hasTitle = setupTitle(topPanel);
+ View buttonPanel = mWindow.findViewById(R.id.buttonPanel);
+ if (!hasButtons) {
+ buttonPanel.setVisibility(View.GONE);
+ // mWindow.setCloseOnTouchOutsideIfNotSet(true);
+ }
+ FrameLayout customPanel = null;
+ if (mView != null) {
+ customPanel = (FrameLayout) mWindow.findViewById(R.id.customPanel);
+ FrameLayout custom = (FrameLayout) mWindow.findViewById(R.id.custom);
+ custom.addView(mView, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.MATCH_PARENT));
+ if (mViewSpacingSpecified) {
+ custom.setPadding(mViewSpacingLeft, mViewSpacingTop,
+ mViewSpacingRight, mViewSpacingBottom);
+ }
+ if (mListView != null) {
+ ((LinearLayout.LayoutParams) customPanel.getLayoutParams()).weight = 0;
+ }
+ } else {
+ mWindow.findViewById(R.id.customPanel).setVisibility(View.GONE);
+ }
+
+ if (hasTitle) {
+ View divider = null;
+ if (mMessage != null || mView != null || mListView != null) {
+ divider = mWindow.findViewById(R.id.titleDivider);
+ } else {
+ divider = mWindow.findViewById(R.id.titleDividerTop);
+ }
+
+ if (divider != null) {
+ divider.setVisibility(View.VISIBLE);
+ }
+ }
+ setBackground(topPanel, contentPanel, customPanel, hasButtons, a,
+ hasTitle, buttonPanel);
+ a.recycle();
+ }
+
+ public void setView(View view) {
+ mView = view;
+ mViewSpacingSpecified = false;
+ }
+
+ public void setView(View view, int viewSpacingLeft, int viewSpacingTop,
+ int viewSpacingRight, int viewSpacingBottom) {
+ mView = view;
+ mViewSpacingSpecified = true;
+ mViewSpacingLeft = viewSpacingLeft;
+ mViewSpacingTop = viewSpacingTop;
+ mViewSpacingRight = viewSpacingRight;
+ mViewSpacingBottom = viewSpacingBottom;
+ }
+}