diff --git a/core/src/main/java/org/jivesoftware/spark/PresenceManager.java b/core/src/main/java/org/jivesoftware/spark/PresenceManager.java index 2c2265200..b34bb6a68 100644 --- a/core/src/main/java/org/jivesoftware/spark/PresenceManager.java +++ b/core/src/main/java/org/jivesoftware/spark/PresenceManager.java @@ -192,54 +192,40 @@ public class PresenceManager { /** * Returns the icon associated with a users presence. - * - * @param presence the users presence. - * @return the icon associated with it. */ public static Icon getIconFromPresence(Presence presence) { - if (isInvisible(presence)) { + if (isInvisible(presence)) { return SparkRes.getImageIcon(SparkRes.Icon.CLEAR_BALL_ICON); } - // Handle offline presence if (!presence.isAvailable()) { return SparkRes.getImageIcon(SparkRes.Icon.CLEAR_BALL_ICON); } - - Presence.Mode presenceMode = presence.getMode(); - if (presenceMode == null) { - presenceMode = Presence.Mode.available; - } - - Icon icon = null; - - if (presenceMode.equals(Presence.Mode.available)) { - icon = SparkRes.getImageIcon(SparkRes.Icon.GREEN_BALL); - } - else if (presenceMode.equals(Presence.Mode.chat)) { - icon = SparkRes.getImageIcon(SparkRes.Icon.FREE_TO_CHAT_IMAGE); - } - else if (isOnPhone(presence)) { - icon = SparkRes.getImageIcon(SparkRes.Icon.ON_PHONE_IMAGE); - } - else if (presenceMode.equals(Presence.Mode.away)) { - icon = SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY); - } - else if (presenceMode.equals(Presence.Mode.dnd)) { - icon = SparkRes.getImageIcon(SparkRes.Icon.IM_DND); - } - else if (presenceMode.equals(Presence.Mode.xa)) { - icon = SparkRes.getImageIcon(SparkRes.Icon.IM_XA); - } - // Check For ContactItem handlers Icon handlerIcon = SparkManager.getChatManager().getTabIconForContactHandler(presence); if (handlerIcon != null) { - icon = handlerIcon; + return handlerIcon; + } + if (isOnPhone(presence)) { + return SparkRes.getImageIcon(SparkRes.Icon.ON_PHONE_IMAGE); } - - return icon; + Presence.Mode presenceMode = presence.getMode(); + switch (presenceMode) { + case available: + return SparkRes.getImageIcon(SparkRes.Icon.GREEN_BALL); + case chat: + return SparkRes.getImageIcon(SparkRes.Icon.FREE_TO_CHAT_IMAGE); + case away: + return SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY); + case dnd: + return SparkRes.getImageIcon(SparkRes.Icon.IM_DND); + case xa: + return SparkRes.getImageIcon(SparkRes.Icon.IM_XA); + default: + // never happens + throw new IllegalStateException("Unexpected value: " + presenceMode); + } } /** @@ -258,7 +244,7 @@ public class PresenceManager { } return presence.getStatus() != null && presence.getStatus().contains(Res.getString("status.on.phone")) && - presenceMode.equals(Presence.Mode.away); + presenceMode == Presence.Mode.away; } public static boolean isInvisible(Presence presence) { diff --git a/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java b/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java index bdc5514a6..1e4ef34cc 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/ContactItem.java @@ -53,6 +53,8 @@ import org.jxmpp.jid.BareJid; import static java.util.Objects.requireNonNull; import static org.apache.commons.lang3.StringUtils.isBlank; import static org.apache.commons.lang3.StringUtils.trimToEmpty; +import static org.jivesoftware.smack.roster.packet.RosterPacket.ItemType.from; +import static org.jivesoftware.smack.roster.packet.RosterPacket.ItemType.none; /** * Represent a single contact within the ContactList. @@ -314,34 +316,30 @@ public class ContactItem extends JPanel { } String status = presence.getStatus(); - Icon statusIcon = SparkRes.getImageIcon(SparkRes.Icon.GREEN_BALL); boolean isAvailable = false; if (status == null && presence.isAvailable()) { - Presence.Mode mode = presence.getMode(); - if (mode == Presence.Mode.available) { - status = Res.getString("status.online"); - isAvailable = true; - } - else if (mode == Presence.Mode.away) { - status = Res.getString("status.away"); - statusIcon = SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY); - } - else if (mode == Presence.Mode.chat) { - status = Res.getString("status.free.to.chat"); - } - else if (mode == Presence.Mode.dnd) { - status = Res.getString("status.do.not.disturb"); - statusIcon = SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY); - } - else if (mode == Presence.Mode.xa) { - status = Res.getString("status.extended.away"); - statusIcon = SparkRes.getImageIcon(SparkRes.Icon.IM_XA); + switch (presence.getMode()) { + case available: + status = Res.getString("status.online"); + isAvailable = true; + break; + case away: + status = Res.getString("status.away"); + break; + case chat: + status = Res.getString("status.free.to.chat"); + break; + case dnd: + status = Res.getString("status.do.not.disturb"); + break; + case xa: + status = Res.getString("status.extended.away"); + break; } } // Sets status icon and text based on presence if (presence.isAway()) { - statusIcon = SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY); } else if (presence.isAvailable()) { isAvailable = true; @@ -352,7 +350,7 @@ public class ContactItem extends JPanel { Roster roster = SparkManager.getRoster(); RosterEntry entry = roster.getEntry(getJid()); - if (entry != null && (entry.getType() == RosterPacket.ItemType.none || entry.getType() == RosterPacket.ItemType.from) + if (entry != null && (entry.getType() == none || entry.getType() == from) && entry.isSubscriptionPending()) { // Do not move out of group. setIcon(SparkRes.getImageIcon(SparkRes.Icon.SMALL_QUESTION)); @@ -374,16 +372,11 @@ public class ContactItem extends JPanel { } Icon sIcon = PresenceManager.getIconFromPresence(presence); - setIcon(sIcon != null ? sIcon : statusIcon); + setIcon(sIcon); if (status != null) { setStatus(status); } - if (PresenceManager.isOnPhone(presence)) { - statusIcon = SparkRes.getImageIcon(SparkRes.Icon.ON_PHONE_IMAGE); - setIcon(statusIcon); - } - // Always change nickname label to black. getNicknameLabel().setForeground((Color)UIManager.get("ContactItemNickname.foreground")); diff --git a/core/src/main/java/org/jivesoftware/spark/ui/SparkTabHandler.java b/core/src/main/java/org/jivesoftware/spark/ui/SparkTabHandler.java index ce5b7e58d..41a6cfb3f 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/SparkTabHandler.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/SparkTabHandler.java @@ -51,20 +51,22 @@ public abstract class SparkTabHandler { } else { Presence.Mode mode = presence.getMode(); - if (mode == Presence.Mode.available || mode == null) { - tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_AVAILABLE_STALE_IMAGE)); - } - else if (mode == Presence.Mode.away) { - tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY_STALE_IMAGE)); - } - else if (mode == Presence.Mode.chat) { - tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_FREE_CHAT_STALE_IMAGE)); - } - else if (mode == Presence.Mode.dnd) { - tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_DND_STALE_IMAGE)); - } - else if (mode == Presence.Mode.xa) { - tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_XA_STALE_IMAGE)); + switch (mode) { + case available: + tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_AVAILABLE_STALE_IMAGE)); + break; + case away: + tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_AWAY_STALE_IMAGE)); + break; + case chat: + tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_FREE_CHAT_STALE_IMAGE)); + break; + case dnd: + tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_DND_STALE_IMAGE)); + break; + case xa: + tab.setIcon(SparkRes.getImageIcon(SparkRes.Icon.IM_XA_STALE_IMAGE)); + break; } } diff --git a/core/src/main/java/org/jivesoftware/spark/ui/conferences/GroupChatParticipantList.java b/core/src/main/java/org/jivesoftware/spark/ui/conferences/GroupChatParticipantList.java index 079386d5e..da3bad697 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/conferences/GroupChatParticipantList.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/conferences/GroupChatParticipantList.java @@ -261,9 +261,6 @@ public class GroupChatParticipantList extends JPanel { icon = getIconForRole(role, affiliation); } else { icon = PresenceManager.getIconFromPresence(presence); - if (icon == null) { - icon = SparkRes.getImageIcon(SparkRes.Icon.GREEN_BALL); - } } if (!exists(nickname)) { diff --git a/core/src/main/java/org/jivesoftware/spark/ui/status/StatusBar.java b/core/src/main/java/org/jivesoftware/spark/ui/status/StatusBar.java index 27d5bbfc3..f6a6d5a60 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/status/StatusBar.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/status/StatusBar.java @@ -180,9 +180,7 @@ public class StatusBar extends JPanel implements VCardListener { protected void updatePresence() { setStatus(currentPresence.getStatus()); final Icon icon = PresenceManager.getIconFromPresence(currentPresence); - if (icon != null) { - statusPanel.setIcon(icon); - } + statusPanel.setIcon(icon); } public void showPopup(MouseEvent e, JLabel lblStatus) { diff --git a/plugins/fastpath/src/main/java/org/jivesoftware/fastpath/workspace/panes/OnlineAgents.java b/plugins/fastpath/src/main/java/org/jivesoftware/fastpath/workspace/panes/OnlineAgents.java index d6c697672..141df9399 100644 --- a/plugins/fastpath/src/main/java/org/jivesoftware/fastpath/workspace/panes/OnlineAgents.java +++ b/plugins/fastpath/src/main/java/org/jivesoftware/fastpath/workspace/panes/OnlineAgents.java @@ -315,9 +315,6 @@ public final class OnlineAgents extends JPanel { } else if (presence.getType() == Presence.Type.available) { Icon icon = PresenceManager.getIconFromPresence(presence); - if (icon == null) { - icon = FastpathRes.getImageIcon(FastpathRes.GREEN_BALL); - } item.setIcon(icon); } }