store own affiliation and role to disk
This commit is contained in:
		
							parent
							
								
									3014b7f857
								
							
						
					
					
						commit
						7b64a031cd
					
				|  | @ -1,12 +1,13 @@ | |||
| package eu.siacs.conversations.entities; | ||||
| 
 | ||||
| import android.annotation.SuppressLint; | ||||
| import android.support.annotation.NonNull; | ||||
| import android.support.annotation.Nullable; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.HashSet; | ||||
| import java.util.List; | ||||
| import java.util.Locale; | ||||
| import java.util.Set; | ||||
| 
 | ||||
| import eu.siacs.conversations.Config; | ||||
|  | @ -14,14 +15,12 @@ import eu.siacs.conversations.R; | |||
| import eu.siacs.conversations.services.MessageArchiveService; | ||||
| import eu.siacs.conversations.utils.JidHelper; | ||||
| import eu.siacs.conversations.utils.UIHelper; | ||||
| import eu.siacs.conversations.xml.Namespace; | ||||
| import eu.siacs.conversations.xmpp.chatstate.ChatState; | ||||
| import eu.siacs.conversations.xmpp.forms.Data; | ||||
| import eu.siacs.conversations.xmpp.forms.Field; | ||||
| import eu.siacs.conversations.xmpp.pep.Avatar; | ||||
| import rocks.xmpp.addr.Jid; | ||||
| 
 | ||||
| @SuppressLint("DefaultLocale") | ||||
| public class MucOptions { | ||||
| 
 | ||||
| 	private boolean mAutoPushConfiguration = true; | ||||
|  | @ -30,8 +29,11 @@ public class MucOptions { | |||
| 		return this.conversation.getAccount(); | ||||
| 	} | ||||
| 
 | ||||
| 	public void setSelf(User user) { | ||||
| 	public boolean setSelf(User user) { | ||||
| 		this.self = user; | ||||
| 		final boolean roleChanged = this.conversation.setAttribute("role",user.role.toString()); | ||||
| 		final boolean affiliationChanged = this.conversation.setAttribute("affiliation",user.affiliation.toString()); | ||||
| 		return roleChanged || affiliationChanged; | ||||
| 	} | ||||
| 
 | ||||
| 	public void changeAffiliation(Jid jid, Affiliation affiliation) { | ||||
|  | @ -72,19 +74,17 @@ public class MucOptions { | |||
| 	} | ||||
| 
 | ||||
| 	public enum Affiliation { | ||||
| 		OWNER("owner", 4, R.string.owner), | ||||
| 		ADMIN("admin", 3, R.string.admin), | ||||
| 		MEMBER("member", 2, R.string.member), | ||||
| 		OUTCAST("outcast", 0, R.string.outcast), | ||||
| 		NONE("none", 1, R.string.no_affiliation); | ||||
| 		OWNER(4, R.string.owner), | ||||
| 		ADMIN(3, R.string.admin), | ||||
| 		MEMBER(2, R.string.member), | ||||
| 		OUTCAST(0, R.string.outcast), | ||||
| 		NONE(1, R.string.no_affiliation); | ||||
| 
 | ||||
| 		Affiliation(String string, int rank, int resId) { | ||||
| 			this.string = string; | ||||
| 		Affiliation(int rank, int resId) { | ||||
| 			this.resId = resId; | ||||
| 			this.rank = rank; | ||||
| 		} | ||||
| 
 | ||||
| 		private String string; | ||||
| 		private int resId; | ||||
| 		private int rank; | ||||
| 
 | ||||
|  | @ -94,7 +94,7 @@ public class MucOptions { | |||
| 
 | ||||
| 		@Override | ||||
| 		public String toString() { | ||||
| 			return this.string; | ||||
| 			return name().toLowerCase(Locale.US); | ||||
| 		} | ||||
| 
 | ||||
| 		public boolean outranks(Affiliation affiliation) { | ||||
|  | @ -104,21 +104,30 @@ public class MucOptions { | |||
| 		public boolean ranks(Affiliation affiliation) { | ||||
| 			return rank >= affiliation.rank; | ||||
| 		} | ||||
| 
 | ||||
| 		public static Affiliation of(@Nullable String value) { | ||||
| 			if (value == null) { | ||||
| 				return NONE; | ||||
| 			} | ||||
| 			try { | ||||
| 				return Affiliation.valueOf(value.toUpperCase(Locale.US)); | ||||
| 			} catch (IllegalArgumentException e) { | ||||
| 				return NONE; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public enum Role { | ||||
| 		MODERATOR("moderator", R.string.moderator, 3), | ||||
| 		VISITOR("visitor", R.string.visitor, 1), | ||||
| 		PARTICIPANT("participant", R.string.participant, 2), | ||||
| 		NONE("none", R.string.no_role, 0); | ||||
| 		MODERATOR(R.string.moderator, 3), | ||||
| 		VISITOR(R.string.visitor, 1), | ||||
| 		PARTICIPANT(R.string.participant, 2), | ||||
| 		NONE(R.string.no_role, 0); | ||||
| 
 | ||||
| 		Role(String string, int resId, int rank) { | ||||
| 			this.string = string; | ||||
| 		Role(int resId, int rank) { | ||||
| 			this.resId = resId; | ||||
| 			this.rank = rank; | ||||
| 		} | ||||
| 
 | ||||
| 		private String string; | ||||
| 		private int resId; | ||||
| 		private int rank; | ||||
| 
 | ||||
|  | @ -128,12 +137,23 @@ public class MucOptions { | |||
| 
 | ||||
| 		@Override | ||||
| 		public String toString() { | ||||
| 			return this.string; | ||||
| 			return name().toLowerCase(Locale.US); | ||||
| 		} | ||||
| 
 | ||||
| 		public boolean ranks(Role role) { | ||||
| 			return rank >= role.rank; | ||||
| 		} | ||||
| 
 | ||||
| 		public static Role of(@Nullable String value) { | ||||
| 			if (value == null) { | ||||
| 				return NONE; | ||||
| 			} | ||||
| 			try { | ||||
| 				return Role.valueOf(value.toUpperCase(Locale.US)); | ||||
| 			} catch (IllegalArgumentException e) { | ||||
| 				return NONE; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	public enum Error { | ||||
|  | @ -198,25 +218,7 @@ public class MucOptions { | |||
| 		} | ||||
| 
 | ||||
| 		public void setRole(String role) { | ||||
| 			if (role == null) { | ||||
| 				this.role = Role.NONE; | ||||
| 				return; | ||||
| 			} | ||||
| 			role = role.toLowerCase(); | ||||
| 			switch (role) { | ||||
| 				case "moderator": | ||||
| 					this.role = Role.MODERATOR; | ||||
| 					break; | ||||
| 				case "participant": | ||||
| 					this.role = Role.PARTICIPANT; | ||||
| 					break; | ||||
| 				case "visitor": | ||||
| 					this.role = Role.VISITOR; | ||||
| 					break; | ||||
| 				default: | ||||
| 					this.role = Role.NONE; | ||||
| 					break; | ||||
| 			} | ||||
| 			this.role = Role.of(role); | ||||
| 		} | ||||
| 
 | ||||
| 		public Affiliation getAffiliation() { | ||||
|  | @ -224,27 +226,7 @@ public class MucOptions { | |||
| 		} | ||||
| 
 | ||||
| 		public void setAffiliation(String affiliation) { | ||||
| 			if (affiliation == null) { | ||||
| 				this.affiliation = Affiliation.NONE; | ||||
| 				return; | ||||
| 			} | ||||
| 			affiliation = affiliation.toLowerCase(); | ||||
| 			switch (affiliation) { | ||||
| 				case "admin": | ||||
| 					this.affiliation = Affiliation.ADMIN; | ||||
| 					break; | ||||
| 				case "owner": | ||||
| 					this.affiliation = Affiliation.OWNER; | ||||
| 					break; | ||||
| 				case "member": | ||||
| 					this.affiliation = Affiliation.MEMBER; | ||||
| 					break; | ||||
| 				case "outcast": | ||||
| 					this.affiliation = Affiliation.OUTCAST; | ||||
| 					break; | ||||
| 				default: | ||||
| 					this.affiliation = Affiliation.NONE; | ||||
| 			} | ||||
| 			this.affiliation = Affiliation.of(affiliation); | ||||
| 		} | ||||
| 
 | ||||
| 		public void setPgpKeyId(long id) { | ||||
|  | @ -382,6 +364,8 @@ public class MucOptions { | |||
| 		this.account = conversation.getAccount(); | ||||
| 		this.conversation = conversation; | ||||
| 		this.self = new User(this, createJoinJid(getProposedNick())); | ||||
| 		this.self.affiliation = Affiliation.of(conversation.getAttribute("affiliation")); | ||||
| 		this.self.role = Role.of(conversation.getAttribute("role")); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean updateConfiguration(ServiceDiscoveryResult serviceDiscoveryResult) { | ||||
|  | @ -452,9 +436,7 @@ public class MucOptions { | |||
| 	} | ||||
| 
 | ||||
| 	public boolean participating() { | ||||
| 		return !online() | ||||
| 				|| self.getRole().ranks(Role.PARTICIPANT) | ||||
| 				|| hasFeature("muc_unmoderated"); | ||||
| 		return self.getRole().ranks(Role.PARTICIPANT) || !moderated(); | ||||
| 	} | ||||
| 
 | ||||
| 	public boolean membersOnly() { | ||||
|  |  | |||
|  | @ -325,7 +325,7 @@ public class IqGenerator extends AbstractGenerator { | |||
| 		Element query = packet.query("http://jabber.org/protocol/muc#admin"); | ||||
| 		for (Jid jid : jids) { | ||||
| 			Element item = query.addChild("item"); | ||||
| 			item.setAttribute("jid", jid.toString()); | ||||
| 			item.setAttribute("jid", jid.toEscapedString()); | ||||
| 			item.setAttribute("affiliation", affiliation); | ||||
| 		} | ||||
| 		return packet; | ||||
|  |  | |||
|  | @ -74,7 +74,10 @@ public class PresenceParser extends AbstractParser implements | |||
| 							if (mucOptions.setOnline()) { | ||||
| 								mXmppConnectionService.getAvatarService().clear(mucOptions); | ||||
| 							} | ||||
| 							mucOptions.setSelf(user); | ||||
| 							if (mucOptions.setSelf(user)) { | ||||
| 								Log.d(Config.LOGTAG,"role or affiliation changed"); | ||||
| 								mXmppConnectionService.databaseBackend.updateConversation(conversation); | ||||
| 							} | ||||
| 
 | ||||
| 							mXmppConnectionService.persistSelfNick(user); | ||||
| 							invokeRenameListener(mucOptions, true); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Daniel Gultsch
						Daniel Gultsch