summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Young <consult.awy@gmail.com>2016-06-03 15:19:28 (GMT)
committerAlan Young <consult.awy@gmail.com>2016-06-03 15:19:28 (GMT)
commit8708b7b01cf4f36524bff3dc9aa5a7a6534ce221 (patch)
treeddcf591d8a37d326b3989b4f9a70c3d828dde964
parent9d50093bee736d2b7b43756e9a41cfafbd568ee2 (diff)
downloadstroke-8708b7b01cf4f36524bff3dc9aa5a7a6534ce221.zip
stroke-8708b7b01cf4f36524bff3dc9aa5a7a6534ce221.tar.bz2
XMPPRosterImpl.getItems() needs to do deep copy.
And (therefore) XMPPRosterItem needs a copy constructor. Change-Id: I9c4d833e559cf70d0c125fc6d841f16b8c2ce5b9
-rw-r--r--src/com/isode/stroke/roster/XMPPRosterImpl.java6
-rw-r--r--src/com/isode/stroke/roster/XMPPRosterItem.java10
2 files changed, 15 insertions, 1 deletions
diff --git a/src/com/isode/stroke/roster/XMPPRosterImpl.java b/src/com/isode/stroke/roster/XMPPRosterImpl.java
index d87a20e..7b80104 100644
--- a/src/com/isode/stroke/roster/XMPPRosterImpl.java
+++ b/src/com/isode/stroke/roster/XMPPRosterImpl.java
@@ -70,13 +70,17 @@ public class XMPPRosterImpl extends XMPPRoster {
if (item != null) return item.getGroups();
return new ArrayList<String>();
}
@Override
public Collection<XMPPRosterItem> getItems() {
- return entries_.values();
+ Collection<XMPPRosterItem> items = new ArrayList<XMPPRosterItem>(entries_.size());
+ for (XMPPRosterItem item : entries_.values()) {
+ items.add(new XMPPRosterItem(item));
+ }
+ return items;
}
@Override
public XMPPRosterItem getItem(JID jid) {
XMPPRosterItem item = entries_.get(jid.toBare());
if (item != null) return item;
diff --git a/src/com/isode/stroke/roster/XMPPRosterItem.java b/src/com/isode/stroke/roster/XMPPRosterItem.java
index 1412f83..25ebc47 100644
--- a/src/com/isode/stroke/roster/XMPPRosterItem.java
+++ b/src/com/isode/stroke/roster/XMPPRosterItem.java
@@ -2,12 +2,13 @@
* Copyright (c) 2010-2015, Isode Limited, London, England.
* All rights reserved.
*/
package com.isode.stroke.roster;
import java.util.Collection;
+import java.util.ArrayList;
import com.isode.stroke.elements.RosterItemPayload;
import com.isode.stroke.jid.JID;
public class XMPPRosterItem {
private JID jid;
@@ -18,12 +19,21 @@ public class XMPPRosterItem {
public XMPPRosterItem(final JID jid, final String name, final Collection<String> groups, RosterItemPayload.Subscription subscription) {
this.jid = jid;
this.name = name;
this.groups = groups;
this.subscription = subscription;
}
+
+ // Copy constructor
+ public XMPPRosterItem(XMPPRosterItem from) {
+ this(from.jid, from.name, null, from.subscription);
+ if (from.groups != null) {
+ groups = new ArrayList<String>(from.groups.size());
+ groups.addAll(from.groups);
+ }
+ }
public final JID getJID() {
return jid;
}
public final String getName() {