diff options
6 files changed, 78 insertions, 65 deletions
diff --git a/src/eu/siacs/conversations/entities/MucOptions.java b/src/eu/siacs/conversations/entities/MucOptions.java index 0f8e35658..d8c8b2a33 100644 --- a/src/eu/siacs/conversations/entities/MucOptions.java +++ b/src/eu/siacs/conversations/entities/MucOptions.java @@ -7,6 +7,7 @@ import eu.siacs.conversations.crypto.PgpEngine; import eu.siacs.conversations.xml.Element; import eu.siacs.conversations.xmpp.stanzas.PresencePacket; import android.annotation.SuppressLint; +import android.util.Log; @SuppressLint("DefaultLocale") public class MucOptions { @@ -87,6 +88,7 @@ public class MucOptions { private boolean aboutToRename = false; private User self = new User(); private String subject = null; + private String nick; public MucOptions(Account account) { this.account = account; @@ -123,7 +125,7 @@ public class MucOptions { user.setAffiliation(item.getAttribute("affiliation")); user.setRole(item.getAttribute("role")); user.setName(name); - if (name.equals(getNick())) { + if (name.equals(getJoinNick())) { this.isOnline = true; this.error = 0; self = user; @@ -145,7 +147,7 @@ public class MucOptions { } } } else if (type.equals("unavailable")) { - if (name.equals(getNick())) { + if (name.equals(getJoinNick())) { Element item = packet.findChild("x","http://jabber.org/protocol/muc#user").findChild("item"); String nick = item.getAttribute("nick"); if (nick!=null) { @@ -153,7 +155,7 @@ public class MucOptions { if (renameListener!=null) { renameListener.onRename(true); } - this.setNick(nick); + this.setJoinNick(nick); } } deleteUser(packet.getAttribute("from").split("/")[1]); @@ -177,22 +179,25 @@ public class MucOptions { return this.users; } - public String getNick() { - String[] split = conversation.getContactJid().split("/"); - if (split.length == 2) { - return split[1]; + public String getProposedNick() { + String[] mucParts = conversation.getContactJid().split("/"); + if (conversation.getBookmark() != null && conversation.getBookmark().getNick() != null) { + return conversation.getBookmark().getNick(); } else { - if (conversation.getAccount()!=null) { - return conversation.getAccount().getUsername(); + if (mucParts.length == 2) { + return mucParts[1]; } else { - return null; + return account.getUsername(); } } } - public void setNick(String nick) { - String jid = conversation.getContactJid().split("/")[0]+"/"+nick; - conversation.setContactJid(jid); + public String getJoinNick() { + return this.nick; + } + + public void setJoinNick(String nick) { + this.nick = nick; } public void setConversation(Conversation conversation) { @@ -268,4 +273,8 @@ public class MucOptions { } return true; } + + public String getJoinJid() { + return this.conversation.getContactJid().split("/")[0]+"/"+this.getJoinNick(); + } }
\ No newline at end of file diff --git a/src/eu/siacs/conversations/parser/MessageParser.java b/src/eu/siacs/conversations/parser/MessageParser.java index 1673fbf09..dcc577627 100644 --- a/src/eu/siacs/conversations/parser/MessageParser.java +++ b/src/eu/siacs/conversations/parser/MessageParser.java @@ -121,7 +121,7 @@ public class MessageParser extends AbstractParser implements return null; } String counterPart = fromParts[1]; - if (counterPart.equals(conversation.getMucOptions().getNick())) { + if (counterPart.equals(conversation.getMucOptions().getJoinNick())) { if (mXmppConnectionService.markMessage(conversation, packet.getId(), Message.STATUS_SEND)) { return null; diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index c43a34b78..3b1cec628 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/eu/siacs/conversations/services/XmppConnectionService.java @@ -691,6 +691,7 @@ public class XmppConnectionService extends Service { if (bookmark.autojoin()) { conversation = findOrCreateConversation(account, bookmark.getJid(), true); conversation.setBookmark(bookmark); + joinMuc(conversation); } } } @@ -840,10 +841,6 @@ public class XmppConnectionService extends Service { this.databaseBackend.createConversation(conversation); } this.conversations.add(conversation); - if ((account.getStatus() == Account.STATUS_ONLINE) - && (conversation.getMode() == Conversation.MODE_MULTI)) { - joinMuc(conversation); - } updateConversationUi(); return conversation; } @@ -933,19 +930,12 @@ public class XmppConnectionService extends Service { } public void joinMuc(Conversation conversation) { + Log.d(LOGTAG,"joining conversation "+conversation.getContactJid()); Account account = conversation.getAccount(); - String[] mucParts = conversation.getContactJid().split("/"); - String muc; - String nick; - if (mucParts.length == 2) { - muc = mucParts[0]; - nick = mucParts[1]; - } else { - muc = mucParts[0]; - nick = account.getUsername(); - } + String nick = conversation.getMucOptions().getProposedNick(); + conversation.getMucOptions().setJoinNick(nick); PresencePacket packet = new PresencePacket(); - packet.setAttribute("to", muc + "/" + nick); + packet.setAttribute("to",conversation.getMucOptions().getJoinJid()); Element x = new Element("x"); x.setAttribute("xmlns", "http://jabber.org/protocol/muc"); String sig = account.getPgpSignature(); @@ -963,6 +953,7 @@ public class XmppConnectionService extends Service { mDateFormat.format(date)); } packet.addChild(x); + Log.d(LOGTAG,packet.toString()); sendPresencePacket(account, packet); } @@ -984,10 +975,13 @@ public class XmppConnectionService extends Service { renameListener.onRename(success); } if (success) { - String jid = conversation.getContactJid().split("/")[0] - + "/" + nick; - conversation.setContactJid(jid); + conversation.setContactJid(conversation.getMucOptions().getJoinNick()); databaseBackend.updateConversation(conversation); + Bookmark bookmark = conversation.getBookmark(); + if (bookmark!=null) { + bookmark.setNick(nick); + pushBookmarks(bookmark.getAccount()); + } } } }); @@ -1009,6 +1003,11 @@ public class XmppConnectionService extends Service { conversation.setContactJid(jid); databaseBackend.updateConversation(conversation); if (conversation.getAccount().getStatus() == Account.STATUS_ONLINE) { + Bookmark bookmark = conversation.getBookmark(); + if (bookmark!=null) { + bookmark.setNick(nick); + pushBookmarks(bookmark.getAccount()); + } joinMuc(conversation); } } @@ -1016,8 +1015,7 @@ public class XmppConnectionService extends Service { public void leaveMuc(Conversation conversation) { PresencePacket packet = new PresencePacket(); - packet.setAttribute("to", conversation.getContactJid().split("/")[0] - + "/" + conversation.getMucOptions().getNick()); + packet.setAttribute("to", conversation.getMucOptions().getJoinJid()); packet.setAttribute("from", conversation.getAccount().getFullJid()); packet.setAttribute("type", "unavailable"); sendPresencePacket(conversation.getAccount(),packet); diff --git a/src/eu/siacs/conversations/ui/MucDetailsActivity.java b/src/eu/siacs/conversations/ui/MucDetailsActivity.java index 8226e381b..9ff83f82b 100644 --- a/src/eu/siacs/conversations/ui/MucDetailsActivity.java +++ b/src/eu/siacs/conversations/ui/MucDetailsActivity.java @@ -48,7 +48,7 @@ public class MucDetailsActivity extends XmppActivity { public void onClick(View arg0) { MucOptions options = conversation.getMucOptions(); String nick = mYourNick.getText().toString(); - if (!options.getNick().equals(nick)) { + if (!options.getJoinNick().equals(nick)) { xmppConnectionService.renameInMuc(conversation, nick); finish(); } @@ -149,7 +149,7 @@ public class MucDetailsActivity extends XmppActivity { mSubject.setText(conversation.getMucOptions().getSubject()); setTitle(conversation.getName(useSubject)); mFullJid.setText(conversation.getContactJid().split("/")[0]); - mYourNick.setText(conversation.getMucOptions().getNick()); + mYourNick.setText(conversation.getMucOptions().getJoinNick()); mRoleAffiliaton = (TextView) findViewById(R.id.muc_role); if (conversation.getMucOptions().online()) { mMoreDetails.setVisibility(View.VISIBLE); diff --git a/src/eu/siacs/conversations/ui/StartConversation.java b/src/eu/siacs/conversations/ui/StartConversation.java index c9166c39f..fb97a788b 100644 --- a/src/eu/siacs/conversations/ui/StartConversation.java +++ b/src/eu/siacs/conversations/ui/StartConversation.java @@ -43,7 +43,6 @@ import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.Conversation; import eu.siacs.conversations.entities.ListItem; import eu.siacs.conversations.utils.KnownHostsAdapter; -import eu.siacs.conversations.utils.UIHelper; import eu.siacs.conversations.utils.Validator; public class StartConversation extends XmppActivity { @@ -65,7 +64,7 @@ public class StartConversation extends XmppActivity { private List<String> mKnownConferenceHosts; private EditText mSearchEditText; - + public int conference_context_id; public int contact_context_id; @@ -178,14 +177,15 @@ public class StartConversation extends XmppActivity { mConferenceAdapter = new ListItemAdapter(conferences); mConferenceListFragment.setListAdapter(mConferenceAdapter); mConferenceListFragment.setContextMenu(R.menu.conference_context); - mConferenceListFragment.setOnListItemClickListener(new OnItemClickListener() { + mConferenceListFragment + .setOnListItemClickListener(new OnItemClickListener() { - @Override - public void onItemClick(AdapterView<?> arg0, View arg1, - int position, long arg3) { - openConversationForBookmark(position); - } - }); + @Override + public void onItemClick(AdapterView<?> arg0, View arg1, + int position, long arg3) { + openConversationForBookmark(position); + } + }); mContactsAdapter = new ListItemAdapter(contacts); mContactsListFragment.setListAdapter(mContactsAdapter); @@ -209,20 +209,23 @@ public class StartConversation extends XmppActivity { contact.getJid(), false); switchToConversation(conversation); } - + protected void openConversationForContact() { int position = contact_context_id; openConversationForContact(position); } - + protected void openConversationForBookmark() { openConversationForBookmark(conference_context_id); } - + protected void openConversationForBookmark(int position) { Bookmark bookmark = (Bookmark) conferences.get(position); - Conversation conversation = xmppConnectionService.findOrCreateConversation(bookmark.getAccount(), bookmark.getJid(), true); + Conversation conversation = xmppConnectionService + .findOrCreateConversation(bookmark.getAccount(), + bookmark.getJid(), true); conversation.setBookmark(bookmark); + xmppConnectionService.joinMuc(conversation); if (!bookmark.autojoin()) { bookmark.setAutojoin(true); xmppConnectionService.pushBookmarks(bookmark.getAccount()); @@ -242,7 +245,7 @@ public class StartConversation extends XmppActivity { xmppConnectionService.deleteContactOnServer(contact); filter(mSearchEditText.getText().toString()); } - + protected void deleteConference() { int position = contact_context_id; Bookmark bookmark = (Bookmark) conferences.get(position); @@ -307,7 +310,8 @@ public class StartConversation extends XmppActivity { jid.setAdapter(new KnownHostsAdapter(this, android.R.layout.simple_list_item_1, mKnownConferenceHosts)); populateAccountSpinner(spinner); - final CheckBox bookmarkCheckBox = (CheckBox) dialogView.findViewById(R.id.bookmark); + final CheckBox bookmarkCheckBox = (CheckBox) dialogView + .findViewById(R.id.bookmark); builder.setView(dialogView); builder.setNegativeButton(R.string.cancel, null); builder.setPositiveButton(R.string.join, null); @@ -328,20 +332,23 @@ public class StartConversation extends XmppActivity { if (account.hasBookmarkFor(conferenceJid)) { jid.setError(getString(R.string.bookmark_already_exists)); } else { - Bookmark bookmark = new Bookmark(account, conferenceJid); + Bookmark bookmark = new Bookmark(account, + conferenceJid); bookmark.setAutojoin(true); account.getBookmarks().add(bookmark); - xmppConnectionService.pushBookmarks(account); + xmppConnectionService + .pushBookmarks(account); Conversation conversation = xmppConnectionService .findOrCreateConversation(account, conferenceJid, true); conversation.setBookmark(bookmark); - switchToConversation(conversation); + xmppConnectionService.joinMuc(conversation); + switchToConversation(conversation); } } else { Conversation conversation = xmppConnectionService - .findOrCreateConversation(account, - conferenceJid, true); + .findOrCreateConversation(account, + conferenceJid, true); switchToConversation(conversation); } } else { @@ -416,7 +423,7 @@ public class StartConversation extends XmppActivity { this.mKnownConferenceHosts = xmppConnectionService .getKnownConferenceHosts(); } - + protected void filter(String needle) { this.filterContacts(needle); this.filterConferences(needle); @@ -436,12 +443,12 @@ public class StartConversation extends XmppActivity { Collections.sort(this.contacts); mContactsAdapter.notifyDataSetChanged(); } - + protected void filterConferences(String needle) { this.conferences.clear(); for (Account account : xmppConnectionService.getAccounts()) { if (account.getStatus() != Account.STATUS_DISABLED) { - for(Bookmark bookmark : account.getBookmarks()) { + for (Bookmark bookmark : account.getBookmarks()) { if (bookmark.match(needle)) { this.conferences.add(bookmark); } @@ -486,7 +493,7 @@ public class StartConversation extends XmppActivity { public static class MyListFragment extends ListFragment { private AdapterView.OnItemClickListener mOnItemClickListener; private int mResContextMenu; - + public void setContextMenu(int res) { this.mResContextMenu = res; } @@ -513,8 +520,7 @@ public class StartConversation extends XmppActivity { ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); StartConversation activity = (StartConversation) getActivity(); - activity.getMenuInflater().inflate(mResContextMenu, - menu); + activity.getMenuInflater().inflate(mResContextMenu, menu); AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; if (mResContextMenu == R.menu.conference_context) { activity.conference_context_id = acmi.position; diff --git a/src/eu/siacs/conversations/utils/UIHelper.java b/src/eu/siacs/conversations/utils/UIHelper.java index ede43830c..5c7ae56f6 100644 --- a/src/eu/siacs/conversations/utils/UIHelper.java +++ b/src/eu/siacs/conversations/utils/UIHelper.java @@ -216,7 +216,7 @@ public class UIHelper { bgColor, fgColor); } String[] names = new String[members.size() + 1]; - names[0] = conversation.getMucOptions().getNick(); + names[0] = conversation.getMucOptions().getJoinNick(); for (int i = 0; i < members.size(); ++i) { names[i + 1] = members.get(i).getName(); } @@ -343,7 +343,7 @@ public class UIHelper { if ((currentCon != null) && (currentCon.getMode() == Conversation.MODE_MULTI) && (!alwaysNotify)) { - String nick = currentCon.getMucOptions().getNick(); + String nick = currentCon.getMucOptions().getJoinNick(); Pattern highlight = generateNickHighlightPattern(nick); Matcher m = highlight.matcher(currentCon.getLatestMessage() .getBody()); @@ -463,7 +463,7 @@ public class UIHelper { private static boolean wasHighlighted(Conversation conversation) { List<Message> messages = conversation.getMessages(); - String nick = conversation.getMucOptions().getNick(); + String nick = conversation.getMucOptions().getJoinNick(); Pattern highlight = generateNickHighlightPattern(nick); for (int i = messages.size() - 1; i >= 0; --i) { if (messages.get(i).isRead()) { |