aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/osdependent
diff options
context:
space:
mode:
authorDamian Minkov <damencho@jitsi.org>2012-07-03 06:27:47 +0000
committerDamian Minkov <damencho@jitsi.org>2012-07-03 06:27:47 +0000
commitda8538bbf1c69230b46a24472dc236126daddcc6 (patch)
tree4eef292cdc0185af280501947c65aeaebf836bc2 /src/net/java/sip/communicator/impl/osdependent
parentc35f3afd63de49862df21ba4c1265a753cd76dd0 (diff)
downloadjitsi-da8538bbf1c69230b46a24472dc236126daddcc6.zip
jitsi-da8538bbf1c69230b46a24472dc236126daddcc6.tar.gz
jitsi-da8538bbf1c69230b46a24472dc236126daddcc6.tar.bz2
Adds global status menu to the tray menus, adding global status service.
Diffstat (limited to 'src/net/java/sip/communicator/impl/osdependent')
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/OsDependentActivator.java24
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java151
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/jdic/StatusSimpleSelector.java120
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/jdic/StatusSubMenu.java309
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/jdic/SystrayServiceJdicImpl.java56
-rw-r--r--src/net/java/sip/communicator/impl/osdependent/osdependent.manifest.mf1
6 files changed, 488 insertions, 173 deletions
diff --git a/src/net/java/sip/communicator/impl/osdependent/OsDependentActivator.java b/src/net/java/sip/communicator/impl/osdependent/OsDependentActivator.java
index 83c6ba8..ef80aee 100644
--- a/src/net/java/sip/communicator/impl/osdependent/OsDependentActivator.java
+++ b/src/net/java/sip/communicator/impl/osdependent/OsDependentActivator.java
@@ -10,11 +10,13 @@ import net.java.sip.communicator.impl.osdependent.jdic.*;
import net.java.sip.communicator.impl.osdependent.macosx.*;
import net.java.sip.communicator.service.desktop.*;
import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.service.resources.*;
import net.java.sip.communicator.service.shutdown.*;
import net.java.sip.communicator.service.systray.*;
-import net.java.sip.communicator.util.Logger;
+import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Logger;
import org.jitsi.service.configuration.*;
import org.jitsi.service.resources.*;
import org.jitsi.util.*;
@@ -40,6 +42,8 @@ public class OsDependentActivator
private static ResourceManagementService resourcesService;
+ private static GlobalStatusService globalStatusService;
+
/**
* The <tt>Logger</tt> used by the <tt>OsDependentActivator</tt> class and
* its instances for logging output.
@@ -192,4 +196,22 @@ public class OsDependentActivator
ResourceManagementServiceUtils.getService(bundleContext);
return resourcesService;
}
+
+ /**
+ * Returns the <tt>GlobalStatusService</tt> obtained from the bundle
+ * context.
+ * @return the <tt>GlobalStatusService</tt> obtained from the bundle
+ * context
+ */
+ public static GlobalStatusService getGlobalStatusService()
+ {
+ if (globalStatusService == null)
+ {
+ globalStatusService
+ = ServiceUtils.getService(
+ bundleContext,
+ GlobalStatusService.class);
+ }
+ return globalStatusService;
+ }
}
diff --git a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java
index ce4f56b..cb2a98b 100644
--- a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java
+++ b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSelector.java
@@ -24,7 +24,8 @@ import net.java.sip.communicator.util.*;
* @author Lubomir Marinov
*/
public class StatusSelector
- implements ActionListener
+ implements ActionListener,
+ ItemListener
{
/**
* A reference of <tt>Systray</tt>
@@ -81,17 +82,23 @@ public class StatusSelector
/* the submenu itself */
+ PresenceStatus offlineStatus = null;
Iterator<PresenceStatus> statusIterator
= this.presence.getSupportedStatusSet();
while (statusIterator.hasNext())
{
PresenceStatus status = statusIterator.next();
+
+ // if connectivity less then 1, this is offline one
+ if(status.getStatus() < 1)
+ offlineStatus = status;
+
String text = status.getStatusName();
if (menu instanceof Container)
{
- JMenuItem item = new JMenuItem(text);
+ JCheckBoxMenuItem item = new JCheckBoxMenuItem(text);
byte[] icBytes = status.getStatusIcon();
if(icBytes != null)
@@ -103,8 +110,8 @@ public class StatusSelector
}
else
{
- MenuItem item = new MenuItem(text);
- item.addActionListener(this);
+ CheckboxMenuItem item = new CheckboxMenuItem(text);
+ item.addItemListener(this);
((Menu) menu).add(item);
}
}
@@ -113,6 +120,9 @@ public class StatusSelector
StatusSubMenu.addMenuItem(menu, new StatusMessageMenu(provider, swing)
.getMenu());
+
+ if(offlineStatus != null)
+ updateStatus(offlineStatus);
}
private void addSeparator()
@@ -142,40 +152,26 @@ public class StatusSelector
else
menuItemText = ((MenuItem) source).getLabel();
+ changeStatus(menuItemText);
+ }
+
+ /**
+ * Searches for presence status with the supplied name and publish this
+ * status to the provider.
+ * @param statusName
+ */
+ private void changeStatus(String statusName)
+ {
Iterator<PresenceStatus> statusSet = presence.getSupportedStatusSet();
while (statusSet.hasNext())
{
PresenceStatus status = statusSet.next();
- if (status.getStatusName().equals(menuItemText))
+ if (status.getStatusName().equals(statusName))
{
- RegistrationState registrationState =
- provider.getRegistrationState();
-
- if (registrationState == RegistrationState.REGISTERED
- && !presence.getPresenceStatus().equals(status))
- {
- if (status.isOnline())
- new PublishPresenceStatusThread(status).start();
- else
- new ProviderUnRegistration(this.provider).start();
- }
- else if (registrationState != RegistrationState.REGISTERED
- && registrationState != RegistrationState.REGISTERING
- && registrationState != RegistrationState.AUTHENTICATING
- && status.isOnline())
- {
- new ProviderRegistration(provider).start();
- }
- else if (!status.isOnline()
- && !(registrationState == RegistrationState.UNREGISTERING))
- {
- new ProviderUnRegistration(this.provider).start();
- }
-
- parentSystray.saveStatusInformation(provider, status
- .getStatusName());
+ OsDependentActivator.getGlobalStatusService()
+ .publishStatus(provider, status, true);
break;
}
@@ -192,59 +188,64 @@ public class StatusSelector
if (menu instanceof AbstractButton)
((AbstractButton) menu).setIcon(new ImageIcon(presenceStatus
.getStatusIcon()));
- }
-
- /**
- * This class allow to use a thread to change the presence status.
- */
- private class PublishPresenceStatusThread extends Thread
- {
- private final PresenceStatus status;
-
- public PublishPresenceStatusThread(PresenceStatus status)
- {
- this.status = status;
- }
- public void run()
+ if(menu instanceof Menu)
{
- try {
- presence.publishPresenceStatus(status, "");
- }
- catch (IllegalArgumentException e1)
+ Menu theMenu = (Menu) menu;
+ for(int i =0; i < theMenu.getItemCount(); i++)
{
- logger.error("Error - changing status", e1);
- }
- catch (IllegalStateException e1)
- {
- logger.error("Error - changing status", e1);
+ MenuItem item = theMenu.getItem(i);
+
+ if(item instanceof CheckboxMenuItem)
+ {
+ if(item.getLabel().equals(presenceStatus.getStatusName()))
+ {
+ ((CheckboxMenuItem)item).setState(true);
+ }
+ else
+ {
+ ((CheckboxMenuItem)item).setState(false);
+ }
+ }
}
- catch (OperationFailedException e1)
+ }
+ else if(menu instanceof JMenu)
+ {
+ JMenu theMenu = (JMenu) menu;
+ for(int i =0; i < theMenu.getItemCount(); i++)
{
- String msg;
+ JMenuItem item = theMenu.getItem(i);
- switch (e1.getErrorCode())
+ if(item instanceof JCheckBoxMenuItem)
{
- case OperationFailedException.GENERAL_ERROR:
- msg
- = "General error occured while "
- + "publishing presence status.";
- break;
- case OperationFailedException.NETWORK_FAILURE:
- msg
- = "Network failure occured while "
- + "publishing presence status.";
- break;
- case OperationFailedException.PROVIDER_NOT_REGISTERED:
- msg
- = "Protocol provider must be"
- + "registered in order to change status.";
- break;
- default:
- return;
+ if(item.getText().equals(presenceStatus.getStatusName()))
+ item.setSelected(true);
+ else
+ item.setSelected(false);
}
+ }
+ }
+ }
- logger.error(msg, e1);
+ /**
+ * Listens for changes in item state (CheckboxMenuItem)s.
+ * @param e the event.
+ */
+ public void itemStateChanged(ItemEvent e)
+ {
+ Object sourceItem = e.getSource();
+ if(e.getStateChange() == ItemEvent.SELECTED)
+ {
+ if(sourceItem instanceof CheckboxMenuItem)
+ {
+ changeStatus(((CheckboxMenuItem)sourceItem).getLabel());
+ }
+ }
+ else if(e.getStateChange() == ItemEvent.DESELECTED)
+ {
+ if(sourceItem instanceof CheckboxMenuItem)
+ {
+ ((CheckboxMenuItem)sourceItem).setState(true);
}
}
}
diff --git a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSimpleSelector.java b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSimpleSelector.java
index 0c720a4..10b2320 100644
--- a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSimpleSelector.java
+++ b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSimpleSelector.java
@@ -13,6 +13,7 @@ import javax.swing.*;
import net.java.sip.communicator.impl.osdependent.*;
import net.java.sip.communicator.service.protocol.*;
+import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.util.swing.*;
/**
@@ -23,7 +24,8 @@ import net.java.sip.communicator.util.swing.*;
* @author Lubomir Marinov
*/
public class StatusSimpleSelector
- implements ActionListener
+ implements ActionListener,
+ ItemListener
{
/**
@@ -48,11 +50,12 @@ public class StatusSimpleSelector
/* the parent item */
String text = provider.getAccountID().getDisplayName();
this.menu = swing ? new JMenu(text) : new Menu(text);
- updateStatus();
/* the menu itself */
createMenuItem("service.gui.ONLINE", "online");
createMenuItem("service.gui.OFFLINE", "offline");
+
+ updateStatus();
}
private void createMenuItem(String textKey, String name)
@@ -60,16 +63,16 @@ public class StatusSimpleSelector
String text = Resources.getString(textKey);
if (menu instanceof JMenu)
{
- JMenuItem menuItem = new JMenuItem(text);
+ JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(text);
menuItem.setName(name);
menuItem.addActionListener(this);
((JMenu) menu).add(menuItem);
}
else
{
- MenuItem menuItem = new MenuItem(text);
+ CheckboxMenuItem menuItem = new CheckboxMenuItem(text);
menuItem.setName(name);
- menuItem.addActionListener(this);
+ menuItem.addItemListener(this);
((Menu) menu).add(menuItem);
}
}
@@ -86,31 +89,30 @@ public class StatusSimpleSelector
*/
public void actionPerformed(ActionEvent evt)
{
- Object source = evt.getSource();
+ changeStatus(evt.getSource());
+ }
+
+ /**
+ * Changes status corresponding the seelcted object.
+ * @param source the source object selected
+ */
+ private void changeStatus(Object source)
+ {
String itemName;
if (source instanceof Component)
itemName = ((Component) source).getName();
else
itemName = ((MenuComponent) source).getName();
- if(itemName.equals("online"))
+ if(itemName.equals("online"))
{
- if(!this.provider.isRegistered())
- {
- new ProviderRegistration(provider).start();
- }
+ OsDependentActivator.getGlobalStatusService()
+ .publishStatus(provider, GlobalStatusEnum.ONLINE, true);
}
else
{
- RegistrationState registrationState
- = provider.getRegistrationState();
-
- if(!RegistrationState.UNREGISTERED.equals(registrationState)
- && !RegistrationState.UNREGISTERING
- .equals(registrationState))
- {
- new ProviderUnRegistration(this.provider).start();
- }
+ OsDependentActivator.getGlobalStatusService()
+ .publishStatus(provider, GlobalStatusEnum.OFFLINE, true);
}
}
@@ -134,5 +136,83 @@ public class StatusSimpleSelector
((AbstractButton) menu).setIcon(icon);
}
}
+
+ String onlineText = Resources.getString("service.gui.ONLINE");
+ String offlineText = Resources.getString("service.gui.OFFLINE");
+ if(menu instanceof Menu)
+ {
+ Menu theMenu = (Menu) menu;
+ for(int i =0; i < theMenu.getItemCount(); i++)
+ {
+ MenuItem item = theMenu.getItem(i);
+
+ if(item instanceof CheckboxMenuItem)
+ {
+ if(item.getLabel().equals(onlineText))
+ {
+ if(provider.isRegistered())
+ ((CheckboxMenuItem)item).setState(true);
+ else
+ ((CheckboxMenuItem)item).setState(false);
+ }
+ else if(item.getLabel().equals(offlineText))
+ {
+ if(provider.isRegistered())
+ ((CheckboxMenuItem)item).setState(false);
+ else
+ ((CheckboxMenuItem)item).setState(true);
+ }
+ }
+ }
+ }
+ else if(menu instanceof JMenu)
+ {
+ JMenu theMenu = (JMenu) menu;
+ for(int i =0; i < theMenu.getItemCount(); i++)
+ {
+ JMenuItem item = theMenu.getItem(i);
+
+ if(item instanceof JCheckBoxMenuItem)
+ {
+ if(item.getText().equals(onlineText))
+ {
+ if(provider.isRegistered())
+ item.setSelected(true);
+ else
+ item.setSelected(false);
+ }
+ else if(item.getText().equals(offlineText))
+ {
+ if(provider.isRegistered())
+ item.setSelected(false);
+ else
+ item.setSelected(true);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Listens for changes in item state (CheckboxMenuItem)s.
+ * @param e the event.
+ */
+ public void itemStateChanged(ItemEvent e)
+ {
+ Object soutceItem = e.getSource();
+ if(e.getStateChange() == ItemEvent.SELECTED)
+ {
+ if(soutceItem instanceof CheckboxMenuItem)
+ {
+ changeStatus(soutceItem);
+ }
+ }
+ else if(e.getStateChange() == ItemEvent.DESELECTED)
+ {
+ if(soutceItem instanceof CheckboxMenuItem)
+ {
+ ((CheckboxMenuItem)soutceItem).setState(true);
+ }
+ }
}
}
diff --git a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSubMenu.java b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSubMenu.java
index a6ec0e8..5abd291 100644
--- a/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSubMenu.java
+++ b/src/net/java/sip/communicator/impl/osdependent/jdic/StatusSubMenu.java
@@ -7,14 +7,17 @@
package net.java.sip.communicator.impl.osdependent.jdic;
import java.awt.*;
+import java.awt.event.*;
import java.beans.*;
import java.util.*;
+import java.util.List;
import javax.swing.*;
import net.java.sip.communicator.impl.osdependent.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
+import net.java.sip.communicator.service.protocol.globalstatus.*;
import net.java.sip.communicator.util.*;
import org.osgi.framework.*;
@@ -28,7 +31,9 @@ import org.osgi.framework.*;
*/
public class StatusSubMenu
implements ProviderPresenceStatusListener,
- RegistrationStateChangeListener
+ RegistrationStateChangeListener,
+ ActionListener,
+ ItemListener
{
/**
* A reference of <tt>Systray</tt>
@@ -50,6 +55,11 @@ public class StatusSubMenu
private final Object menu;
/**
+ * Hide accounts from accounts status list.
+ */
+ private static boolean hideAccountStatusSelectors = false;
+
+ /**
* Creates an instance of <tt>StatusSubMenu</tt>.
*
* @param tray a reference of the parent <tt>Systray</tt>
@@ -79,6 +89,39 @@ public class StatusSubMenu
this.menu = new Menu(text);
}
+ {
+ String hideAccountStatusSelectorsProperty
+ = "impl.gui.HIDE_ACCOUNT_STATUS_SELECTORS";
+ String hideAccountsStatusDefaultValue =
+ OsDependentActivator.getResources()
+ .getSettingsString(hideAccountStatusSelectorsProperty);
+
+ if(hideAccountsStatusDefaultValue != null)
+ hideAccountStatusSelectors = Boolean.parseBoolean(
+ hideAccountsStatusDefaultValue);
+
+ hideAccountStatusSelectors =
+ OsDependentActivator.getConfigurationService()
+ .getBoolean(
+ hideAccountStatusSelectorsProperty,
+ hideAccountStatusSelectors);
+ }
+
+ PresenceStatus offlineStatus = null;
+ // creates menu item entry for every global status
+ for(GlobalStatusEnum status : GlobalStatusEnum.globalStatusSet)
+ {
+ createMenuItem(status, swing);
+
+ if(status.getStatus() < 1)
+ offlineStatus = status;
+ }
+ // initially it is offline
+ selectItemFromStatus(offlineStatus.getStatus());
+
+ if(!hideAccountStatusSelectors)
+ this.addSeparator();
+
this.init();
}
@@ -88,6 +131,52 @@ public class StatusSubMenu
}
/**
+ * Creates a menu item with the given <tt>textKey</tt>, <tt>iconID</tt> and
+ * <tt>name</tt>.
+ * @return the created <tt>JCheckBoxMenuItem</tt>
+ */
+ private Object createMenuItem(
+ GlobalStatusEnum status,
+ boolean swing)
+ {
+ Object menuItem = null;
+
+ if(swing)
+ {
+ JCheckBoxMenuItem mItem = new JCheckBoxMenuItem(
+ GlobalStatusEnum.getI18NStatusName(status),
+ new ImageIcon(status.getStatusIcon()));
+
+ mItem.setName(status.getStatusName());
+ mItem.addActionListener(this);
+ menuItem = mItem;
+ }
+ else
+ {
+ CheckboxMenuItem mItem = new CheckboxMenuItem(
+ GlobalStatusEnum.getI18NStatusName(status));
+ mItem.setName(status.getStatusName());
+ mItem.addItemListener(this);
+ menuItem = mItem;
+ }
+ addMenuItem(getMenu(), menuItem);
+
+
+ return menuItem;
+ }
+
+ /**
+ * Adds separator to underlying menu implementation.
+ */
+ private void addSeparator()
+ {
+ if (menu instanceof JMenu)
+ ((JMenu) menu).addSeparator();
+ else
+ ((Menu) menu).addSeparator();
+ }
+
+ /**
* Adds the account corresponding to the given protocol provider to this
* menu.
*
@@ -108,7 +197,8 @@ public class StatusSubMenu
this.accountSelectors.put(protocolProvider.getAccountID(),
simpleSelector);
- addMenuItem(menu, simpleSelector.getMenu());
+ if(!hideAccountStatusSelectors)
+ addMenuItem(menu, simpleSelector.getMenu());
protocolProvider.addRegistrationStateChangeListener(this);
}
@@ -120,7 +210,8 @@ public class StatusSubMenu
this.accountSelectors.put(protocolProvider.getAccountID(),
statusSelector);
- addMenuItem(menu, statusSelector.getMenu());
+ if(!hideAccountStatusSelectors)
+ addMenuItem(menu, statusSelector.getMenu());
presence.addProviderPresenceStatusListener(this);
}
@@ -179,42 +270,60 @@ public class StatusSubMenu
OsDependentActivator.bundleContext
.addServiceListener(new ProtocolProviderServiceListener());
- ServiceReference[] protocolProviderRefs;
+ for(ProtocolProviderService provider : getProtocolProviders())
+ {
+ boolean isHidden
+ = provider
+ .getAccountID()
+ .getAccountProperty(
+ ProtocolProviderFactory.IS_PROTOCOL_HIDDEN)
+ != null;
+
+ if(!isHidden)
+ this.addAccount(provider);
+ }
+ }
+
+ /**
+ * Obtains all currently registered ProtocolProviderServices.
+ * @return all currently registered ProtocolProviderServices.
+ */
+ private List<ProtocolProviderService> getProtocolProviders()
+ {
+ List<ProtocolProviderService> providers
+ = new ArrayList<ProtocolProviderService>();
+ ServiceReference[] protocolProviderRefs = null;
try
{
protocolProviderRefs
= OsDependentActivator.bundleContext.getServiceReferences(
- ProtocolProviderService.class.getName(),null);
+ ProtocolProviderService.class.getName(), null);
}
catch (InvalidSyntaxException ex)
{
// this shouldn't happen since we're providing no parameter string
// but let's log just in case.
- logger .error("Error while retrieving service refs", ex);
- return;
+ //logger .error("Error while retrieving service refs", ex);
+ return providers;
+ }
+ catch(IllegalStateException ise)
+ {
+ // happens sometimes on stopping felix
}
// in case we found any
if (protocolProviderRefs != null)
{
-
for (ServiceReference protocolProviderRef : protocolProviderRefs)
{
- ProtocolProviderService provider
- = (ProtocolProviderService)
+ providers.add(
+ (ProtocolProviderService)
OsDependentActivator
- .bundleContext.getService(protocolProviderRef);
- boolean isHidden
- = provider
- .getAccountID()
- .getAccountProperty(
- ProtocolProviderFactory.IS_PROTOCOL_HIDDEN)
- != null;
-
- if(!isHidden)
- this.addAccount(provider);
+ .bundleContext.getService(protocolProviderRef));
}
}
+
+ return providers;
}
/**
@@ -231,6 +340,8 @@ public class StatusSubMenu
if (selectorBox != null)
selectorBox.updateStatus(evt.getNewStatus());
+
+ this.updateGlobalStatus();
}
/*
@@ -254,6 +365,162 @@ public class StatusSubMenu
if (selectorBox != null)
selectorBox.updateStatus();
+
+ this.updateGlobalStatus();
+ }
+
+ /**
+ * Updates the global status by picking the most connected protocol provider
+ * status.
+ */
+ private void updateGlobalStatus()
+ {
+ int status = 0;
+
+ for(ProtocolProviderService protocolProvider : getProtocolProviders())
+ {
+ // We do not show hidden protocols in our status bar, so we do not
+ // care about their status here.
+ boolean isProtocolHidden =
+ protocolProvider.getAccountID().getAccountProperty(
+ ProtocolProviderFactory.IS_PROTOCOL_HIDDEN) != null;
+
+ if (isProtocolHidden)
+ continue;
+
+ if (!protocolProvider.isRegistered())
+ continue;
+
+ OperationSetPresence presence
+ = protocolProvider.getOperationSet(OperationSetPresence.class);
+ int presenceStatus
+ = (presence == null)
+ ? PresenceStatus.AVAILABLE_THRESHOLD
+ : presence.getPresenceStatus().getStatus();
+
+ if (status < presenceStatus)
+ status = presenceStatus;
+ }
+
+ selectItemFromStatus(status);
+ }
+
+ /**
+ * Selects the menu item corresponding to the given status.
+ * For status constants we use here the values defined in the
+ * <tt>PresenceStatus</tt>, but this is only for convenience.
+ *
+ * @param status the status to which the item should correspond
+ */
+ private void selectItemFromStatus(int status)
+ {
+ String nameToSelect;
+ if(status < PresenceStatus.ONLINE_THRESHOLD)
+ {
+ nameToSelect = GlobalStatusEnum.OFFLINE_STATUS;
+ }
+ else if(status < PresenceStatus.AWAY_THRESHOLD)
+ {
+ nameToSelect = GlobalStatusEnum.DO_NOT_DISTURB_STATUS;
+ }
+ else if(status < PresenceStatus.AVAILABLE_THRESHOLD)
+ {
+ nameToSelect = GlobalStatusEnum.AWAY_STATUS;
+ }
+ else if(status < PresenceStatus.EAGER_TO_COMMUNICATE_THRESHOLD)
+ {
+ nameToSelect = GlobalStatusEnum.ONLINE_STATUS;
+ }
+ else if(status < PresenceStatus.MAX_STATUS_VALUE)
+ {
+ nameToSelect = GlobalStatusEnum.FREE_FOR_CHAT_STATUS;
+ }
+ else
+ {
+ nameToSelect = GlobalStatusEnum.OFFLINE_STATUS;
+ }
+
+ if(menu instanceof Menu)
+ {
+ Menu theMenu = (Menu) menu;
+ for(int i =0; i < theMenu.getItemCount(); i++)
+ {
+ MenuItem item = theMenu.getItem(i);
+
+ if(item instanceof CheckboxMenuItem)
+ {
+ if(item.getName().equals(nameToSelect))
+ {
+ ((CheckboxMenuItem)item).setState(true);
+ }
+ else
+ {
+ ((CheckboxMenuItem)item).setState(false);
+ }
+ }
+ }
+ }
+ else if(menu instanceof JMenu)
+ {
+ JMenu theMenu = (JMenu) menu;
+ for(int i =0; i < theMenu.getItemCount(); i++)
+ {
+ JMenuItem item = theMenu.getItem(i);
+
+ if(item instanceof JCheckBoxMenuItem)
+ {
+ if(item.getName().equals(nameToSelect))
+ item.setSelected(true);
+ else
+ item.setSelected(false);
+ }
+ }
+ }
+ }
+
+ /**
+ * Change the status of the protocol according to the menu item selected
+ *
+ * @param evt the event containing the menu item name
+ */
+ public void actionPerformed(ActionEvent evt)
+ {
+ Object source = evt.getSource();
+ if(source instanceof JMenuItem)
+ changeStatusFromName(((JMenuItem)source).getName());
+ }
+
+ /**
+ * Listens for changes in item state (CheckboxMenuItem)s.
+ * @param e the event.
+ */
+ public void itemStateChanged(ItemEvent e)
+ {
+ Object sourceItem = e.getSource();
+ if(e.getStateChange() == ItemEvent.SELECTED)
+ {
+ if(sourceItem instanceof CheckboxMenuItem)
+ {
+ changeStatusFromName(((CheckboxMenuItem)sourceItem).getName());
+ }
+ }
+ else if(e.getStateChange() == ItemEvent.DESELECTED)
+ {
+ if(sourceItem instanceof CheckboxMenuItem)
+ {
+ ((CheckboxMenuItem)sourceItem).setState(true);
+ }
+ }
+ }
+
+ /**
+ * Changes global status from selected item name.
+ * @param itemName the item name that was selected.
+ */
+ private void changeStatusFromName(String itemName)
+ {
+ OsDependentActivator.getGlobalStatusService().publishStatus(
+ GlobalStatusEnum.getStatusByName(itemName));
}
/**
@@ -267,7 +534,7 @@ public class StatusSubMenu
/**
* When a service is registered or unregistered, we update
* the provider tables and add/remove listeners (if it supports
- * BasicInstantMessenging implementation)
+ * BasicInstantMessaging implementation)
*
* @param event ServiceEvent
*/
diff --git a/src/net/java/sip/communicator/impl/osdependent/jdic/SystrayServiceJdicImpl.java b/src/net/java/sip/communicator/impl/osdependent/jdic/SystrayServiceJdicImpl.java
index 3fa31a4..c1e97d4 100644
--- a/src/net/java/sip/communicator/impl/osdependent/jdic/SystrayServiceJdicImpl.java
+++ b/src/net/java/sip/communicator/impl/osdependent/jdic/SystrayServiceJdicImpl.java
@@ -356,62 +356,6 @@ public class SystrayServiceJdicImpl
}
/**
- * Saves the last status for all accounts. This information is used
- * on logging. Each time user logs in he's logged with the same status
- * as he was the last time before closing the application.
- *
- * @param protocolProvider the protocol provider for which we save the
- * last selected status
- * @param statusName the status name to save
- */
- public void saveStatusInformation(
- ProtocolProviderService protocolProvider,
- String statusName)
- {
- if (configService != null)
- {
- String prefix = "net.java.sip.communicator.impl.gui.accounts";
-
- List<String> accounts = configService.getPropertyNamesByPrefix(
- prefix, true);
-
- boolean savedAccount = false;
-
- for (String accountRootPropName : accounts)
- {
- String accountUID = configService.getString(accountRootPropName);
-
- if (accountUID.equals(protocolProvider.getAccountID().
- getAccountUniqueID()))
- {
-
- configService.setProperty(
- accountRootPropName + ".lastAccountStatus",
- statusName);
-
- savedAccount = true;
- }
- }
-
- if (!savedAccount)
- {
- String accNodeName = "acc" + Long.toString(System.
- currentTimeMillis());
-
- String accountPackage =
- "net.java.sip.communicator.impl.gui.accounts." + accNodeName;
-
- configService.setProperty(accountPackage,
- protocolProvider.getAccountID().getAccountUniqueID());
-
- configService.setProperty(
- accountPackage + ".lastAccountStatus",
- statusName);
- }
- }
- }
-
- /**
* Implements <tt>SystraService#showPopupMessage()</tt>
*
* @param popupMessage the message we will show
diff --git a/src/net/java/sip/communicator/impl/osdependent/osdependent.manifest.mf b/src/net/java/sip/communicator/impl/osdependent/osdependent.manifest.mf
index 6f0ed5f..0ec37fb 100644
--- a/src/net/java/sip/communicator/impl/osdependent/osdependent.manifest.mf
+++ b/src/net/java/sip/communicator/impl/osdependent/osdependent.manifest.mf
@@ -17,6 +17,7 @@ Import-Package: org.osgi.framework,
net.java.sip.communicator.service.gui,
net.java.sip.communicator.service.gui.event,
net.java.sip.communicator.service.protocol,
+ net.java.sip.communicator.service.protocol.globalstatus,
net.java.sip.communicator.service.protocol.event,
org.jitsi.service.resources, net.java.sip.communicator.service.resources,
net.java.sip.communicator.service.shutdown,