From 8c1e41b718ee01dd5fe82d98a928417bfb536347 Mon Sep 17 00:00:00 2001 From: Speedy Date: Fri, 28 Oct 2016 11:33:12 -0500 Subject: [PATCH] SPARK-1520 (#246) --- .../plugin/systray/SysTrayPlugin.java | 59 ++++++++++++++----- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java b/src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java index 02d1d240..2444c47e 100644 --- a/src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java +++ b/src/java/org/jivesoftware/sparkimpl/plugin/systray/SysTrayPlugin.java @@ -49,6 +49,7 @@ import org.jivesoftware.smackx.chatstates.ChatState; import org.jivesoftware.spark.ChatManager; import org.jivesoftware.spark.NativeHandler; import org.jivesoftware.spark.SparkManager; +import org.jivesoftware.spark.Workspace; import org.jivesoftware.spark.plugin.Plugin; import org.jivesoftware.spark.ui.status.CustomStatusItem; import org.jivesoftware.spark.ui.status.StatusBar; @@ -59,6 +60,7 @@ import org.jivesoftware.sparkimpl.settings.local.SettingsManager; import org.jivesoftware.smack.chat.ChatManagerListener; import org.jivesoftware.smackx.chatstates.ChatStateListener; + public class SysTrayPlugin implements Plugin, NativeHandler, ChatManagerListener, ChatStateListener { private JPopupMenu popupMenu = new JPopupMenu(); @@ -74,6 +76,7 @@ public class SysTrayPlugin implements Plugin, NativeHandler, ChatManagerListener private ImageIcon typingIcon; private TrayIcon trayIcon; private boolean newMessage = false; + private Presence presence; ChatMessageHandlerImpl chatMessageHandler = new ChatMessageHandlerImpl(); @Override @@ -474,10 +477,20 @@ public class SysTrayPlugin implements Plugin, NativeHandler, ChatManagerListener @Override public void flashWindowStopWhenFocused(Window window) { - trayIcon.setImage(availableIcon.getImage()); + presence = Workspace.getInstance().getStatusBar().getPresence(); + if (presence.getMode() == Presence.Mode.available) { + trayIcon.setImage(availableIcon.getImage()); + } else if (presence.getMode() == Presence.Mode.away + || presence.getMode() == Presence.Mode.xa) { + trayIcon.setImage(awayIcon.getImage()); + } else if (presence.getMode() == Presence.Mode.dnd) { + trayIcon.setImage(dndIcon.getImage()); + } else { + trayIcon.setImage(availableIcon.getImage()); + } newMessage = false; chatMessageHandler.clearUnreadMessages(); - } + } @Override public boolean handleNotification() { @@ -486,7 +499,17 @@ public class SysTrayPlugin implements Plugin, NativeHandler, ChatManagerListener @Override public void stopFlashing(Window window) { - trayIcon.setImage(availableIcon.getImage()); + presence = Workspace.getInstance().getStatusBar().getPresence(); + if (presence.getMode() == Presence.Mode.available) { + trayIcon.setImage(availableIcon.getImage()); + } else if (presence.getMode() == Presence.Mode.away + || presence.getMode() == Presence.Mode.xa) { + trayIcon.setImage(awayIcon.getImage()); + } else if (presence.getMode() == Presence.Mode.dnd) { + trayIcon.setImage(dndIcon.getImage()); + } else { + trayIcon.setImage(availableIcon.getImage()); + } newMessage = false; chatMessageHandler.clearUnreadMessages(); } @@ -496,19 +519,27 @@ public class SysTrayPlugin implements Plugin, NativeHandler, ChatManagerListener public void processMessage(Chat arg0, Message arg1) { // Do nothing - stateChanged is in charge - } + } @Override - public void stateChanged(Chat chat, ChatState state) { - if (ChatState.composing.equals(state)) { - changeSysTrayIcon(); - } else { - if (!newMessage) - trayIcon.setImage(availableIcon.getImage()); - else { - trayIcon.setImage(newMessageIcon.getImage()); - } - } + public void stateChanged(Chat chat, ChatState state) { + presence = Workspace.getInstance().getStatusBar().getPresence(); + if (ChatState.composing.equals(state)) { + changeSysTrayIcon(); + } else { + if (!newMessage) { + if (presence.getMode() == Presence.Mode.available) { + trayIcon.setImage(availableIcon.getImage()); + } else if (presence.getMode() == Presence.Mode.away + || presence.getMode() == Presence.Mode.xa) { + trayIcon.setImage(awayIcon.getImage()); + } else if (presence.getMode() == Presence.Mode.dnd) { + trayIcon.setImage(dndIcon.getImage()); + } else { + trayIcon.setImage(newMessageIcon.getImage()); + } + } + } } @Override