refactored muc bookmark to extend element. keep all elements the server or other clients added before

iNPUTmice created

Change summary

src/eu/siacs/conversations/entities/Bookmark.java              | 115 +--
src/eu/siacs/conversations/entities/MucOptions.java            |  11 
src/eu/siacs/conversations/parser/IqParser.java                |   2 
src/eu/siacs/conversations/services/XmppConnectionService.java |   9 
src/eu/siacs/conversations/ui/ConversationActivity.java        |  21 
src/eu/siacs/conversations/ui/StartConversationActivity.java   |   2 
src/eu/siacs/conversations/ui/XmppActivity.java                |   5 
src/eu/siacs/conversations/ui/adapter/ConversationAdapter.java |   3 
src/eu/siacs/conversations/utils/DNSHelper.java                |   3 
9 files changed, 78 insertions(+), 93 deletions(-)

Detailed changes

src/eu/siacs/conversations/entities/Bookmark.java 🔗

@@ -7,46 +7,35 @@ import android.graphics.Bitmap;
 import eu.siacs.conversations.utils.UIHelper;
 import eu.siacs.conversations.xml.Element;
 
-public class Bookmark implements ListItem {
+public class Bookmark extends Element implements ListItem {
 
 	private Account account;
-	private String jid;
-	private String nick;
-	private String name;
-	private String password;
-	private boolean autojoin;
-	private boolean providePassword;
 	private Conversation mJoinedConversation;
 
 	public Bookmark(Account account, String jid) {
+		super("conference");
+		this.setAttribute("jid", jid);
+		this.account = account;
+	}
+
+	private Bookmark(Account account) {
+		super("conference");
 		this.account = account;
-		this.jid = jid;
 	}
 
 	public static Bookmark parse(Element element, Account account) {
-		Bookmark bookmark = new Bookmark(account, element.getAttribute("jid"));
-		bookmark.setName(element.getAttribute("name"));
-		String autojoin = element.getAttribute("autojoin");
-		if (autojoin != null
-				&& (autojoin.equals("true") || autojoin.equals("1"))) {
-			bookmark.setAutojoin(true);
-		} else {
-			bookmark.setAutojoin(false);
-		}
-		Element nick = element.findChild("nick");
-		if (nick != null) {
-			bookmark.setNick(nick.getContent());
-		}
-		Element password = element.findChild("password");
-		if (password != null) {
-			bookmark.setPassword(password.getContent());
-			bookmark.setProvidePassword(true);
-		}
+		Bookmark bookmark = new Bookmark(account);
+		bookmark.setAttributes(element.getAttributes());
+		bookmark.setChildren(element.getChildren());
 		return bookmark;
 	}
 
 	public void setAutojoin(boolean autojoin) {
-		this.autojoin = autojoin;
+		if (autojoin) {
+			this.setAttribute("autojoin", "true");
+		} else {
+			this.setAttribute("autojoin", "false");
+		}
 	}
 
 	public void setName(String name) {
@@ -54,15 +43,18 @@ public class Bookmark implements ListItem {
 	}
 
 	public void setNick(String nick) {
-		this.nick = nick;
+		Element element = this.findChild("nick");
+		if (element == null) {
+			element = this.addChild("nick");
+		}
+		element.setContent(nick);
 	}
 
 	public void setPassword(String password) {
-		this.password = password;
-	}
-
-	private void setProvidePassword(boolean providePassword) {
-		this.providePassword = providePassword;
+		Element element = this.findChild("password");
+		if (element != null) {
+			element.setContent(password);
+		}
 	}
 
 	@Override
@@ -76,32 +68,45 @@ public class Bookmark implements ListItem {
 		if (this.mJoinedConversation != null
 				&& (this.mJoinedConversation.getMucOptions().getSubject() != null)) {
 			return this.mJoinedConversation.getMucOptions().getSubject();
-		} else if (name != null) {
-			return name;
+		} else if (getName() != null) {
+			return getName();
 		} else {
-			return this.jid.split("@")[0];
+			return this.getJid().split("@")[0];
 		}
 	}
 
 	@Override
 	public String getJid() {
-		return this.jid.toLowerCase(Locale.US);
+		String jid = this.getAttribute("jid");
+		if (jid != null) {
+			return jid.toLowerCase(Locale.US);
+		} else {
+			return null;
+		}
 	}
 
 	public String getNick() {
-		return this.nick;
+		Element nick = this.findChild("nick");
+		if (nick != null) {
+			return nick.getContent();
+		} else {
+			return null;
+		}
 	}
 
 	public boolean autojoin() {
-		return autojoin;
+		String autojoin = this.getAttribute("autojoin");
+		return (autojoin != null && (autojoin.equalsIgnoreCase("true") || autojoin
+				.equalsIgnoreCase("1")));
 	}
 
 	public String getPassword() {
-		return this.password;
-	}
-
-	public boolean isProvidePassword() {
-		return this.providePassword;
+		Element password = this.findChild("password");
+		if (password != null) {
+			return password.getContent();
+		} else {
+			return null;
+		}
 	}
 
 	public boolean match(String needle) {
@@ -131,27 +136,7 @@ public class Bookmark implements ListItem {
 	}
 
 	public String getName() {
-		return name;
-	}
-
-	public Element toElement() {
-		Element element = new Element("conference");
-		element.setAttribute("jid", this.getJid());
-		if (this.getName() != null) {
-			element.setAttribute("name", this.getName());
-		}
-		if (this.autojoin) {
-			element.setAttribute("autojoin", "true");
-		} else {
-			element.setAttribute("autojoin", "false");
-		}
-		if (this.nick != null) {
-			element.addChild("nick").setContent(this.nick);
-		}
-		if (this.password != null && isProvidePassword()) {
-			element.addChild("password").setContent(this.password);
-		}
-		return element;
+		return this.getAttribute("name");
 	}
 
 	public void unregisterConversation() {

src/eu/siacs/conversations/entities/MucOptions.java 🔗

@@ -165,8 +165,7 @@ public class MucOptions {
 						}
 						aboutToRename = false;
 					}
-					if (conversation.getBookmark() != null
-							&& conversation.getBookmark().isProvidePassword()) {
+					if (conversation.getBookmark() != null) {
 						this.passwordChanged = false;
 					}
 				} else {
@@ -213,8 +212,7 @@ public class MucOptions {
 						this.error = ERROR_NICK_IN_USE;
 					}
 				} else if (error.hasChild("not-authorized")) {
-					if (conversation.getBookmark() != null
-							&& conversation.getBookmark().isProvidePassword()) {
+					if (conversation.getBookmark() != null) {
 						this.passwordChanged = true;
 					}
 					this.error = ERROR_PASSWORD_REQUIRED;
@@ -357,8 +355,7 @@ public class MucOptions {
 	}
 
 	public void setPassword(String password) {
-		if (conversation.getBookmark() != null
-				&& conversation.getBookmark().isProvidePassword()) {
+		if (conversation.getBookmark() != null) {
 			conversation.getBookmark().setPassword(password);
 		} else {
 			this.password = password;
@@ -367,7 +364,7 @@ public class MucOptions {
 				.setAttribute(Conversation.ATTRIBUTE_MUC_PASSWORD, password);
 	}
 
-	public boolean isPasswordChanged() {
+	public boolean isPasswordChanged2() {
 		return this.passwordChanged;
 	}
 

src/eu/siacs/conversations/parser/IqParser.java 🔗

@@ -73,7 +73,7 @@ public class IqParser extends AbstractParser implements OnIqPacketReceived {
 			IqPacket response = mXmppConnectionService.getIqGenerator()
 					.discoResponse(packet);
 			account.getXmppConnection().sendIqPacket(response, null);
-		} else if (packet.hasChild("ping","urn:xmpp:ping")) {
+		} else if (packet.hasChild("ping", "urn:xmpp:ping")) {
 			IqPacket response = packet.generateRespone(IqPacket.TYPE_RESULT);
 			mXmppConnectionService.sendIqPacket(account, response, null);
 		} else {

src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -748,7 +748,7 @@ public class XmppConnectionService extends Service {
 		Element query = iqPacket.query("jabber:iq:private");
 		Element storage = query.addChild("storage", "storage:bookmarks");
 		for (Bookmark bookmark : account.getBookmarks()) {
-			storage.addChild(bookmark.toElement());
+			storage.addChild(bookmark);
 		}
 		sendIqPacket(account, iqPacket, null);
 	}
@@ -1120,11 +1120,8 @@ public class XmppConnectionService extends Service {
 	public void providePasswordForMuc(Conversation conversation, String password) {
 		if (conversation.getMode() == Conversation.MODE_MULTI) {
 			conversation.getMucOptions().setPassword(password);
-			if (conversation.getBookmark() != null
-					&& conversation.getMucOptions().isPasswordChanged()) {
-				if (!conversation.getBookmark().autojoin()) {
-					conversation.getBookmark().setAutojoin(true);
-				}
+			if (conversation.getBookmark() != null) {
+				conversation.getBookmark().setAutojoin(true);
 				pushBookmarks(conversation.getAccount());
 			}
 			databaseBackend.updateConversation(conversation);

src/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -88,7 +88,7 @@ public class ConversationActivity extends XmppActivity implements
 	}
 
 	public void setSelectedConversation(Conversation conversation) {
-		this.selectedConversation = conversation;	
+		this.selectedConversation = conversation;
 	}
 
 	public ListView getConversationListView() {
@@ -98,21 +98,21 @@ public class ConversationActivity extends XmppActivity implements
 	public boolean shouldPaneBeOpen() {
 		return paneShouldBeOpen;
 	}
-	
+
 	public void showConversationsOverview() {
 		if (mContentView instanceof SlidingPaneLayout) {
 			SlidingPaneLayout mSlidingPaneLayout = (SlidingPaneLayout) mContentView;
 			mSlidingPaneLayout.openPane();
 		}
 	}
-	
+
 	public void hideConversationsOverview() {
 		if (mContentView instanceof SlidingPaneLayout) {
 			SlidingPaneLayout mSlidingPaneLayout = (SlidingPaneLayout) mContentView;
 			mSlidingPaneLayout.closePane();
 		}
 	}
-	
+
 	public boolean isConversationsOverviewHideable() {
 		if (mContentView instanceof SlidingPaneLayout) {
 			SlidingPaneLayout mSlidingPaneLayout = (SlidingPaneLayout) mContentView;
@@ -121,7 +121,7 @@ public class ConversationActivity extends XmppActivity implements
 			return false;
 		}
 	}
-	
+
 	public boolean isConversationsOverviewVisable() {
 		if (mContentView instanceof SlidingPaneLayout) {
 			SlidingPaneLayout mSlidingPaneLayout = (SlidingPaneLayout) mContentView;
@@ -166,13 +166,14 @@ public class ConversationActivity extends XmppActivity implements
 			}
 		});
 		mContentView = findViewById(R.id.content_view_spl);
-		if (mContentView==null) {
+		if (mContentView == null) {
 			mContentView = findViewById(R.id.content_view_ll);
 		}
 		if (mContentView instanceof SlidingPaneLayout) {
 			SlidingPaneLayout mSlidingPaneLayout = (SlidingPaneLayout) mContentView;
 			mSlidingPaneLayout.setParallaxDistance(150);
-			mSlidingPaneLayout.setShadowResource(R.drawable.es_slidingpane_shadow);
+			mSlidingPaneLayout
+					.setShadowResource(R.drawable.es_slidingpane_shadow);
 			mSlidingPaneLayout.setSliderFadeColor(0);
 			mSlidingPaneLayout.setPanelSlideListener(new PanelSlideListener() {
 
@@ -253,7 +254,8 @@ public class ConversationActivity extends XmppActivity implements
 				.findItem(R.id.action_invite);
 		MenuItem menuMute = (MenuItem) menu.findItem(R.id.action_mute);
 
-		if (isConversationsOverviewVisable() && isConversationsOverviewHideable()) {
+		if (isConversationsOverviewVisable()
+				&& isConversationsOverviewHideable()) {
 			menuArchive.setVisible(false);
 			menuMucDetails.setVisible(false);
 			menuContactDetails.setVisible(false);
@@ -669,7 +671,8 @@ public class ConversationActivity extends XmppActivity implements
 	public void onSaveInstanceState(Bundle savedInstanceState) {
 		savedInstanceState.putString(STATE_OPEN_CONVERSATION,
 				getSelectedConversation().getUuid());
-		savedInstanceState.putBoolean(STATE_PANEL_OPEN, isConversationsOverviewVisable());
+		savedInstanceState.putBoolean(STATE_PANEL_OPEN,
+				isConversationsOverviewVisable());
 		super.onSaveInstanceState(savedInstanceState);
 	}
 

src/eu/siacs/conversations/ui/StartConversationActivity.java 🔗

@@ -403,7 +403,7 @@ public class StartConversationActivity extends XmppActivity {
 							String conferenceJid = jid.getText().toString();
 							Account account = xmppConnectionService
 									.findAccountByJid(accountJid);
-							if (account==null) {
+							if (account == null) {
 								dialog.dismiss();
 								return;
 							}

src/eu/siacs/conversations/ui/XmppActivity.java 🔗

@@ -208,7 +208,8 @@ public abstract class XmppActivity extends Activity {
 		mColorOrange = getResources().getColor(R.color.orange);
 		mColorGreen = getResources().getColor(R.color.green);
 		mPrimaryColor = getResources().getColor(R.color.primary);
-		mSecondaryBackgroundColor = getResources().getColor(R.color.secondarybackground);
+		mSecondaryBackgroundColor = getResources().getColor(
+				R.color.secondarybackground);
 		if (getPreferences().getBoolean("use_larger_font", false)) {
 			setTheme(R.style.ConversationsTheme_LargerText);
 		}
@@ -520,7 +521,7 @@ public abstract class XmppActivity extends Activity {
 	public int getPrimaryColor() {
 		return this.mPrimaryColor;
 	}
-	
+
 	public int getSecondaryBackgroundColor() {
 		return this.mSecondaryBackgroundColor;
 	}

src/eu/siacs/conversations/ui/adapter/ConversationAdapter.java 🔗

@@ -42,7 +42,8 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
 			ConversationActivity activity = (ConversationActivity) this.activity;
 			if (!activity.isConversationsOverviewHideable()) {
 				if (conv == activity.getSelectedConversation()) {
-					view.setBackgroundColor(activity.getSecondaryBackgroundColor());
+					view.setBackgroundColor(activity
+							.getSecondaryBackgroundColor());
 				} else {
 					view.setBackgroundColor(Color.TRANSPARENT);
 				}

src/eu/siacs/conversations/utils/DNSHelper.java 🔗

@@ -35,7 +35,8 @@ public class DNSHelper {
 				Bundle b = queryDNS(host, ip);
 				if (b.containsKey("name")) {
 					return b;
-				} else if (b.containsKey("error") && "nosrv".equals(b.getString("error", null))) {
+				} else if (b.containsKey("error")
+						&& "nosrv".equals(b.getString("error", null))) {
 					return b;
 				}
 			}