package xmpp.client.ui.dialogs; import xmpp.client.R; import xmpp.client.service.user.UserState; import xmpp.client.ui.adapter.StatusAdapter; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnDismissListener; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.Spinner; public class StatusSelectorDialog implements OnClickListener, OnDismissListener, ResultProducer { private final Context mContext; private EditText mEditText; private Spinner mStatusSpinner; private final AlertDialog mAlertDialog; private UserState mResult; private ResultListener mResultListener; public StatusSelectorDialog(Context context, UserState input) { mContext = context; mResult = input; mAlertDialog = buildDialog(); } private AlertDialog buildDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder(mContext); final LayoutInflater layoutInflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); final View view = layoutInflater.inflate(R.layout.status_changer, null); mStatusSpinner = (Spinner) view.findViewById(R.id.status_spinner); mStatusSpinner.setAdapter(new StatusAdapter(mContext)); mEditText = (EditText) view.findViewById(R.id.status_edit); mStatusSpinner.setSelection(StatusAdapter.statusToPosition(mResult .getStatus())); if (mResult.getCustomStatusText() != null) { mEditText.setText(mResult.getCustomStatusText()); } else { mEditText.setText(""); } builder.setView(view); builder.setPositiveButton(mContext.getText(R.string.ok), this); builder.setNegativeButton(mContext.getText(R.string.cancel), this); builder.setTitle(R.string.select_status); final AlertDialog alertDialog = builder.create(); alertDialog.setOnDismissListener(this); return alertDialog; } public AlertDialog getAlertDialog() { return mAlertDialog; } @Override public UserState getResult() { return mResult; } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE: final int status = (Integer) mStatusSpinner.getSelectedItem(); String string = mEditText.getText().toString(); if (string.isEmpty()) { string = null; } mResult = new UserState(status, string); break; } } @Override public void onDismiss(DialogInterface dialog) { sendResult(); } private void sendResult() { if (mResultListener != null) { mResultListener.onResultAvailable(this); } } @Override public void setResultListener(ResultListener resultListener) { mResultListener = resultListener; } }