use nick from bookmark if available

iNPUTmice created

Change summary

src/eu/siacs/conversations/entities/MucOptions.java            | 35 +
src/eu/siacs/conversations/parser/MessageParser.java           |  2 
src/eu/siacs/conversations/services/XmppConnectionService.java | 38 +-
src/eu/siacs/conversations/ui/MucDetailsActivity.java          |  4 
src/eu/siacs/conversations/ui/StartConversation.java           | 58 ++-
src/eu/siacs/conversations/utils/UIHelper.java                 |  6 
6 files changed, 78 insertions(+), 65 deletions(-)

Detailed changes

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();
+	}
 }

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;

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);

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);

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;

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()) {