package org.yaxim.androidclient.dialogs; import org.yaxim.androidclient.data.ChatHelper; import org.yaxim.androidclient.data.ChatRoomHelper; import org.yaxim.androidclient.exceptions.YaximXMPPAdressMalformedException; import org.yaxim.androidclient.util.XMPPHelper; import org.yaxim.androidclient.widget.AutoCompleteJidEdit; import org.yaxim.androidclient.YaximApplication; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.yaxim.androidclient.R; public class EditMUCDialog extends AlertDialog implements DialogInterface.OnClickListener, TextWatcher { private Activity mContext; private Button okButton; private TextView mInvitation; private AutoCompleteJidEdit mRoomJID; private EditText mNickName; private EditText mPassword; private boolean openChat = true; public EditMUCDialog(Activity context) { super(context); mContext = context; setTitle(R.string.Menu_muc); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View group = inflater.inflate(R.layout.muc_new_dialog, null, false); setView(group); mInvitation = (TextView)group.findViewById(R.id.muc_invitation); mRoomJID = (AutoCompleteJidEdit)group.findViewById(R.id.muc_new_jid); String mucDomain = YaximApplication.getConfig(mContext).mucDomain; mRoomJID.setServerList(mucDomain, ChatHelper.getXMPPDomains(context, ChatHelper.ROSTER_FILTER_MUCS), R.array.muc_services); mNickName = (EditText)group.findViewById(R.id.muc_new_nick); mPassword = (EditText)group.findViewById(R.id.muc_new_pw); setButton(BUTTON_POSITIVE, context.getString(android.R.string.ok), this); setButton(BUTTON_NEGATIVE, context.getString(android.R.string.cancel), (DialogInterface.OnClickListener)null); } // this constructor is called for actual editing of an existing MUC public EditMUCDialog(Activity context, String roomJID) { this(context); setTitle(R.string.roster_contextmenu_muc_edit); ChatRoomHelper.RoomInfo ri = ChatRoomHelper.getRoomInfo(mContext, roomJID); mRoomJID.setText(roomJID); mRoomJID.setInputType(android.text.InputType.TYPE_NULL); mNickName.setText(ri.nickname); mPassword.setText(ri.password); mNickName.requestFocus(); } // this is called when following an invitation public EditMUCDialog(Activity context, String roomJID, String invitation, String nickname, String password) { this(context); setTitle(R.string.title_activity_muc_invite); if (invitation != null) { mInvitation.setText(invitation); mInvitation.setVisibility(View.VISIBLE); } mRoomJID.setText(roomJID); mRoomJID.setInputType(android.text.InputType.TYPE_NULL); mNickName.setText(nickname); mPassword.setText(password); mNickName.requestFocus(); } // chained function call to set the nickname public EditMUCDialog withNick(String fallback) { mNickName.setText(ChatRoomHelper.guessMyNickname(mContext, fallback)); return this; } // chained function to prevent opening public EditMUCDialog dontOpen() { openChat = false; return this; } public void onCreate(Bundle icicle) { super.onCreate(icicle); okButton = getButton(BUTTON_POSITIVE); afterTextChanged(mRoomJID.getText()); mRoomJID.addTextChangedListener(this); mNickName.addTextChangedListener(this); } public void addAndOpen(String jid, String password, String nickname) { ChatRoomHelper.addRoom(mContext, jid, password, nickname); if (openChat) ChatHelper.startChatActivity(mContext, jid, jid, null); ChatRoomHelper.syncDbRooms(mContext); } public void onClick(DialogInterface dialog, int which) { addAndOpen(mRoomJID.getText().toString(), mPassword.getText().toString(), mNickName.getText().toString()); } public void afterTextChanged(Editable s) { try { XMPPHelper.verifyJabberID(mRoomJID.getText()); okButton.setEnabled(mNickName.getText().length() > 0); mRoomJID.setError(null); } catch (YaximXMPPAdressMalformedException e) { okButton.setEnabled(false); if (s.length() > 0) mRoomJID.setError(mContext.getString(R.string.Global_JID_malformed)); } } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void onTextChanged(CharSequence s, int start, int before, int count) {} }