use nick from bookmark if available
This commit is contained in:
		
							parent
							
								
									2ebd92b7a7
								
							
						
					
					
						commit
						2a82f23f36
					
				| 
						 | 
				
			
			@ -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();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			@ -221,8 +221,11 @@ public class StartConversation extends XmppActivity {
 | 
			
		|||
 | 
			
		||||
	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());
 | 
			
		||||
| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			@ -441,7 +448,7 @@ public class StartConversation extends XmppActivity {
 | 
			
		|||
		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);
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue