mirror of https://github.com/sipwise/jitsi.git
classes concerning status are moved to a seperate package; SimpleStatusSelectorBox added to handle statuses for protocols that don't support presence
parent
f276208e0e
commit
60f8dfdbbc
@ -0,0 +1,380 @@
|
||||
/*
|
||||
* 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.impl.gui.main.presence;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.image.*;
|
||||
import java.util.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.Timer;
|
||||
|
||||
import net.java.sip.communicator.impl.gui.customcontrols.*;
|
||||
import net.java.sip.communicator.impl.gui.i18n.*;
|
||||
import net.java.sip.communicator.impl.gui.main.*;
|
||||
import net.java.sip.communicator.impl.gui.utils.*;
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
/**
|
||||
* The <tt>StatusSelectorBox</tt> is a <tt>SIPCommSelectorBox</tt> that contains
|
||||
* the list of statuses for a protocol provider. This is where the user could
|
||||
* select its status.
|
||||
*
|
||||
* @author Yana Stamcheva
|
||||
*/
|
||||
public class PresenceStatusSelectorBox
|
||||
extends StatusSelectorBox
|
||||
{
|
||||
|
||||
private Logger logger = Logger.getLogger(
|
||||
PresenceStatusSelectorBox.class.getName());
|
||||
|
||||
private MainFrame mainFrame;
|
||||
|
||||
private BufferedImage[] animatedImageArray;
|
||||
|
||||
private Connecting connecting = new Connecting();
|
||||
|
||||
private ProtocolProviderService protocolProvider;
|
||||
|
||||
private Iterator statusIterator;
|
||||
|
||||
private PresenceStatus offlineStatus;
|
||||
|
||||
private PresenceStatus onlineStatus;
|
||||
|
||||
private PresenceStatus lastSelectedStatus;
|
||||
|
||||
private int accountIndex;
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>StatusSelectorBox</tt> and initializes
|
||||
* the selector box with data.
|
||||
*
|
||||
* @param mainFrame The main application window.
|
||||
* @param protocolProvider The protocol provider.
|
||||
* @param accountIndex If we have more than one account for a protocol,
|
||||
* each account has an index.
|
||||
*/
|
||||
public PresenceStatusSelectorBox(MainFrame mainFrame,
|
||||
ProtocolProviderService protocolProvider,
|
||||
int accountIndex) {
|
||||
|
||||
this.mainFrame = mainFrame;
|
||||
this.protocolProvider = protocolProvider;
|
||||
this.accountIndex = accountIndex;
|
||||
|
||||
this.mainFrame.getProtocolPresence(protocolProvider);
|
||||
|
||||
this.statusIterator = this.mainFrame
|
||||
.getProtocolPresence(protocolProvider).getSupportedStatusSet();
|
||||
|
||||
this.setToolTipText(protocolProvider.getAccountID().getUserID());
|
||||
|
||||
while(statusIterator.hasNext()) {
|
||||
PresenceStatus status = (PresenceStatus) statusIterator.next();
|
||||
int connectivity = status.getStatus();
|
||||
|
||||
if(connectivity < 1) {
|
||||
this.offlineStatus = status;
|
||||
}
|
||||
else if((onlineStatus != null
|
||||
&& (onlineStatus.getStatus() < connectivity))
|
||||
|| (onlineStatus == null
|
||||
&& (connectivity > 50 && connectivity < 80))) {
|
||||
this.onlineStatus = status;
|
||||
}
|
||||
|
||||
this.addItem(status.getStatusName(),
|
||||
new ImageIcon(
|
||||
ImageLoader.getBytesInImage(status.getStatusIcon())),
|
||||
new ItemActionListener());
|
||||
}
|
||||
this.setSelectedStatus(offlineStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the <tt>ActionEvent</tt> triggered when one of the items
|
||||
* in the list is selected.
|
||||
*/
|
||||
private class ItemActionListener implements ActionListener {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (e.getSource() instanceof JMenuItem) {
|
||||
|
||||
JMenuItem menuItem = (JMenuItem) e.getSource();
|
||||
|
||||
OperationSetPresence presence = mainFrame
|
||||
.getProtocolPresence(protocolProvider);
|
||||
|
||||
Iterator statusSet = presence.getSupportedStatusSet();
|
||||
|
||||
while (statusSet.hasNext()) {
|
||||
|
||||
PresenceStatus status = ((PresenceStatus) statusSet.next());
|
||||
|
||||
if (status.getStatusName().equals(menuItem.getText())
|
||||
&& !presence.getPresenceStatus().equals(status)) {
|
||||
|
||||
try {
|
||||
if(protocolProvider.isRegistered()) {
|
||||
if (status.isOnline()) {
|
||||
presence.publishPresenceStatus(
|
||||
status, "");
|
||||
}
|
||||
else {
|
||||
mainFrame.getLoginManager()
|
||||
.setManuallyDisconnected(true);
|
||||
protocolProvider.unregister();
|
||||
}
|
||||
setSelectedStatus(status);
|
||||
}
|
||||
else {
|
||||
lastSelectedStatus = status;
|
||||
mainFrame.getLoginManager()
|
||||
.login(protocolProvider);
|
||||
}
|
||||
mainFrame.saveStatusInformation(
|
||||
protocolProvider, 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) {
|
||||
SIPCommMsgTextArea msgText
|
||||
= new SIPCommMsgTextArea(Messages
|
||||
.getString("statusChangeGeneralError"));
|
||||
|
||||
JOptionPane.showMessageDialog(null, msgText,
|
||||
Messages.getString("generalError"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
else if (e1.getErrorCode()
|
||||
== OperationFailedException
|
||||
.NETWORK_FAILURE) {
|
||||
SIPCommMsgTextArea msgText
|
||||
= new SIPCommMsgTextArea(
|
||||
Messages.getString(
|
||||
"statusChangeNetworkFailure"));
|
||||
|
||||
JOptionPane.showMessageDialog(
|
||||
null,
|
||||
msgText,
|
||||
Messages.getString("networkFailure"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
else if (e1.getErrorCode()
|
||||
== OperationFailedException
|
||||
.PROVIDER_NOT_REGISTERED) {
|
||||
SIPCommMsgTextArea msgText
|
||||
= new SIPCommMsgTextArea(
|
||||
Messages.getString(
|
||||
"statusChangeNetworkFailure"));
|
||||
|
||||
JOptionPane.showMessageDialog(
|
||||
null,
|
||||
msgText,
|
||||
Messages.getString("networkFailure"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
logger.error("Error - changing status", e1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts the timer that changes the images given by the array, thus
|
||||
* creating an animated image that indicates that the user is connecting.
|
||||
*
|
||||
* @param images A <tt>BufferedImage</tt> array that contains all images
|
||||
* from which to create the animated image indicating the connecting state.
|
||||
*/
|
||||
public void startConnecting(BufferedImage[] images) {
|
||||
|
||||
this.animatedImageArray = images;
|
||||
|
||||
this.setIcon(new ImageIcon(images[0]));
|
||||
|
||||
this.connecting.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the timer that manages the connecting animated icon.
|
||||
*/
|
||||
public void updateStatus(Object presenceStatus) {
|
||||
|
||||
PresenceStatus status = (PresenceStatus) presenceStatus;
|
||||
|
||||
OperationSetPresence presence = mainFrame
|
||||
.getProtocolPresence(protocolProvider);
|
||||
|
||||
this.connecting.stop();
|
||||
|
||||
this.setSelectedStatus(status);
|
||||
|
||||
if(protocolProvider.isRegistered()) {
|
||||
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) {
|
||||
SIPCommMsgTextArea msgText
|
||||
= new SIPCommMsgTextArea(Messages
|
||||
.getString("statusChangeGeneralError"));
|
||||
|
||||
JOptionPane.showMessageDialog(null, msgText,
|
||||
Messages.getString("generalError"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
else if (e1.getErrorCode()
|
||||
== OperationFailedException
|
||||
.NETWORK_FAILURE) {
|
||||
SIPCommMsgTextArea msgText
|
||||
= new SIPCommMsgTextArea(
|
||||
Messages.getString(
|
||||
"statusChangeNetworkFailure"));
|
||||
|
||||
JOptionPane.showMessageDialog(
|
||||
null,
|
||||
msgText,
|
||||
Messages.getString("networkFailure"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
else if (e1.getErrorCode()
|
||||
== OperationFailedException
|
||||
.PROVIDER_NOT_REGISTERED) {
|
||||
SIPCommMsgTextArea msgText
|
||||
= new SIPCommMsgTextArea(
|
||||
Messages.getString(
|
||||
"statusChangeNetworkFailure"));
|
||||
|
||||
JOptionPane.showMessageDialog(
|
||||
null,
|
||||
msgText,
|
||||
Messages.getString("networkFailure"),
|
||||
JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
logger.error("Error - changing status", e1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A <tt>Timer</tt> that creates an animated icon, which indicates the
|
||||
* connecting state.
|
||||
*/
|
||||
private class Connecting extends Timer {
|
||||
|
||||
public Connecting() {
|
||||
|
||||
super(100, null);
|
||||
|
||||
this.addActionListener(new TimerActionListener());
|
||||
}
|
||||
|
||||
private class TimerActionListener implements ActionListener {
|
||||
|
||||
private int j = 1;
|
||||
|
||||
public void actionPerformed(ActionEvent evt) {
|
||||
|
||||
PresenceStatusSelectorBox.this.setIcon(new ImageIcon(
|
||||
animatedImageArray[j]));
|
||||
j = (j + 1) % animatedImageArray.length;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Selects the given status in the status menu.
|
||||
* @param status the status to select
|
||||
*/
|
||||
public void setSelectedStatus(PresenceStatus status)
|
||||
{
|
||||
Image statusImage = ImageLoader.getBytesInImage(status.getStatusIcon());
|
||||
|
||||
this.setSelected(status.getStatusName(),
|
||||
new ImageIcon(statusImage));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Offline status in this selector box.
|
||||
* @return the Offline status in this selector box
|
||||
*/
|
||||
public PresenceStatus getOfflineStatus()
|
||||
{
|
||||
return offlineStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Online status in this selector box.
|
||||
* @return the Online status in this selector box
|
||||
*/
|
||||
public PresenceStatus getOnlineStatus()
|
||||
{
|
||||
return onlineStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the status that is currently selected.
|
||||
* @return the status that is currently selected
|
||||
*/
|
||||
public PresenceStatus getLastSelectedStatus()
|
||||
{
|
||||
return lastSelectedStatus;
|
||||
}
|
||||
|
||||
public int getAccountIndex()
|
||||
{
|
||||
return accountIndex;
|
||||
}
|
||||
|
||||
public void setAccountIndex(int accountIndex)
|
||||
{
|
||||
this.accountIndex = accountIndex;
|
||||
}
|
||||
|
||||
public void paintComponent(Graphics g)
|
||||
{
|
||||
super.paintComponent(g);
|
||||
|
||||
if(accountIndex > 0) {
|
||||
AntialiasingManager.activateAntialiasing(g);
|
||||
g.setColor(Color.DARK_GRAY);
|
||||
g.setFont(Constants.FONT.deriveFont(Font.BOLD, 9));
|
||||
g.drawString(new Integer(accountIndex).toString(), 20, 12);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateStatus()
|
||||
{}
|
||||
}
|
||||
@ -0,0 +1,202 @@
|
||||
/*
|
||||
* 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.impl.gui.main.presence;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.image.*;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
import net.java.sip.communicator.impl.gui.customcontrols.*;
|
||||
import net.java.sip.communicator.impl.gui.i18n.*;
|
||||
import net.java.sip.communicator.impl.gui.main.*;
|
||||
import net.java.sip.communicator.impl.gui.utils.*;
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
import net.java.sip.communicator.util.*;
|
||||
|
||||
/**
|
||||
* The <tt>SimpleStatusSelectorBox</tt> is a <tt>SIPCommSelectorBox</tt> that
|
||||
* contains two statuses ONLINE and OFFLINE. It's used to represent the status
|
||||
* of a protocol provider which doesn't support presence operation set.
|
||||
*
|
||||
* @author Yana Stamcheva
|
||||
*/
|
||||
public class SimpleStatusSelectorBox
|
||||
extends StatusSelectorBox
|
||||
implements ActionListener
|
||||
{
|
||||
|
||||
private Logger logger = Logger.getLogger(
|
||||
PresenceStatusSelectorBox.class.getName());
|
||||
|
||||
private MainFrame mainFrame;
|
||||
|
||||
private BufferedImage[] animatedImageArray;
|
||||
|
||||
private Connecting connecting = new Connecting();
|
||||
|
||||
private ProtocolProviderService protocolProvider;
|
||||
|
||||
private Icon onlineIcon
|
||||
= new ImageIcon(ImageLoader.getImage(ImageLoader.SIP_LOGO));
|
||||
|
||||
private Icon offlineIcon
|
||||
= new ImageIcon(LightGrayFilter.createDisabledImage(
|
||||
ImageLoader.getImage(ImageLoader.SIP_LOGO)));
|
||||
|
||||
private JMenuItem onlineItem = new JMenuItem(
|
||||
Messages.getString("online"),
|
||||
onlineIcon);
|
||||
|
||||
private JMenuItem offlineItem = new JMenuItem(
|
||||
Messages.getString("offline"),
|
||||
offlineIcon);
|
||||
|
||||
private int accountIndex;
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>SimpleStatusSelectorBox</tt>.
|
||||
*
|
||||
* @param mainFrame The main application window.
|
||||
* @param protocolProvider The protocol provider.
|
||||
* @param accountIndex If we have more than one account for a protocol,
|
||||
* each account has an index.
|
||||
*/
|
||||
public SimpleStatusSelectorBox(MainFrame mainFrame,
|
||||
ProtocolProviderService protocolProvider,
|
||||
int accountIndex)
|
||||
{
|
||||
this.mainFrame = mainFrame;
|
||||
this.protocolProvider = protocolProvider;
|
||||
this.accountIndex = accountIndex;
|
||||
|
||||
this.setToolTipText(protocolProvider.getAccountID().getUserID());
|
||||
|
||||
onlineItem.setName("online");
|
||||
offlineItem.setName("offline");
|
||||
|
||||
onlineItem.addActionListener(this);
|
||||
offlineItem.addActionListener(this);
|
||||
|
||||
this.addItem(onlineItem);
|
||||
this.addItem(offlineItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the <tt>ActionEvent</tt> triggered when one of the items
|
||||
* in the list is selected.
|
||||
*/
|
||||
public void actionPerformed(ActionEvent e)
|
||||
{
|
||||
JMenuItem menuItem = (JMenuItem) e.getSource();
|
||||
String itemName = menuItem.getName();
|
||||
|
||||
if(itemName.equals("online")) {
|
||||
if(!protocolProvider.isRegistered()) {
|
||||
this.mainFrame.getLoginManager().login(protocolProvider);
|
||||
}
|
||||
}
|
||||
else {
|
||||
try {
|
||||
mainFrame.getLoginManager()
|
||||
.setManuallyDisconnected(true);
|
||||
protocolProvider.unregister();
|
||||
}
|
||||
catch (OperationFailedException e1) {
|
||||
logger.error("Unable to unregister the protocol provider: "
|
||||
+ protocolProvider
|
||||
+ " due to the following exception: " + e1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Starts the timer that changes the images given by the array, thus
|
||||
* creating an animated image that indicates that the user is connecting.
|
||||
*
|
||||
* @param images A <tt>BufferedImage</tt> array that contains all images
|
||||
* from which to create the animated image indicating the connecting state.
|
||||
*/
|
||||
public void startConnecting(BufferedImage[] images)
|
||||
{
|
||||
this.animatedImageArray = images;
|
||||
|
||||
this.setIcon(new ImageIcon(images[0]));
|
||||
|
||||
this.connecting.start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the timer that manages the connecting animated icon.
|
||||
*/
|
||||
public void updateStatus()
|
||||
{
|
||||
this.connecting.stop();
|
||||
|
||||
if(protocolProvider.isRegistered()) {
|
||||
setSelected(onlineItem, onlineIcon);
|
||||
}
|
||||
else {
|
||||
setSelected(offlineItem, offlineIcon);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A <tt>Timer</tt> that creates an animated icon, which indicates the
|
||||
* connecting state.
|
||||
*/
|
||||
private class Connecting extends Timer {
|
||||
|
||||
public Connecting() {
|
||||
|
||||
super(100, null);
|
||||
|
||||
this.addActionListener(new TimerActionListener());
|
||||
}
|
||||
|
||||
private class TimerActionListener implements ActionListener {
|
||||
|
||||
private int j = 1;
|
||||
|
||||
public void actionPerformed(ActionEvent evt) {
|
||||
|
||||
SimpleStatusSelectorBox.this.setIcon(new ImageIcon(
|
||||
animatedImageArray[j]));
|
||||
j = (j + 1) % animatedImageArray.length;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public int getAccountIndex()
|
||||
{
|
||||
return accountIndex;
|
||||
}
|
||||
|
||||
public void setAccountIndex(int accountIndex)
|
||||
{
|
||||
this.accountIndex = accountIndex;
|
||||
}
|
||||
|
||||
public void paintComponent(Graphics g)
|
||||
{
|
||||
super.paintComponent(g);
|
||||
|
||||
if(accountIndex > 0) {
|
||||
AntialiasingManager.activateAntialiasing(g);
|
||||
g.setColor(Color.DARK_GRAY);
|
||||
g.setFont(Constants.FONT.deriveFont(Font.BOLD, 9));
|
||||
g.drawString(new Integer(accountIndex).toString(), 20, 12);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateStatus(Object status)
|
||||
{}
|
||||
}
|
||||
@ -0,0 +1,256 @@
|
||||
/*
|
||||
* 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.impl.gui.main.presence;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
import java.awt.*;
|
||||
import javax.swing.*;
|
||||
|
||||
import net.java.sip.communicator.impl.gui.*;
|
||||
import net.java.sip.communicator.impl.gui.customcontrols.*;
|
||||
import net.java.sip.communicator.impl.gui.main.*;
|
||||
import net.java.sip.communicator.impl.gui.utils.*;
|
||||
import net.java.sip.communicator.service.configuration.*;
|
||||
import net.java.sip.communicator.service.protocol.*;
|
||||
|
||||
/**
|
||||
* The <tt>StatusPanel</tt> is the place where the user can see and change
|
||||
* its status for all registered protocols.
|
||||
*
|
||||
* @author Yana Stamcheva
|
||||
*/
|
||||
public class StatusPanel extends JPanel {
|
||||
|
||||
private Hashtable protocolStatusCombos = new Hashtable();
|
||||
|
||||
private MainFrame mainFrame;
|
||||
|
||||
/**
|
||||
* Creates an instance of <tt>StatusPanel</tt>.
|
||||
* @param mainFrame The main application window.
|
||||
*/
|
||||
public StatusPanel(MainFrame mainFrame) {
|
||||
|
||||
this.mainFrame = mainFrame;
|
||||
|
||||
this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
||||
|
||||
this.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0,
|
||||
Constants.MOVER_START_COLOR));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the selector box, containing all protocol statuses, adds it to
|
||||
* the StatusPanel and refreshes the panel.
|
||||
*
|
||||
* @param protocolProvider The protocol provider.
|
||||
*/
|
||||
public void addAccount(ProtocolProviderService protocolProvider)
|
||||
{
|
||||
StatusSelectorBox protocolStatusCombo;
|
||||
|
||||
int providerIndex = this.mainFrame.getProviderIndex(protocolProvider);
|
||||
if(mainFrame.getProtocolPresence(protocolProvider) != null) {
|
||||
protocolStatusCombo
|
||||
= new PresenceStatusSelectorBox(
|
||||
this.mainFrame, protocolProvider,
|
||||
providerIndex);
|
||||
}
|
||||
else {
|
||||
protocolStatusCombo
|
||||
= new SimpleStatusSelectorBox(
|
||||
this.mainFrame, protocolProvider,
|
||||
providerIndex);
|
||||
}
|
||||
|
||||
this.protocolStatusCombos.put(protocolProvider,
|
||||
protocolStatusCombo);
|
||||
|
||||
this.add(protocolStatusCombo);
|
||||
|
||||
this.getParent().validate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the selector box, containing all protocol statuses, from
|
||||
* the StatusPanel and refreshes the panel.
|
||||
*
|
||||
* @param pps The protocol provider to remove.
|
||||
*/
|
||||
public void removeAccount(ProtocolProviderService pps) {
|
||||
|
||||
StatusSelectorBox protocolStatusCombo
|
||||
= (StatusSelectorBox) this.protocolStatusCombos.get(pps);
|
||||
|
||||
this.protocolStatusCombos.remove(pps);
|
||||
this.remove(protocolStatusCombo);
|
||||
|
||||
this.revalidate();
|
||||
this.repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the account given by the protocol provider.
|
||||
*
|
||||
* @param protocolProvider the protocol provider for the account to update
|
||||
*/
|
||||
public void updateAccount(ProtocolProviderService protocolProvider) {
|
||||
StatusSelectorBox protocolStatusCombo
|
||||
= (StatusSelectorBox) this.protocolStatusCombos
|
||||
.get(protocolProvider);
|
||||
|
||||
protocolStatusCombo.setAccountIndex(
|
||||
mainFrame.getProviderIndex(protocolProvider));
|
||||
|
||||
this.revalidate();
|
||||
this.repaint();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Shows the protocol animated icon, which indicates that it is in a
|
||||
* connecting state.
|
||||
*
|
||||
* @param protocolProvider The protocol provider.
|
||||
*/
|
||||
public void startConnecting(ProtocolProviderService protocolProvider) {
|
||||
|
||||
StatusSelectorBox selectorBox
|
||||
= (StatusSelectorBox) protocolStatusCombos
|
||||
.get(protocolProvider);
|
||||
|
||||
selectorBox.startConnecting(Constants
|
||||
.getProtocolAnimatedIcon(protocolProvider.getProtocolName()));
|
||||
|
||||
selectorBox.repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the last status that was stored in the configuration xml for the
|
||||
* given protocol provider.
|
||||
* @param protocolProvider the protocol provider
|
||||
* @return the last status that was stored in the configuration xml for the
|
||||
* given protocol provider
|
||||
*/
|
||||
public PresenceStatus getProtocolProviderLastStatus(
|
||||
ProtocolProviderService protocolProvider)
|
||||
{
|
||||
ConfigurationService configService
|
||||
= GuiActivator.getConfigurationService();
|
||||
|
||||
//find the last contact status saved in the configuration.
|
||||
String lastStatus = null;
|
||||
|
||||
OperationSetPresence presence
|
||||
= mainFrame.getProtocolPresence(protocolProvider);
|
||||
|
||||
if(presence == null)
|
||||
return null;
|
||||
|
||||
Iterator i = presence.getSupportedStatusSet();
|
||||
|
||||
String prefix = "net.java.sip.communicator.impl.ui.accounts";
|
||||
|
||||
List accounts = configService
|
||||
.getPropertyNamesByPrefix(prefix, true);
|
||||
|
||||
Iterator accountsIter = accounts.iterator();
|
||||
|
||||
while(accountsIter.hasNext()) {
|
||||
String accountRootPropName
|
||||
= (String) accountsIter.next();
|
||||
|
||||
String accountUID
|
||||
= configService.getString(accountRootPropName);
|
||||
|
||||
if(accountUID.equals(protocolProvider
|
||||
.getAccountID().getAccountUniqueID())) {
|
||||
lastStatus = configService.getString(
|
||||
accountRootPropName + ".lastAccountStatus");
|
||||
|
||||
if(lastStatus != null)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(lastStatus != null) {
|
||||
PresenceStatus status;
|
||||
while(i.hasNext()) {
|
||||
status = (PresenceStatus)i.next();
|
||||
if(status.getStatusName().equals(lastStatus)) {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the status for this protocol provider.
|
||||
*
|
||||
* @param protocolProvider The ProtocolProvider, which presence status to
|
||||
* update.
|
||||
*/
|
||||
public void updateStatus(ProtocolProviderService protocolProvider) {
|
||||
StatusSelectorBox selectorBox
|
||||
= (StatusSelectorBox) protocolStatusCombos
|
||||
.get(protocolProvider);
|
||||
|
||||
|
||||
if(selectorBox == null)
|
||||
return;
|
||||
|
||||
if(selectorBox instanceof PresenceStatusSelectorBox) {
|
||||
PresenceStatusSelectorBox presenceSelectorBox
|
||||
= (PresenceStatusSelectorBox) selectorBox;
|
||||
|
||||
if(!protocolProvider.isRegistered())
|
||||
presenceSelectorBox.updateStatus(
|
||||
presenceSelectorBox.getOfflineStatus());
|
||||
else {
|
||||
if(presenceSelectorBox.getLastSelectedStatus() != null) {
|
||||
presenceSelectorBox.updateStatus(
|
||||
presenceSelectorBox.getLastSelectedStatus());
|
||||
}
|
||||
else {
|
||||
PresenceStatus lastStatus
|
||||
= getProtocolProviderLastStatus(protocolProvider);
|
||||
|
||||
if(lastStatus == null) {
|
||||
presenceSelectorBox.updateStatus(
|
||||
presenceSelectorBox.getOnlineStatus());
|
||||
}
|
||||
else {
|
||||
presenceSelectorBox.updateStatus(lastStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
((SimpleStatusSelectorBox)selectorBox).updateStatus();
|
||||
}
|
||||
selectorBox.repaint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given protocol has already its <tt>StatusSelectorBox</tt>
|
||||
* in the <tt>StatusPanel</tt>.
|
||||
*
|
||||
* @param pps The protocol provider to check.
|
||||
* @return True if the protcol has already its StatusSelectorBox in the
|
||||
* StatusPanel, False otherwise.
|
||||
*/
|
||||
public boolean containsAccount(ProtocolProviderService pps) {
|
||||
if (protocolStatusCombos.containsKey(pps))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* 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.impl.gui.main.presence;
|
||||
|
||||
import java.awt.image.*;
|
||||
|
||||
import net.java.sip.communicator.impl.gui.customcontrols.*;
|
||||
|
||||
public abstract class StatusSelectorBox extends SIPCommSelectorBox
|
||||
{
|
||||
public void startConnecting(BufferedImage[] images){}
|
||||
|
||||
public void updateStatus(){}
|
||||
|
||||
public int getAccountIndex(){return -1;}
|
||||
|
||||
public void setAccountIndex(int index){}
|
||||
}
|
||||
Loading…
Reference in new issue