summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Young <consult.awy@gmail.com>2017-04-05 15:52:49 (GMT)
committerAlan Young <consult.awy@gmail.com>2017-04-05 15:52:49 (GMT)
commit0b496cbffef4d75d07b2e9709328c7d6b172afd7 (patch)
tree6b51476b18f9e52e7de64f2d90fb0aa0acb8e630
parentc20ff48f2c55c9b48a8fb181a3c3fdb9921bd054 (diff)
downloadstroke-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.java10
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;