refactor getIconFromPresence(): newer return null icon

This commit is contained in:
Sergey Ponomarev
2026-07-24 23:03:23 +03:00
parent 5bb3199b3d
commit fbe49198b5
6 changed files with 60 additions and 87 deletions

View File

@ -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) {

View File

@ -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 <code>ContactList</code>.
@ -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"));

View File

@ -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;
}
}

View File

@ -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)) {

View File

@ -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) {

View File

@ -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);
}
}