diff options
author | Alan Young <consult.awy@gmail.com> | 2017-04-05 15:52:49 (GMT) |
---|---|---|
committer | Alan Young <consult.awy@gmail.com> | 2017-04-05 15:52:49 (GMT) |
commit | 0b496cbffef4d75d07b2e9709328c7d6b172afd7 (patch) | |
tree | 6b51476b18f9e52e7de64f2d90fb0aa0acb8e630 | |
parent | c20ff48f2c55c9b48a8fb181a3c3fdb9921bd054 (diff) | |
download | stroke-0b496cbffef4d75d07b2e9709328c7d6b172afd7.zip stroke-0b496cbffef4d75d07b2e9709328c7d6b172afd7.tar.bz2 |
Fix PresenceOracle initialization of PriorityQueue with initial size 0.
Change-Id: I624ede83351e2901272173f775d4f098743183b3
-rw-r--r-- | src/com/isode/stroke/presence/PresenceOracle.java | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/com/isode/stroke/presence/PresenceOracle.java b/src/com/isode/stroke/presence/PresenceOracle.java index e983d51..f1710a6 100644 --- a/src/com/isode/stroke/presence/PresenceOracle.java +++ b/src/com/isode/stroke/presence/PresenceOracle.java @@ -167,74 +167,78 @@ public class PresenceOracle { if (aPreference != bPreference) { return (aPreference > bPreference) ? -1 : 1; } if (a.getPriority() != b.getPriority()) { return (a.getPriority() > b.getPriority()) ? -1 : 1; } return -a.getFrom().getResource().compareTo(b.getFrom().getResource()); } } /** * Returns the relevant presence for a list of resource presences. * * It only takes the presence show type into account. Priorities are * ignored as various clients set them to arbitrary values unrelated * to actual end point availability. * * The presences of the resources are group by availablilty and sorted * by show type in the following order: * * -# Online * -# Free for Chat * -# Available * -# Away * -# DND * -# Extended Away * -# Away * -# Offline * -# Unavailable * @param presences List of resource presences. Should not be null. * @return The relevant presence. */ public static Presence getActivePresence(Collection<? extends Presence> presences) { + + PresenceAccountCmp comparator = new PresenceAccountCmp(); + int size = presences.size(); + if (size < 1) size = 1; - PriorityQueue<Presence> online = new PriorityQueue<Presence>(presences.size(),new PresenceAccountCmp()); - PriorityQueue<Presence> away = new PriorityQueue<Presence>(presences.size(),new PresenceAccountCmp()); - PriorityQueue<Presence> offline = new PriorityQueue<Presence>(presences.size(),new PresenceAccountCmp()); + PriorityQueue<Presence> online = new PriorityQueue<Presence>(size, comparator); + PriorityQueue<Presence> away = new PriorityQueue<Presence>(size, comparator); + PriorityQueue<Presence> offline = new PriorityQueue<Presence>(size, comparator); for (Presence presence : presences) { switch (presence.getShow()) { case Online: online.add(presence); break; case Away: away.add(presence); break; case FFC: online.add(presence); break; case XA: away.add(presence); break; case DND: away.add(presence); break; case None: offline.add(presence); break; } } Presence accountPresence = null; if (!online.isEmpty()) { accountPresence = online.peek(); } else if (!away.isEmpty()) { accountPresence = away.peek(); } else if (!offline.isEmpty()) { accountPresence = offline.peek(); } return accountPresence; |