@ -1,71 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
package net.java.sip.communicator.plugin.systray;
|
||||
|
||||
import net.java.sip.communicator.plugin.systray.jdic.*;
|
||||
import net.java.sip.communicator.service.gui.UIService;
|
||||
import net.java.sip.communicator.util.Logger;
|
||||
|
||||
import org.osgi.framework.BundleActivator;
|
||||
import org.osgi.framework.BundleContext;
|
||||
import org.osgi.framework.ServiceReference;
|
||||
|
||||
//test
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.service.protocol.event.*;
|
||||
import org.osgi.framework.*;
|
||||
|
||||
/**
|
||||
* Registers the <tt>Systray</tt> in the UI Service.
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*/
|
||||
public class SystrayActivator
|
||||
implements BundleActivator
|
||||
{
|
||||
|
||||
/**
|
||||
* A currently valid bundle context.
|
||||
*/
|
||||
public static BundleContext bundleContext;
|
||||
|
||||
private static Logger logger = Logger.getLogger(
|
||||
SystrayActivator.class.getName());
|
||||
|
||||
/**
|
||||
* Called when this bundle is started.
|
||||
*
|
||||
* @param bc The execution context of the bundle being started.
|
||||
* @throws Exception If
|
||||
*/
|
||||
public void start(BundleContext bc) throws Exception
|
||||
{
|
||||
bundleContext = bc;
|
||||
|
||||
ServiceReference uiServiceRef = bundleContext
|
||||
.getServiceReference(UIService.class.getName());
|
||||
|
||||
UIService uiService
|
||||
= (UIService) bundleContext.getService(uiServiceRef);
|
||||
|
||||
Systray systray = new Systray(uiService);
|
||||
bc.addServiceListener(systray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when this bundle is stopped so the Framework can perform the
|
||||
* bundle-specific activities necessary to stop the bundle.
|
||||
*
|
||||
* @param bc The execution context of the bundle being stopped.
|
||||
* @throws Exception If this method throws an exception, the bundle is
|
||||
* still marked as stopped, and the Framework will remove the bundle's
|
||||
* listeners, unregister all services registered by the bundle, and
|
||||
* release all services used by the bundle.
|
||||
*/
|
||||
public void stop(BundleContext bc) throws Exception {
|
||||
}
|
||||
}
|
||||
@ -1,87 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
/**
|
||||
* The <tt>ProviderRegistration</tt> is used by the systray plugin
|
||||
* to make the registration to a protocol provider. This operation
|
||||
* is implemented within a thread, so that sip-communicator can
|
||||
* continue its execution during this operation.
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*/
|
||||
|
||||
public class ProviderRegistration
|
||||
extends Thread
|
||||
{
|
||||
/**
|
||||
* The protocol provider to whom we want to register
|
||||
*/
|
||||
ProtocolProviderService protocolProvider;
|
||||
/* temporary */
|
||||
SecurityAuthority secAuth;
|
||||
|
||||
/**
|
||||
* The logger for this class.
|
||||
*/
|
||||
private Logger logger = Logger.getLogger(ProviderRegistration.class.getName());
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>ProviderRegistration</tt>.
|
||||
* @param protocolProvider the provider we want to register
|
||||
* @param secAuth temporary, will be changed
|
||||
*/
|
||||
ProviderRegistration(ProtocolProviderService protocolProvider,
|
||||
SecurityAuthority secAuth)
|
||||
{
|
||||
this.protocolProvider = protocolProvider;
|
||||
this.secAuth = secAuth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the thread which will register to the provider
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
try {
|
||||
protocolProvider.register(secAuth);
|
||||
}
|
||||
catch (OperationFailedException ex)
|
||||
{
|
||||
int errorCode = ex.getErrorCode();
|
||||
if (errorCode == OperationFailedException.GENERAL_ERROR)
|
||||
{
|
||||
logger.error("Provider could not be registered"
|
||||
+ " due to the following general error: ", ex);
|
||||
}
|
||||
else if (errorCode == OperationFailedException.INTERNAL_ERROR)
|
||||
{
|
||||
logger.error("Provider could not be registered"
|
||||
+ " due to the following internal error: ", ex);
|
||||
}
|
||||
else if (errorCode == OperationFailedException.NETWORK_FAILURE)
|
||||
{
|
||||
logger.error("Provider could not be registered"
|
||||
+ " due to a network failure: " + ex);
|
||||
}
|
||||
else if (errorCode == OperationFailedException
|
||||
.INVALID_ACCOUNT_PROPERTIES)
|
||||
{
|
||||
logger.error("Provider could not be registered"
|
||||
+ " due to an invalid account property: ", ex);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.error("Provider could not be registered.", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,81 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
/**
|
||||
* The <tt>ProviderUnRegistration</tt> is used by the systray plugin
|
||||
* to make the unregistration to a protocol provider. This operation
|
||||
* is implemented within a thread, so that sip-communicator can
|
||||
* continue its execution smoothly.
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*/
|
||||
public class ProviderUnRegistration
|
||||
extends Thread
|
||||
{
|
||||
/**
|
||||
* The protocol provider to whom we want to unregister
|
||||
*/
|
||||
ProtocolProviderService protocolProvider;
|
||||
/**
|
||||
* The logger for this class.
|
||||
*/
|
||||
private Logger logger = Logger.getLogger(ProviderUnRegistration.class.getName());
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>ProviderUnRegistration</tt>.
|
||||
* @param protocolProvider the provider we want to unregister
|
||||
*/
|
||||
ProviderUnRegistration(ProtocolProviderService protocolProvider)
|
||||
{
|
||||
this.protocolProvider = protocolProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the thread which will unregister to the provider
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
protocolProvider.unregister();
|
||||
}
|
||||
catch (OperationFailedException ex)
|
||||
{
|
||||
int errorCode = ex.getErrorCode();
|
||||
if (errorCode == OperationFailedException.GENERAL_ERROR)
|
||||
{
|
||||
logger.error("Provider could not be unregistered"
|
||||
+ " due to the following general error: ", ex);
|
||||
}
|
||||
else if (errorCode == OperationFailedException.INTERNAL_ERROR)
|
||||
{
|
||||
logger.error("Provider could not be unregistered"
|
||||
+ " due to the following internal error: ", ex);
|
||||
}
|
||||
else if (errorCode == OperationFailedException.NETWORK_FAILURE)
|
||||
{
|
||||
logger.error("Provider could not be unregistered"
|
||||
+ " due to a network failure: " + ex);
|
||||
}
|
||||
else if (errorCode == OperationFailedException
|
||||
.INVALID_ACCOUNT_PROPERTIES)
|
||||
{
|
||||
logger.error("Provider could not be unregistered"
|
||||
+ " due to an invalid account property: ", ex);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.error("Provider could not be unregistered.", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import net.java.sip.communicator.util.*;
|
||||
/**
|
||||
* The Messages class manages the access to the internationalization
|
||||
* properties files.
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*/
|
||||
public class Resources
|
||||
{
|
||||
|
||||
private static Logger log = Logger.getLogger(Resources.class);
|
||||
|
||||
private static final String BUNDLE_NAME
|
||||
= "net.java.sip.communicator.plugin.systray.jdic.resources";
|
||||
|
||||
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
|
||||
.getBundle(BUNDLE_NAME);
|
||||
|
||||
|
||||
/**
|
||||
* Returns an internationalized string corresponding to the given key.
|
||||
* @param key The key of the string.
|
||||
* @return An internationalized string corresponding to the given key.
|
||||
*/
|
||||
public static String getString(String key)
|
||||
{
|
||||
try
|
||||
{
|
||||
return RESOURCE_BUNDLE.getString(key);
|
||||
|
||||
} catch (MissingResourceException e)
|
||||
{
|
||||
return '!' + key + '!';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads an image from a given image identifier.
|
||||
* @param key The key of the image.
|
||||
* @return The image for the given identifier.
|
||||
*/
|
||||
public static byte[] getImage(String key)
|
||||
{
|
||||
byte[] image = new byte[100000];
|
||||
|
||||
String path=Resources.getString(key);
|
||||
|
||||
try
|
||||
{
|
||||
Resources.class.getClassLoader()
|
||||
.getResourceAsStream(path).read(image);
|
||||
|
||||
} catch (IOException e)
|
||||
{
|
||||
log.error("Failed to load image:" + key, e);
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,203 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
|
||||
import java.awt.event.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* The <tt>StatusSelector</tt> is a submenu which allows to select a status for
|
||||
* a protocol provider which supports the OperationSetPresence.
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*
|
||||
*/
|
||||
public class StatusSelector
|
||||
extends JMenu
|
||||
implements ActionListener
|
||||
{
|
||||
/**
|
||||
* A reference of <tt>Systray</tt>
|
||||
*/
|
||||
private Systray parentSystray;
|
||||
/**
|
||||
* The protocol provider
|
||||
*/
|
||||
private ProtocolProviderService provider;
|
||||
/**
|
||||
* The presence status
|
||||
*/
|
||||
private OperationSetPresence presence;
|
||||
|
||||
/**
|
||||
* The logger for this class.
|
||||
*/
|
||||
private Logger logger = Logger.getLogger(
|
||||
StatusSelector.class.getName());
|
||||
|
||||
/**
|
||||
* Creates an instance of StatusSelector
|
||||
*
|
||||
* @param tray a reference of the parent <tt>Systray</tt>
|
||||
* @param pro the protocol provider
|
||||
* @param pre the presence status
|
||||
*/
|
||||
public StatusSelector(Systray tray,
|
||||
ProtocolProviderService pro, OperationSetPresence pre)
|
||||
{
|
||||
|
||||
this.parentSystray = tray;
|
||||
this.provider = pro;
|
||||
this.presence = pre;
|
||||
|
||||
/* the parent item */
|
||||
|
||||
|
||||
this.setText(provider.getAccountID().getUserID());
|
||||
this.setIcon(new ImageIcon(
|
||||
presence.getPresenceStatus().getStatusIcon()));
|
||||
|
||||
|
||||
/* the submenu itself */
|
||||
|
||||
|
||||
Iterator statusIterator = this.presence.getSupportedStatusSet();
|
||||
|
||||
while(statusIterator.hasNext())
|
||||
{
|
||||
PresenceStatus status = (PresenceStatus) statusIterator.next();
|
||||
|
||||
ImageIcon icon = new ImageIcon(status.getStatusIcon());
|
||||
JMenuItem item = new JMenuItem(status.getStatusName(),icon);
|
||||
|
||||
item.addActionListener(this);
|
||||
|
||||
this.add(item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
|
||||
JMenuItem menuItem = (JMenuItem) evt.getSource();
|
||||
|
||||
Iterator statusSet = presence.getSupportedStatusSet();
|
||||
|
||||
while (statusSet.hasNext())
|
||||
{
|
||||
|
||||
PresenceStatus status = ((PresenceStatus) statusSet.next());
|
||||
|
||||
if (status.getStatusName().equals(menuItem.getText()))
|
||||
{
|
||||
|
||||
if (this.provider.getRegistrationState()
|
||||
== RegistrationState.REGISTERED
|
||||
&& !presence.getPresenceStatus().equals(status))
|
||||
{
|
||||
if (status.isOnline())
|
||||
{
|
||||
|
||||
new PublishPresenceStatusThread(status).start();
|
||||
}
|
||||
else
|
||||
{
|
||||
new ProviderUnRegistration(this.provider).start();
|
||||
}
|
||||
}
|
||||
else if (this.provider.getRegistrationState()
|
||||
!= RegistrationState.REGISTERED
|
||||
&& this.provider.getRegistrationState()
|
||||
!= RegistrationState.REGISTERING
|
||||
&& this.provider.getRegistrationState()
|
||||
!= RegistrationState.AUTHENTICATING
|
||||
&& status.isOnline())
|
||||
{
|
||||
new ProviderRegistration(this.provider,parentSystray).start();
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!status.isOnline()
|
||||
&& !(this.provider.getRegistrationState()
|
||||
== RegistrationState.UNREGISTERING))
|
||||
{
|
||||
new ProviderUnRegistration(this.provider).start();
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class allow to use a thread to change the presence status.
|
||||
*/
|
||||
private class PublishPresenceStatusThread extends Thread
|
||||
{
|
||||
PresenceStatus status;
|
||||
|
||||
public PublishPresenceStatusThread(PresenceStatus status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public void run()
|
||||
{
|
||||
try {
|
||||
presence.publishPresenceStatus(status, "");
|
||||
}
|
||||
catch (IllegalArgumentException e1)
|
||||
{
|
||||
|
||||
logger.error("Error - changing status", e1);
|
||||
}
|
||||
catch (IllegalStateException e1)
|
||||
{
|
||||
|
||||
logger.error("Error - changing status", e1);
|
||||
}
|
||||
catch (OperationFailedException e1)
|
||||
{
|
||||
|
||||
if (e1.getErrorCode()
|
||||
== OperationFailedException.GENERAL_ERROR)
|
||||
{
|
||||
|
||||
}
|
||||
else if (e1.getErrorCode()
|
||||
== OperationFailedException
|
||||
.NETWORK_FAILURE)
|
||||
{
|
||||
|
||||
}
|
||||
else if (e1.getErrorCode()
|
||||
== OperationFailedException
|
||||
.PROVIDER_NOT_REGISTERED)
|
||||
{
|
||||
|
||||
}
|
||||
logger.error("Error - changing status", e1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,128 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
|
||||
import java.awt.event.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* The <tt>StatusSimpleSelector</tt> is a submenu which allow
|
||||
* to select a status for a protocol provider which does not
|
||||
* support the OperationSetPresence
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*
|
||||
*/
|
||||
public class StatusSimpleSelector
|
||||
extends JMenu
|
||||
implements ActionListener
|
||||
{
|
||||
/**
|
||||
* A reference of <tt>Systray</tt>
|
||||
*/
|
||||
private Systray parentSystray;
|
||||
/**
|
||||
* The protocol provider
|
||||
*/
|
||||
private ProtocolProviderService provider;
|
||||
|
||||
/**
|
||||
* The logger for this class.
|
||||
*/
|
||||
private Logger logger = Logger.getLogger(
|
||||
StatusSimpleSelector.class.getName());
|
||||
|
||||
/**
|
||||
* The menu item for the online status
|
||||
*/
|
||||
private JMenuItem onlineItem = new JMenuItem(
|
||||
Resources.getString("onlineStatus"),
|
||||
new ImageIcon(Resources.getImage("sipLogo")));
|
||||
/**
|
||||
* The menu item for the offline status
|
||||
*/
|
||||
private JMenuItem offlineItem = new JMenuItem(
|
||||
Resources.getString("offlineStatus"),
|
||||
new ImageIcon(Resources.getImage("sipLogoOffline")));
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>StatusSimpleSelector</tt>
|
||||
*
|
||||
* @param tray a reference of the parent <tt>Systray</tt>
|
||||
* @param pro the protocol provider
|
||||
*/
|
||||
public StatusSimpleSelector(Systray tray,ProtocolProviderService pro)
|
||||
{
|
||||
|
||||
this.provider = pro;
|
||||
this.parentSystray = tray;
|
||||
|
||||
/* the parent item */
|
||||
|
||||
ImageIcon icon;
|
||||
|
||||
if(provider.isRegistered())
|
||||
{
|
||||
icon = new ImageIcon(Resources.getImage("sipLogo"));
|
||||
}
|
||||
else
|
||||
{
|
||||
icon = new ImageIcon(Resources.getImage("sipLogoOffline"));
|
||||
}
|
||||
|
||||
this.setText(provider.getAccountID().getUserID());
|
||||
this.setIcon(icon);
|
||||
|
||||
/* the menu itself */
|
||||
|
||||
this.onlineItem.addActionListener(this);
|
||||
this.offlineItem.addActionListener(this);
|
||||
|
||||
this.onlineItem.setName("online");
|
||||
this.offlineItem.setName("offline");
|
||||
|
||||
this.add(onlineItem);
|
||||
this.add(offlineItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
|
||||
JMenuItem menuItem = (JMenuItem) evt.getSource();
|
||||
String itemName = menuItem.getName();
|
||||
|
||||
if(itemName.equals("online"))
|
||||
{
|
||||
if(!this.provider.isRegistered())
|
||||
{
|
||||
new ProviderRegistration(this.provider,parentSystray).start();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !this.provider.getRegistrationState()
|
||||
.equals(RegistrationState.UNREGISTERED)
|
||||
&& !this.provider.getRegistrationState()
|
||||
.equals(RegistrationState.UNREGISTERING))
|
||||
{
|
||||
new ProviderUnRegistration(this.provider).start();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,96 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
|
||||
/**
|
||||
* The <tt>StatusSubMenu</tt> provides a menu which allow
|
||||
* to select the status for each of the protocol providers
|
||||
* registered when the menu appears
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*
|
||||
*/
|
||||
|
||||
public class StatusSubMenu
|
||||
extends JMenu
|
||||
//implements ActionListener
|
||||
{
|
||||
|
||||
/**
|
||||
* A reference of <tt>Systray</tt>
|
||||
*/
|
||||
private Systray parentSystray;
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>StatusSubMenu</tt>.
|
||||
* @param tray a reference of the parent <tt>Systray</tt>
|
||||
*/
|
||||
public StatusSubMenu(Systray tray)
|
||||
{
|
||||
|
||||
parentSystray = tray;
|
||||
|
||||
this.setText(Resources.getString("setStatus"));
|
||||
this.setIcon(
|
||||
new ImageIcon(Resources.getImage("statusMenuIcon")));
|
||||
|
||||
/* makes the menu look better */
|
||||
this.setPreferredSize(new Dimension(28, 24));
|
||||
|
||||
update();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the Menu by retrieving provider informations
|
||||
*/
|
||||
public void update()
|
||||
{
|
||||
|
||||
this.removeAll();
|
||||
|
||||
Iterator it=parentSystray.getProtocolProviders();
|
||||
|
||||
while(it.hasNext()){
|
||||
ProtocolProviderService provider =
|
||||
(ProtocolProviderService) it.next();
|
||||
|
||||
Map supportedOperationSets
|
||||
= provider.getSupportedOperationSets();
|
||||
|
||||
OperationSetPresence presence = (OperationSetPresence)
|
||||
supportedOperationSets.get(OperationSetPresence.class.getName());
|
||||
|
||||
if (presence == null)
|
||||
{
|
||||
StatusSimpleSelector s =
|
||||
new StatusSimpleSelector(parentSystray,provider);
|
||||
|
||||
this.add(s);
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusSelector s =
|
||||
new StatusSelector(parentSystray,provider,presence);
|
||||
|
||||
this.add(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -1,265 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
import java.util.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
|
||||
import net.java.sip.communicator.util.*;
|
||||
import net.java.sip.communicator.service.gui.*;
|
||||
import net.java.sip.communicator.plugin.systray.*;
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.service.protocol.event.*;
|
||||
|
||||
import org.jdesktop.jdic.tray.*;
|
||||
import org.osgi.framework.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* The <tt>Systray</tt> provides a Icon and the associated <tt>TrayMenu</tt>
|
||||
* in the system tray using the Jdic library.
|
||||
*
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*
|
||||
*/
|
||||
|
||||
public class Systray
|
||||
implements ServiceListener,
|
||||
MessageListener,
|
||||
SecurityAuthority
|
||||
{
|
||||
|
||||
/**
|
||||
* A reference of the <tt>UIservice</tt>
|
||||
*/
|
||||
private UIService uiService;
|
||||
|
||||
/**
|
||||
* The icon in the system tray
|
||||
*/
|
||||
private TrayIcon trayIcon;
|
||||
|
||||
/**
|
||||
* The menu that spring with a right click
|
||||
*/
|
||||
private TrayMenu menu;
|
||||
|
||||
/**
|
||||
* this table contains an up-to-date list of all providers
|
||||
*/
|
||||
private Hashtable protocolProviderTable = new Hashtable();
|
||||
|
||||
/**
|
||||
* The logger for this class.
|
||||
*/
|
||||
private static Logger logger =
|
||||
Logger.getLogger(Systray.class.getName());
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>Systray</tt>.
|
||||
* @param service a reference of the current <tt>UIservice</tt>
|
||||
*/
|
||||
public Systray(UIService service)
|
||||
{
|
||||
this.uiService = service;
|
||||
|
||||
uiService.setExitOnMainWindowClose(false);
|
||||
|
||||
BundleContext bc = SystrayActivator.bundleContext;
|
||||
|
||||
/* we fill the protocolProviderTable with all
|
||||
* running protocol providers at the start of
|
||||
* the bundle
|
||||
*/
|
||||
|
||||
bc.addServiceListener(this);
|
||||
ServiceReference[] protocolProviderRefs = null;
|
||||
try
|
||||
{
|
||||
protocolProviderRefs = bc.getServiceReferences(
|
||||
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;
|
||||
}
|
||||
|
||||
// in case we found any
|
||||
if (protocolProviderRefs != null)
|
||||
{
|
||||
|
||||
for (int i = 0; i < protocolProviderRefs.length; i++)
|
||||
{
|
||||
ProtocolProviderService provider = (ProtocolProviderService) bc
|
||||
.getService(protocolProviderRefs[i]);
|
||||
|
||||
this.protocolProviderTable.put(
|
||||
provider.getAccountID(),
|
||||
provider);
|
||||
handleProviderAdded(provider);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* the system tray icon itself */
|
||||
|
||||
SystemTray tray = SystemTray.getDefaultSystemTray();
|
||||
|
||||
ImageIcon logoIcon = new ImageIcon(Resources.getImage("trayIcon"));
|
||||
menu = new TrayMenu(uiService,this);
|
||||
|
||||
trayIcon = new TrayIcon(
|
||||
logoIcon, "SIP Communicator", menu);
|
||||
trayIcon.setIconAutoSize(true);
|
||||
|
||||
trayIcon.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
|
||||
if(uiService.isVisible())
|
||||
{
|
||||
uiService.setVisible(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
uiService.setVisible(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
tray.addTrayIcon(trayIcon);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a set of all protocol providers.
|
||||
*
|
||||
* @return a set of all protocol providers.
|
||||
*/
|
||||
public Iterator getProtocolProviders()
|
||||
{
|
||||
return this.protocolProviderTable.values().iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently unused
|
||||
* @param evt ignored
|
||||
*/
|
||||
public void messageDelivered(MessageDeliveredEvent evt)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently unused
|
||||
* @param evt ignored
|
||||
*/
|
||||
public void messageDeliveryFailed(MessageDeliveryFailedEvent evt)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Display in a balloon the newly received message
|
||||
* @param evt the event containing the message
|
||||
*/
|
||||
public void messageReceived(MessageReceivedEvent evt)
|
||||
{
|
||||
|
||||
ApplicationWindow window = uiService.getChatWindow(evt.getSourceContact());
|
||||
|
||||
if(window.isWindowVisible())
|
||||
{
|
||||
|
||||
String contactName = evt.getSourceContact().getDisplayName();
|
||||
String message = evt.getSourceMessage().getContent();
|
||||
this.trayIcon.displayMessage(contactName,message,TrayIcon.INFO_MESSAGE_TYPE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When a service ist registered or unregistered, we update
|
||||
* the provider tables and add/remove listeners (if it supports
|
||||
* BasicInstantMessenging implementation)
|
||||
*
|
||||
* @param event ServiceEvent
|
||||
*/
|
||||
public void serviceChanged(ServiceEvent event)
|
||||
{
|
||||
|
||||
ProtocolProviderService provider = (ProtocolProviderService)
|
||||
SystrayActivator.bundleContext.getService(event.getServiceReference());
|
||||
|
||||
if (event.getType() == ServiceEvent.REGISTERED){
|
||||
protocolProviderTable.put(provider.getAccountID(),provider);
|
||||
handleProviderAdded(provider);
|
||||
|
||||
}
|
||||
if (event.getType() == ServiceEvent.UNREGISTERING){
|
||||
protocolProviderTable.remove(provider.getAccountID());
|
||||
handleProviderRemoved(provider);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the provider has an implementation
|
||||
* of OperationSetBasicInstantMessaging and
|
||||
* if so add a listerner to it
|
||||
*
|
||||
* @param provider ProtocolProviderService
|
||||
*/
|
||||
private void handleProviderAdded(ProtocolProviderService provider)
|
||||
{
|
||||
OperationSetBasicInstantMessaging opSetIm
|
||||
= (OperationSetBasicInstantMessaging) provider
|
||||
.getSupportedOperationSets().get(
|
||||
OperationSetBasicInstantMessaging.class.getName());
|
||||
|
||||
if(opSetIm != null)
|
||||
opSetIm.addMessageListener(this);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the provider has an implementation
|
||||
* of OperationSetBasicInstantMessaging and
|
||||
* if so remove its listerner
|
||||
*
|
||||
* @param provider ProtocolProviderService
|
||||
*/
|
||||
private void handleProviderRemoved(ProtocolProviderService provider)
|
||||
{
|
||||
OperationSetBasicInstantMessaging opSetIm
|
||||
= (OperationSetBasicInstantMessaging) provider
|
||||
.getSupportedOperationSets().get(
|
||||
OperationSetBasicInstantMessaging.class.getName());
|
||||
|
||||
if(opSetIm != null)
|
||||
opSetIm.removeMessageListener(this);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to login to the protocol providers
|
||||
* @param realm the realm that the credentials are needed for
|
||||
* @param defaultValues the values to propose the user by default
|
||||
* @return The Credentials associated with the speciefied realm
|
||||
*/
|
||||
public UserCredentials obtainCredentials(String realm, UserCredentials defaultValues)
|
||||
{
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,162 +0,0 @@
|
||||
/*
|
||||
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
|
||||
*
|
||||
* Distributable under LGPL license.
|
||||
* See terms of license at gnu.org.
|
||||
*/
|
||||
|
||||
package net.java.sip.communicator.plugin.systray.jdic;
|
||||
|
||||
import java.awt.event.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.*;
|
||||
|
||||
import net.java.sip.communicator.plugin.systray.*;
|
||||
import net.java.sip.communicator.service.gui.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
import org.osgi.framework.*;
|
||||
|
||||
/**
|
||||
* The <tt>Traymenu</tt> is the menu that appears when the user right-click
|
||||
* on the systray icon
|
||||
*
|
||||
* @author Nicolas Chamouard
|
||||
*/
|
||||
public class TrayMenu
|
||||
extends JPopupMenu
|
||||
implements ActionListener,
|
||||
PopupMenuListener
|
||||
{
|
||||
/**
|
||||
* The logger for this class.
|
||||
*/
|
||||
private Logger logger = Logger.getLogger(TrayMenu.class.getName());
|
||||
|
||||
/**
|
||||
* A reference of the <tt>Uiservice</tt>
|
||||
*/
|
||||
private UIService uiService;
|
||||
/**
|
||||
* A reference of <tt>Systray</tt>
|
||||
*/
|
||||
private Systray parentSystray;
|
||||
|
||||
private JMenuItem settingsItem = new JMenuItem(
|
||||
Resources.getString("settings"),
|
||||
new ImageIcon(Resources.getImage("settingsMenuIcon")));
|
||||
|
||||
private JMenuItem closeItem = new JMenuItem(
|
||||
Resources.getString("close"),
|
||||
new ImageIcon(Resources.getImage("closeMenuIcon")));
|
||||
|
||||
private JMenuItem addContactMenuItem = new JMenuItem(
|
||||
Resources.getString("addContact"),
|
||||
new ImageIcon(Resources.getImage("addContactIcon")));
|
||||
|
||||
private StatusSubMenu setStatusMenu;
|
||||
|
||||
/**
|
||||
* The configuration window called by the menu item "settings"
|
||||
*/
|
||||
private ConfigurationWindow configDialog;
|
||||
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>TrayMenu</tt>.
|
||||
* @param service a reference of the current <tt>UIservice</tt>
|
||||
* @param tray a reference of the parent <tt>Systray</tt>
|
||||
*/
|
||||
public TrayMenu(UIService service, Systray tray)
|
||||
{
|
||||
uiService = service;
|
||||
parentSystray = tray;
|
||||
|
||||
setStatusMenu = new StatusSubMenu(tray);
|
||||
|
||||
this.add(settingsItem);
|
||||
this.add(addContactMenuItem);
|
||||
this.addSeparator();
|
||||
this.add(setStatusMenu);
|
||||
this.addSeparator();
|
||||
this.add(closeItem);
|
||||
|
||||
this.settingsItem.setName("settings");
|
||||
this.closeItem.setName("close");
|
||||
this.addContactMenuItem.setName("addContact");
|
||||
|
||||
this.settingsItem.addActionListener(this);
|
||||
this.closeItem.addActionListener(this);
|
||||
this.addContactMenuItem.addActionListener(this);
|
||||
|
||||
this.addPopupMenuListener(this);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the <tt>ActionEvent</tt> when one of the menu items is selected.
|
||||
* @param evt the event containing the menu item name
|
||||
*/
|
||||
public void actionPerformed(ActionEvent evt)
|
||||
{
|
||||
|
||||
JMenuItem menuItem = (JMenuItem) evt.getSource();
|
||||
String itemName = menuItem.getName();
|
||||
|
||||
if(itemName.equals("settings"))
|
||||
{
|
||||
configDialog = uiService.getConfigurationWindow();
|
||||
configDialog.showWindow();
|
||||
}
|
||||
else if(itemName.equals("close"))
|
||||
{
|
||||
try
|
||||
{
|
||||
SystrayActivator.bundleContext.getBundle(0).stop();
|
||||
} catch (BundleException ex)
|
||||
{
|
||||
logger.error("Failed to gently shutdown Felix", ex);
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
}
|
||||
else if(itemName.equals("addContact"))
|
||||
{
|
||||
ApplicationWindow dialog = uiService.getApplicationWindow(
|
||||
ApplicationWindow.ADD_CONTACT_WINDOW);
|
||||
|
||||
if(dialog != null)
|
||||
dialog.showWindow();
|
||||
else
|
||||
uiService.getPopupDialog().showMessagePopupDialog(
|
||||
Resources.getString("failedToLoadAddContactDialog"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently unused
|
||||
* @param evt ignored
|
||||
*/
|
||||
public void popupMenuCanceled(PopupMenuEvent evt)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Currently unused
|
||||
* @param evt ignored
|
||||
*/
|
||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent evt)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill the menu with items when it is displayed
|
||||
* @param evt ignored
|
||||
*/
|
||||
public void popupMenuWillBecomeVisible(PopupMenuEvent evt)
|
||||
{
|
||||
setStatusMenu.update();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
trayIcon=net/java/sip/communicator/plugin/systray/resources/systrayIcon.png
|
||||
addContactIcon=net/java/sip/communicator/plugin/systray/resources/addContactIcon.png
|
||||
statusMenuIcon=net/java/sip/communicator/plugin/systray/resources/statusIcon.png
|
||||
settingsMenuIcon=net/java/sip/communicator/plugin/systray/resources/configureIcon.png
|
||||
closeMenuIcon=net/java/sip/communicator/plugin/systray/resources/quit.png
|
||||
sipLogo=net/java/sip/communicator/plugin/systray/resources/sipLogo.png
|
||||
sipLogoOffline=net/java/sip/communicator/plugin/systray/resources/sipLogoOffline.png
|
||||
settings=Settings...
|
||||
addContact=Add contact...
|
||||
setStatus=Set Status
|
||||
close=Close
|
||||
onlineStatus=Online
|
||||
offlineStatus=Offline
|
||||
failedToLoadAddContactDialog=Failed to load the "Add contact" wizard dialog.
|
||||
|
Before Width: | Height: | Size: 836 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 641 B |
|
Before Width: | Height: | Size: 650 B |
|
Before Width: | Height: | Size: 416 B |
|
Before Width: | Height: | Size: 625 B |
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,31 +0,0 @@
|
||||
Bundle-Activator: net.java.sip.communicator.plugin.systray.SystrayActivator
|
||||
Bundle-Name: Systray
|
||||
Bundle-Description: Systray.
|
||||
Bundle-Vendor: sip-communicator.org
|
||||
Bundle-Version: 0.0.1
|
||||
Import-Package: org.osgi.framework,
|
||||
org.jdesktop.jdic.tray,
|
||||
net.java.sip.communicator.util,
|
||||
net.java.sip.communicator.service.configuration,
|
||||
net.java.sip.communicator.service.configuration.event,
|
||||
net.java.sip.communicator.service.protocol,
|
||||
net.java.sip.communicator.service.protocol.icqconstants,
|
||||
net.java.sip.communicator.service.protocol.event,
|
||||
net.java.sip.communicator.service.contactlist,
|
||||
net.java.sip.communicator.service.contactlist.event,
|
||||
net.java.sip.communicator.service.gui,
|
||||
net.java.sip.communicator.service.gui.event,
|
||||
javax.swing,
|
||||
javax.swing.event,
|
||||
javax.swing.table,
|
||||
javax.swing.text,
|
||||
javax.swing.text.html,
|
||||
javax.accessibility,
|
||||
javax.swing.plaf,
|
||||
javax.swing.plaf.metal,
|
||||
javax.swing.plaf.basic,
|
||||
javax.imageio,
|
||||
javax.swing.filechooser,
|
||||
javax.swing.tree,
|
||||
javax.swing.undo,
|
||||
javax.swing.border
|
||||